1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252
|
################################################################################
#
# 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/not_have_privilege_checks_user.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
|