252 lines
8.1 KiB
Plaintext
252 lines
8.1 KiB
Plaintext
################################################################################
|
|
#
|
|
# WL#10412: GR: notify listener services on relevant group events
|
|
#
|
|
# This test case checks that the correct notifications are
|
|
# triggered to the listeners registered in the service registry.
|
|
#
|
|
# For that it relies on a table that is updated by a listener
|
|
# through the SQL service API.
|
|
#
|
|
# This file covers a few scenarios specific to Single Primary mode.
|
|
#
|
|
# |------------+----+---------------------------------------------+------------+--------|
|
|
# | Tested | | Scenario\Where | | |
|
|
# | in this | | | Server | Others |
|
|
# | file | | | triggering | |
|
|
# | | | | event | |
|
|
# |------------+----+---------------------------------------------+------------+--------|
|
|
# | | 1 | SERVER BOOTSTRAPS GROUP | VC,2xSC | N/A |
|
|
# | | 2 | SERVER JOINS and STARTS RECOVERY | VC,SC | VC,SC |
|
|
# | | 3 | SERVER RECOVERED | SC | SC |
|
|
# | | 4 | SERVER LEAVES(ERROR), SERVER LEAVES(OFFLINE)| VC,SC | VC |
|
|
# |------------+----+---------------------------------------------+------------+--------|
|
|
# | x | 5 | SERVER BOOTSTRAPS+RECOVERS+PRIMARY ELECTION | VC,RC,2xSC | |
|
|
# | x | 6 | PRIMARY LEAVES | VC,SC,RC | VC,RC |
|
|
# |------------+----+---------------------------------------------+------------+--------|
|
|
# | | 7 | A SERVER BECOMES UNREACHABLE | SC, VC | N/A |
|
|
# | | 8 | MAJORITY UNREACHABLE | QL, SC | N/A |
|
|
# | | 9 | MAJORITY UNREACHABLE+FORCE MEMBERS | VC | N/A |
|
|
# | | 10 | MAJORITY UNREACHABLE+STOP | VC, SC | N/A |
|
|
# |------------+----+---------------------------------------------+------------+--------|
|
|
#
|
|
# Legend:
|
|
# - QL - Quorum Lost event
|
|
# - VC - View Changed event
|
|
# - RC - Role Changed event
|
|
# - SC - State Changed event
|
|
#
|
|
# To test the cases above, the test sets up a group of
|
|
# 3 servers in multi-master mode and proceeds to testing
|
|
# the different scenarios. These are highlighted in the
|
|
# test file.
|
|
################################################################################
|
|
|
|
--source include/have_debug.inc
|
|
--source include/force_restart.inc
|
|
--source include/big_test.inc
|
|
--source include/have_group_replication_plugin.inc
|
|
|
|
###
|
|
### Sets up the group with three servers: server1, server2 and server3
|
|
###
|
|
|
|
--let $rpl_server_count= 3
|
|
--let $rpl_skip_group_replication_start= 1
|
|
--source include/group_replication.inc
|
|
|
|
# server 1
|
|
|
|
--let $rpl_connection_name= server1
|
|
--source include/rpl_connection.inc
|
|
|
|
--let $debug_point= register_gms_listener_example
|
|
--source include/add_debug_point.inc
|
|
|
|
SET SQL_LOG_BIN=0;
|
|
CREATE TABLE test.gms_listener_example(log_message TEXT);
|
|
SET SQL_LOG_BIN=1;
|
|
|
|
SET GLOBAL group_replication_enforce_update_everywhere_checks= OFF;
|
|
SET GLOBAL group_replication_single_primary_mode= ON;
|
|
SET GLOBAL group_replication_force_members='';
|
|
|
|
# server 2
|
|
|
|
--let $rpl_connection_name= server2
|
|
--source include/rpl_connection.inc
|
|
|
|
--let $debug_point= register_gms_listener_example
|
|
--source include/add_debug_point.inc
|
|
|
|
SET SQL_LOG_BIN=0;
|
|
CREATE TABLE test.gms_listener_example(log_message TEXT);
|
|
SET SQL_LOG_BIN=1;
|
|
|
|
SET GLOBAL group_replication_enforce_update_everywhere_checks= OFF;
|
|
SET GLOBAL group_replication_single_primary_mode= ON;
|
|
SET GLOBAL group_replication_force_members='';
|
|
|
|
# server 3
|
|
|
|
--let $rpl_connection_name= server3
|
|
--source include/rpl_connection.inc
|
|
|
|
--let $debug_point= register_gms_listener_example
|
|
--source include/add_debug_point.inc
|
|
|
|
SET SQL_LOG_BIN=0;
|
|
CREATE TABLE test.gms_listener_example(log_message TEXT);
|
|
SET SQL_LOG_BIN=1;
|
|
|
|
SET GLOBAL group_replication_enforce_update_everywhere_checks= OFF;
|
|
SET GLOBAL group_replication_single_primary_mode= ON;
|
|
SET GLOBAL group_replication_force_members='';
|
|
|
|
|
|
--echo ### Scenario 5: SERVER BOOTSTRAPS+RECOVERS+PRIMARY ELECTION
|
|
--echo ### Expected:
|
|
--echo ### - Myself: 1 VIEW CHANGE, 2 STATE CHANGED, 1 ROLE CHANGED
|
|
--echo ### - Others: N/A
|
|
--echo ##################################################################
|
|
|
|
# start the group
|
|
--let $rpl_connection_name= server1
|
|
--source include/rpl_connection.inc
|
|
--source include/start_and_bootstrap_group_replication.inc
|
|
|
|
# view change + server moved from recovering to online
|
|
--let $expected_notifications= 1,VIEW %:1|2,STATE %:1|1,ROLE %:1
|
|
--source ../include/assert_notifications.inc
|
|
|
|
--echo ### Scenario 6: 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 ##################################################################
|
|
|
|
# server2
|
|
|
|
--let $rpl_connection_name= server2
|
|
--source include/rpl_connection.inc
|
|
|
|
--source include/start_group_replication.inc
|
|
|
|
# server2 joins and as such, it changes its state to online
|
|
--let $expected_notifications= 1,VIEW %:2|2,STATE %:2
|
|
--source ../include/assert_notifications.inc
|
|
|
|
# server3
|
|
|
|
--let $rpl_connection_name= server3
|
|
--source include/rpl_connection.inc
|
|
|
|
--source include/start_group_replication.inc
|
|
|
|
# server3 joins and as such, it changes its state to online
|
|
--let $expected_notifications= 1,VIEW %:3|2,STATE %:3
|
|
--source ../include/assert_notifications.inc
|
|
|
|
# server1
|
|
|
|
--let $rpl_connection_name= server1
|
|
--source include/rpl_connection.inc
|
|
|
|
--let $expected_notifications= 1,VIEW %2|1,VIEW %:3|2,STATE %:2|2,STATE %:3
|
|
--source ../include/assert_notifications.inc
|
|
|
|
--disable_query_log
|
|
TRUNCATE gms_listener_example;
|
|
--source include/rpl_sync.inc
|
|
--enable_query_log
|
|
|
|
# this will cause the primary to switch
|
|
--source include/stop_group_replication.inc
|
|
|
|
# server1 installs leave view, its state change and its
|
|
# role changed as well.
|
|
--let $expected_notifications= 1,VIEW %: |1,STATE %: |1,ROLE %:%
|
|
--source ../include/assert_notifications.inc
|
|
|
|
# server2
|
|
--let $rpl_connection_name= server2
|
|
--source include/rpl_connection.inc
|
|
|
|
# wait for the group to rearrange itself
|
|
--let $group_replication_number_of_members= 2
|
|
--source include/gr_wait_for_number_of_members.inc
|
|
|
|
# server2 installs new view and a notification about
|
|
# primary change and the notifications about server3
|
|
# joining as well
|
|
--let $expected_notifications= 1,VIEW %:4|1,ROLE %:4
|
|
--source ../include/assert_notifications.inc
|
|
|
|
# server3
|
|
--let $rpl_connection_name= server3
|
|
--source include/rpl_connection.inc
|
|
|
|
# wait for the group to rearrange itself
|
|
--let $group_replication_number_of_members= 2
|
|
--source include/gr_wait_for_number_of_members.inc
|
|
|
|
# server3 installs new view and a notification about
|
|
# primary change
|
|
--let $expected_notifications= 1,VIEW %:4|1,ROLE %:4
|
|
--source ../include/assert_notifications.inc
|
|
|
|
###
|
|
### Clean up and bail out
|
|
###
|
|
|
|
# server2
|
|
|
|
--let $rpl_connection_name= server2
|
|
--source include/rpl_connection.inc
|
|
--source include/stop_group_replication.inc
|
|
|
|
#server3
|
|
|
|
--let $rpl_connection_name= server3
|
|
--source include/rpl_connection.inc
|
|
--source include/stop_group_replication.inc
|
|
|
|
# server1
|
|
|
|
--let $rpl_connection_name= server1
|
|
--source include/rpl_connection.inc
|
|
|
|
--let $debug_point= register_gms_listener_example
|
|
--source include/remove_debug_point.inc
|
|
|
|
--source include/start_and_bootstrap_group_replication.inc
|
|
|
|
# server2
|
|
|
|
--let $rpl_connection_name= server2
|
|
--source include/rpl_connection.inc
|
|
|
|
--let $debug_point= register_gms_listener_example
|
|
--source include/remove_debug_point.inc
|
|
|
|
--source include/start_group_replication.inc
|
|
|
|
# server3
|
|
|
|
--let $rpl_connection_name= server3
|
|
--source include/rpl_connection.inc
|
|
|
|
--let $debug_point= register_gms_listener_example
|
|
--source include/remove_debug_point.inc
|
|
|
|
--source include/start_group_replication.inc
|
|
|
|
--let $rpl_connection_name= server1
|
|
--source include/rpl_connection.inc
|
|
|
|
DROP TABLE gms_listener_example;
|
|
--source include/rpl_sync.inc
|
|
|
|
--source include/group_replication_end.inc
|