polardbxengine/mysql-test/suite/x/t/notices_gr_single_primary.test

246 lines
7.8 KiB
Plaintext

################################################################################
#
# WL#10655: Global notification for GR membership changes
#
# This test case checks that enabled notices are triggered and delivered to
# client.
#
# This file covers a few scenarios specific to Single Primary mode.
#
#
# +----+---------------------------------------------+------------+---------|
# | Lp | Scenario\Where | | |
# | | | Server1 | Server2 |
# | | | triggering | |
# | | | event | |
# +----+---------------------------------------------+------------+---------|
# | 1 | SERVER BOOTSTRAPS+RECOVERS+PRIMARY ELECTION | VC,RC,2xSC | |
# | 2 | PRIMARY LEAVES | VC,SC,RC | VC,RC |
# +----+---------------------------------------------+------------+---------|
#
# Scenarios described inside the table will be repeated two times:
#
# * X Protocol GR notices enabled - verify delivery of the notices
# * X Protocol GR notices disabled - verify that X Plugin doesn't send the notices
#
--source include/count_sessions.inc
--source include/force_restart.inc
--source include/big_test.inc
--source include/have_mysqlx_plugin.inc
--source include/have_group_replication_plugin.inc
## Test starts here
--let $xtest=$MYSQL_TMP_DIR/group_replication_setup_and_xnotices_test.tmp
--write_file $xtest
-->import group_replication.macro
-->import assert_notices.macro
-->echo
-->echo ###
-->echo ### Sets up the group with two servers: server1 and server2
-->echo ###
callmacro Connect_to_all_mysqld_instances verify %SERVER_NUMBER%;
callmacro %ENABLE_NOTICES% %SERVER_NUMBER%
{"notice":["group_replication/membership/quorum_loss",
"group_replication/membership/view",
"group_replication/status/role_change",
"group_replication/status/state_change"]};
callmacro Connect_to_all_mysqld_instances server %SERVER_NUMBER%;
repeat %SERVER_NUMBER% %ITERATION%;
varlet %SESSION_ITERATION% %ITERATION%;
varinc %SESSION_ITERATION% 1;
callmacro Setsession server_%SESSION_ITERATION%;
noquery_result;
SET GLOBAL group_replication_enforce_update_everywhere_checks= OFF;
SET GLOBAL group_replication_single_primary_mode= ON;
SET GLOBAL group_replication_force_members='';
query_result;
endrepeat;
callmacro GR_clear_bootstrap_group %SERVER_NUMBER%;
-->echo
-->echo ### Scenario 1: SERVER BOOTSTRAPS+RECOVERS+PRIMARY ELECTION
-->echo ### Expected:
-->echo ### - Myself: 1 VIEW CHANGE, 2 STATE CHANGED, 1 ROLE CHANGED
-->echo ### - Others: N/A
-->echo ##########################################################################
callmacro GR_start_and_bootstrap %SERVER_NUMBER% %GR_NAME% ONLINE;
callmacro GR_clear_bootstrap_group %SERVER_NUMBER%;
callmacro %ASSERT_NOTICES% view_changed verify_1;
callmacro %ASSERT_NOTICES% state_changed verify_1;
callmacro %ASSERT_NOTICES% state_changed verify_1;
callmacro %ASSERT_NOTICES% role_changed verify_1;
callmacro %ASSERT_NOTICES% none verify_1;
callmacro %ASSERT_NOTICES% none verify_2;
callmacro %ASSERT_NOTICES% none verify_3;
-->echo
-->echo ### Scenario 2: PRIMARY LEAVES the GROUP
-->echo ### Expected:
-->echo ### - Myself (old primary): 1 VIEW CHANGED, 1 STATE CHANGED, 1 ROLE CHANGED
-->echo ### - Others (new primary): 1 VIEW CHANGED, 1 ROLE CHANGED
-->echo ### - Others (secondary): 1 VIEW CHANGED, 1 ROLE CHANGED
-->echo ##########################################################################
callmacro Setsession server_2;
callmacro GR_start %GR_NAME% ONLINE;
callmacro %ASSERT_NOTICES% view_changed verify_1;
callmacro %ASSERT_NOTICES% state_changed verify_1;
callmacro %ASSERT_NOTICES% state_changed verify_1;
callmacro %ASSERT_NOTICES% none verify_1;
callmacro %ASSERT_NOTICES% view_changed verify_2;
callmacro %ASSERT_NOTICES% state_changed verify_2;
callmacro %ASSERT_NOTICES% state_changed verify_2;
callmacro %ASSERT_NOTICES% none verify_2;
callmacro %ASSERT_NOTICES% none verify_3;
callmacro Setsession server_3;
callmacro GR_start %GR_NAME% ONLINE;
callmacro %ASSERT_NOTICES% view_changed verify_1;
callmacro %ASSERT_NOTICES% state_changed verify_1;
callmacro %ASSERT_NOTICES% state_changed verify_1;
callmacro %ASSERT_NOTICES% none verify_1;
callmacro %ASSERT_NOTICES% view_changed verify_2;
callmacro %ASSERT_NOTICES% state_changed verify_2;
callmacro %ASSERT_NOTICES% state_changed verify_2;
callmacro %ASSERT_NOTICES% none verify_2;
callmacro %ASSERT_NOTICES% view_changed verify_3;
callmacro %ASSERT_NOTICES% state_changed verify_3;
callmacro %ASSERT_NOTICES% state_changed verify_3;
callmacro %ASSERT_NOTICES% none verify_3;
callmacro Setsession server_1;
callmacro GR_stop;
callmacro %ASSERT_NOTICES% view_changed verify_1;
callmacro %ASSERT_NOTICES% state_changed verify_1;
callmacro %ASSERT_NOTICES% role_changed verify_1;
callmacro %ASSERT_NOTICES% none verify_1;
callmacro Setsession server_2;
callmacro GR_wait_for_number_of_members 2;
callmacro %ASSERT_NOTICES% view_changed verify_2;
callmacro %ASSERT_NOTICES% role_changed verify_2;
callmacro %ASSERT_NOTICES% none verify_2;
callmacro Setsession server_3;
callmacro GR_wait_for_number_of_members 2;
callmacro %ASSERT_NOTICES% view_changed verify_3;
callmacro %ASSERT_NOTICES% role_changed verify_3;
callmacro %ASSERT_NOTICES% none verify_3;
-->echo
-->echo ###
-->echo ### In X test cleanup
-->echo ###
callmacro Setsession server_2;
callmacro GR_stop;
callmacro Setsession server_3;
callmacro GR_stop;
EOF
## Setup X Plugin & GR
--let $dont_reset_global_status_variables=1
--source include/xplugin_preamble.inc
--let $rpl_server_count= 3
--let $rpl_skip_group_replication_start= 1
--source include/group_replication.inc
--let $ceiling= `SELECT $rpl_server_count + 1`
--let $i = 1
while ($i < $ceiling)
{
--let $rpl_connection_silent= 1
--let $rpl_connection_name= server$i
--echo [Setup XPlugin user on connection '$rpl_connection_name']
--source include/rpl_connection.inc
--let $create_user_disable_binlog=1
--source include/xplugin_create_user.inc
--inc $i
}
--let $rpl_connection_silent= 0
--echo
--echo ## Protocol GR notices enabled - verify delivery of the notices
--echo ##########################################################################
exec $MYSQLXTEST
-ux_root --ssl-mode=disabled --file=$xtest
-v %SERVER_NUMBER%=$rpl_server_count
-v %GR_NAME%=$group_replication_group_name
-v %ASSERT_NOTICES%=CHK_assert_notice
-v %ENABLE_NOTICES%=Enable_notice
-v %SERVER_XPORT_1%=$MASTER_X_MYPORT_1
-v %SERVER_XPORT_2%=$MASTER_X_MYPORT_2
-v %SERVER_XPORT_3%=$MASTER_X_MYPORT_3 2>&1;
--echo
--echo ## X Protocol GR notices disabled - verify that X Plugin doesn't send the notices
--echo ##########################################################################
exec $MYSQLXTEST
-ux_root --ssl-mode=disabled --file=$xtest
-v %SERVER_NUMBER%=$rpl_server_count
-v %GR_NAME%=$group_replication_group_name
-v %ASSERT_NOTICES%=CHK_assert_notice_none_ignore_args
-v %ENABLE_NOTICES%=Dont_enable_notice
-v %SERVER_XPORT_1%=$MASTER_X_MYPORT_1
-v %SERVER_XPORT_2%=$MASTER_X_MYPORT_2
-v %SERVER_XPORT_3%=$MASTER_X_MYPORT_3 2>&1;
## Cleanup
--remove_file $xtest
--source include/group_replication_end.inc
--let $i = 1
--let $rpl_connection_silent=1
while ($i < $ceiling)
{
--let $rpl_connection_silent= 1
--let $rpl_connection_name= server$i
--source include/rpl_connection.inc
--source include/xplugin_drop_user.inc
--inc $i
}
# Following connections are established by group_replication.inc,
# still group_replication_end.inc doesn't disconnects them.
#
# Releasing the connections manually
#
--disconnect server1
--disconnect server2
--disconnect server3
--disconnect master1
--disconnect master
--disconnect slave1
--disconnect slave
--connection default
# Wait till all disconnects are completed
--source include/wait_until_count_sessions.inc