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
|
################################################################################
# Group Replication: cross-version policies
# This test-case makes sure in multi-primary mode:
# 1. Lower version servers(considering patch version) do not join group
# 2. Higher version servers(considering patch version) are in read-only mode
# 3. When versions are same(considering patch version) servers are writable
#
# Test:
# 0. The test requires two servers: M1 and M2.
# Bootstrap M1 and set environment on M2.
# 1. Lower version do not join the group.
# 1.1. Make M2 major version lower and make sure START GR fails.
# 1.2. Make M2 minor version lower and make sure START GR fails.
# 1.3. Make M2 patch version lower and make sure START GR succeeds
# because both versions are 8.0 and >= 8.0.35.
# 2. Higher version are in read-only mode.
# 2.1. Make M2 major version higher and assert read-only is set.
# 2.2. Make M2 minor version higher and assert read-only is set.
# 2.3. Make M2 patch version higher and assert read-only is set.
# 3. Make M2 version same as M1 and confirm both M1 and M2 are online.
# Assert read-only is disabled on M2.
# 4. Cleanup.
#
################################################################################
--source include/big_test.inc
--source include/have_debug.inc
--source include/have_group_replication_plugin.inc
--let $rpl_skip_group_replication_start= 1
--source include/group_replication.inc
--let $rpl_connection_name= server1
--source include/rpl_connection.inc
--source include/start_and_bootstrap_group_replication.inc
--let $rpl_connection_name= server2
--source include/rpl_connection.inc
--let $server2_uuid= query_get_value(SELECT @@SERVER_UUID, @@SERVER_UUID, 1)
SET SESSION sql_log_bin=0;
call mtr.add_suppression("Member version is incompatible with the group.");
call mtr.add_suppression("Member version is read compatible with the group.");
SET SESSION sql_log_bin=1;
SET @debug_save= @@GLOBAL.DEBUG;
--echo
--echo # 1. Lower version do not join the group.
--echo
--echo
--echo # 1.1. Make M2 major version lower and make sure START GR fails.
SET @@GLOBAL.DEBUG= 'd,group_replication_compatibility_lower_major_version';
--replace_result $group_replication_group_name GROUP_REPLICATION_GROUP_NAME
--eval SET GLOBAL group_replication_group_name= "$group_replication_group_name"
--error ER_GROUP_REPLICATION_CONFIGURATION
START GROUP_REPLICATION;
--let $assert_text= Assert M2 is OFFLINE.
--let $assert_cond= [SELECT COUNT(*) FROM performance_schema.replication_group_members WHERE member_state="OFFLINE" AND member_id="$server2_uuid"] = 1
--source include/assert.inc
--echo
--echo # 1.2. Make M2 minor version lower and make sure START GR fails.
SET @@GLOBAL.DEBUG= 'd,group_replication_compatibility_lower_minor_version';
--error ER_GROUP_REPLICATION_CONFIGURATION
START GROUP_REPLICATION;
--let $assert_text= Assert M2 is OFFLINE.
--let $assert_cond= [SELECT COUNT(*) FROM performance_schema.replication_group_members WHERE member_state="OFFLINE" AND member_id="$server2_uuid"] = 1
--source include/assert.inc
--echo
--echo # 1.3. Make M2 patch version lower and make sure START GR succeeds
--echo # because both versions are 8.0 and >= 8.0.35.
SET @@GLOBAL.DEBUG= 'd,group_replication_compatibility_lower_patch_version';
--source include/start_group_replication.inc
--source include/gr_assert_mpm_consistency.inc
--source include/stop_group_replication.inc
--echo
--echo # 2. Higher version are in read-only mode.
--echo
--echo
--echo # 2.1. Make M2 major version higher and assert read-only is set.
SET @@GLOBAL.DEBUG= 'd,group_replication_compatibility_higher_major_version';
--source include/start_group_replication.inc
--source include/gr_assert_mpm_consistency.inc
--echo
--echo # 2.2. Make M2 minor version higher and assert read-only is set.
--let $rpl_connection_name= server2
--source include/rpl_connection.inc
--source include/stop_group_replication.inc
SET @@GLOBAL.DEBUG= 'd,group_replication_compatibility_higher_minor_version';
--source include/start_group_replication.inc
--source include/gr_assert_mpm_consistency.inc
--echo
--echo # 2.3. Make M2 patch version higher and assert read-only is set.
--let $rpl_connection_name= server2
--source include/rpl_connection.inc
--source include/stop_group_replication.inc
SET @@GLOBAL.DEBUG= 'd,group_replication_compatibility_higher_patch_version';
--source include/start_group_replication.inc
--source include/gr_assert_mpm_consistency.inc
--echo
--echo # 3. Make M2 version same as M1 and confirm both M1 and M2 are online.
--echo # Assert read-only is disabled on M2.
--echo
--let $rpl_connection_name= server2
--source include/rpl_connection.inc
--source include/stop_group_replication.inc
# Single member testing in MPM mode.
--source include/gr_assert_mpm_consistency.inc
SET @@GLOBAL.DEBUG= @debug_save;
--source include/start_group_replication.inc
--source include/gr_assert_mpm_consistency.inc
--echo
--echo # 4. Cleanup.
--echo
--source include/group_replication_end.inc
|