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
|
################################################################################
# WL #9149
#
# This test checks the basic functionality of the Group Replication
# performance_schema.replication_group_communication_information table.
#
# Test:
# 0) The test uses 2 servers: M1 and M2. Confirm the table is empty before
# starting Group Replication. M1 bootstraps the group in single-primary
# mode.
# 1) Confirm the preferred consensus leader is the PRIMARY.
# 2) Switch to multi-primary mode. Confirm everyone is a preferred consensus
# leader.
# 3) Confirm write_concurrency matches the result of
# group_replication_get_write_concurrency.
# 4) Confirm protocol_version matches the result of
# group_replication_get_communication_protocol.
# 5) Switch to single-primary mode. Switch communication_protocol to 8.0.21.
# Confirm everyone is a preferred consensus leader even in single-primary
# mode.
# 6) Cleanup.
################################################################################
--source include/have_group_replication_plugin.inc
--let $rpl_server_count= 2
--let $rpl_skip_group_replication_start= 1
--let $rpl_group_replication_single_primary_mode= 1
--source include/group_replication.inc
--echo #########################################################################
--echo # 0) The test uses 2 servers: M1 and M2. Confirm the table is empty
--echo # before starting Group Replication. M1 bootstraps the group in
--echo # single-primary mode.
--let $assert_text= The performance_schema.replication_group_communication_information table should be empty
--let $assert_cond= "[SELECT COUNT(*) FROM performance_schema.replication_group_communication_information]" = "0"
--source include/assert.inc
--source include/start_and_bootstrap_group_replication.inc
--let $rpl_connection_name= server2
--source include/rpl_connection.inc
--source include/start_group_replication.inc
--echo ########################################################################
--echo # 1) Confirm the preferred consensus leader is the PRIMARY.
--let $preferred_leader_uuid= query_get_value(SELECT write_consensus_leaders_preferred FROM performance_schema.replication_group_communication_information, write_consensus_leaders_preferred, 1)
--let $primary_uuid= query_get_value(SELECT member_id FROM performance_schema.replication_group_members WHERE member_role = "PRIMARY", member_id, 1)
--let $assert_text= The UUID of the PRIMARY member should match the UUID of the preferred consensus leader
--let $assert_cond= "$primary_uuid" = "$preferred_leader_uuid"
--source include/assert.inc
--let $rpl_connection_name= server1
--source include/rpl_connection.inc
--let $preferred_leader_uuid= query_get_value(SELECT write_consensus_leaders_preferred FROM performance_schema.replication_group_communication_information, write_consensus_leaders_preferred, 1)
--let $primary_uuid= query_get_value(SELECT member_id FROM performance_schema.replication_group_members WHERE member_role = "PRIMARY", member_id, 1)
--let $assert_text= The UUID of the PRIMARY member should match the UUID of the preferred consensus leader
--let $assert_cond= "$primary_uuid" = "$preferred_leader_uuid"
--source include/assert.inc
--echo ########################################################################
--echo # 2) Switch to multi-primary mode, confirm everyone is a preferred
--echo # consensus leader.
SELECT group_replication_switch_to_multi_primary_mode();
--let $preferred_leader_uuids= query_get_value(SELECT write_consensus_leaders_preferred FROM performance_schema.replication_group_communication_information, write_consensus_leaders_preferred, 1)
--let $primary_uuid_1= query_get_value(SELECT member_id FROM performance_schema.replication_group_members WHERE member_role = "PRIMARY", member_id, 1)
--let $wait_condition= SELECT COUNT(*)=1 FROM performance_schema.replication_group_communication_information WHERE write_consensus_leaders_preferred LIKE "%$primary_uuid_1%"
--source include/wait_condition_or_abort.inc
--let $primary_uuid_2= query_get_value(SELECT member_id FROM performance_schema.replication_group_members WHERE member_role = "PRIMARY", member_id, 2)
--let $wait_condition= SELECT COUNT(*)=1 FROM performance_schema.replication_group_communication_information WHERE write_consensus_leaders_preferred LIKE "%$primary_uuid_2%"
--source include/wait_condition_or_abort.inc
--let $rpl_connection_name= server2
--source include/rpl_connection.inc
--let $preferred_leader_uuids= query_get_value(SELECT write_consensus_leaders_preferred FROM performance_schema.replication_group_communication_information, write_consensus_leaders_preferred, 1)
--let $primary_uuid_1= query_get_value(SELECT member_id FROM performance_schema.replication_group_members WHERE member_role = "PRIMARY", member_id, 1)
--let $wait_condition= SELECT COUNT(*)=1 FROM performance_schema.replication_group_communication_information WHERE write_consensus_leaders_preferred LIKE "%$primary_uuid_1%"
--source include/wait_condition_or_abort.inc
--let $primary_uuid_2= query_get_value(SELECT member_id FROM performance_schema.replication_group_members WHERE member_role = "PRIMARY", member_id, 2)
--let $wait_condition= SELECT COUNT(*)=1 FROM performance_schema.replication_group_communication_information WHERE write_consensus_leaders_preferred LIKE "%$primary_uuid_2%"
--source include/wait_condition_or_abort.inc
--let $rpl_connection_name= server1
--source include/rpl_connection.inc
--echo ########################################################################
--echo # 3) Confirm write_concurrency matches the result of
--echo # group_replication_get_write_concurrency.
--let $write_concurrency_udf= `SELECT group_replication_get_write_concurrency()`
--let $write_concurrency_table= query_get_value(SELECT write_concurrency FROM performance_schema.replication_group_communication_information, write_concurrency, 1)
--let $assert_text= write_concurrency ($write_concurrency_table) should be $write_concurrency_udf
--let $assert_cond= "$write_concurrency_table" = "$write_concurrency_udf"
--source include/assert.inc
--let $rpl_connection_name= server2
--source include/rpl_connection.inc
--let $write_concurrency_udf= `SELECT group_replication_get_write_concurrency()`
--let $write_concurrency_table= query_get_value(SELECT write_concurrency FROM performance_schema.replication_group_communication_information, write_concurrency, 1)
--let $assert_text= write_concurrency ($write_concurrency_table) should be $write_concurrency_udf
--let $assert_cond= "$write_concurrency_table" = "$write_concurrency_udf"
--source include/assert.inc
--echo ########################################################################
--echo # 4) Confirm protocol_version matches the result of
--echo # group_replication_get_communication_protocol.
--let $rpl_connection_name= server1
--source include/rpl_connection.inc
--let $communication_protocol_udf= `SELECT group_replication_get_communication_protocol()`
--let $communication_protocol_table= query_get_value(SELECT protocol_version FROM performance_schema.replication_group_communication_information, protocol_version, 1)
--let $assert_text= protocol_version ($communication_protocol_table) should be $communication_protocol_udf
--let $assert_cond= "$communication_protocol_table" = "$communication_protocol_udf"
--source include/assert.inc
--let $rpl_connection_name= server2
--source include/rpl_connection.inc
--let $communication_protocol_udf= `SELECT group_replication_get_communication_protocol()`
--let $communication_protocol_table= query_get_value(SELECT protocol_version FROM performance_schema.replication_group_communication_information, protocol_version, 1)
--let $assert_text= protocol_version ($communication_protocol_table) should be $communication_protocol_udf
--let $assert_cond= "$communication_protocol_table" = "$communication_protocol_udf"
--source include/assert.inc
--echo ########################################################################
--echo # 5) Switch to single-primary mode. Switch communication_protocol to
--echo # 8.0.21. Confirm everyone is a preferred consensus leader even in
--echo # single-primary. Must stop and start the group with
--echo # group_replication_paxos_single_leader=OFF
--let $rpl_connection_name= server2
--source include/rpl_connection.inc
--source include/stop_group_replication.inc
--eval SET GLOBAL group_replication_paxos_single_leader = "OFF"
--let $rpl_connection_name= server1
--source include/rpl_connection.inc
--source include/stop_group_replication.inc
--eval SET GLOBAL group_replication_paxos_single_leader = "OFF"
--source include/start_and_bootstrap_group_replication.inc
--let $rpl_connection_name= server2
--source include/rpl_connection.inc
--source include/start_group_replication.inc
--let $rpl_connection_name= server1
--source include/rpl_connection.inc
SELECT group_replication_switch_to_single_primary_mode();
SELECT group_replication_set_communication_protocol("8.0.21");
--let $preferred_leader_uuids= query_get_value(SELECT write_consensus_leaders_preferred FROM performance_schema.replication_group_communication_information, write_consensus_leaders_preferred, 1)
--let $member_uuid_1= $primary_uuid_1
--let $wait_condition= SELECT COUNT(*)=1 FROM performance_schema.replication_group_communication_information WHERE write_consensus_leaders_preferred LIKE "%$member_uuid_1%"
--source include/wait_condition.inc
--let $member_uuid_2= $primary_uuid_2
--let $wait_condition= SELECT COUNT(*)=1 FROM performance_schema.replication_group_communication_information WHERE write_consensus_leaders_preferred LIKE "%$member_uuid_2%"
--source include/wait_condition_or_abort.inc
--let $assert_only_after = CURRENT_TEST: group_replication.gr_perfschema_group_communication_information
--let $assert_file= $MYSQLTEST_VARDIR/log/mysqld.1.err
--let $assert_select= A member is joining the group while a group configuration operation is occurring. The member will now leave the group
--let $assert_count= 0
--let $assert_text= There is no warning about a member joining the group while a group configuration operation is occurring
--source include/assert_grep.inc
--let $rpl_connection_name= server2
--source include/rpl_connection.inc
--let $preferred_leader_uuids= query_get_value(SELECT write_consensus_leaders_preferred FROM performance_schema.replication_group_communication_information, write_consensus_leaders_preferred, 1)
--let $member_uuid_1= $primary_uuid_1
--let $wait_condition= SELECT COUNT(*)=1 FROM performance_schema.replication_group_communication_information WHERE write_consensus_leaders_preferred LIKE "%$member_uuid_1%"
--source include/wait_condition_or_abort.inc
--let $member_uuid_2= $primary_uuid_2
--let $wait_condition= SELECT COUNT(*)=1 FROM performance_schema.replication_group_communication_information WHERE write_consensus_leaders_preferred LIKE "%$member_uuid_2%"
--source include/wait_condition_or_abort.inc
--let $assert_only_after = CURRENT_TEST: group_replication.gr_perfschema_group_communication_information
--let $assert_file= $MYSQLTEST_VARDIR/log/mysqld.2.err
--let $assert_select= A member is joining the group while a group configuration operation is occurring. The member will now leave the group
--let $assert_count= 0
--let $assert_text= There is no warning about a member joining the group while a group configuration operation is occurring
--source include/assert_grep.inc
--echo ########################################################################
--echo # 6) Cleanup.
--let $rpl_connection_name= server2
--source include/rpl_connection.inc
--eval SET GLOBAL group_replication_paxos_single_leader = "ON"
--let $rpl_connection_name= server1
--source include/rpl_connection.inc
--eval SET GLOBAL group_replication_paxos_single_leader = "ON"
--let $rpl_group_replication_reset_persistent_vars= 1
--source include/group_replication_end.inc
|