246 lines
7.8 KiB
Plaintext
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
|