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
|
############################################################
# WL#9426: Single PRIMARY Mode in Group Replication
#
# This test checks the combinations of the options
# group_replication_enforce_update_everywhere_checks
# and
# group_replication_single_primary_mode
############################################################
--source include/have_group_replication_plugin.inc
--let $rpl_skip_group_replication_start= 1
--let $saved_single_primary_mode= `SELECT @@GLOBAL.group_replication_single_primary_mode`
--let $saved_enforce_update_everywhere_checks= `SELECT @@GLOBAL.group_replication_enforce_update_everywhere_checks`
# restart MySQL Server with invalid single primary mode configuration
--let $rpl_connection_name= default
--source include/rpl_connection.inc
--let $_group_replication_local_address= `SELECT @@GLOBAL.group_replication_local_address`
--let $_group_replication_group_seeds= `SELECT @@GLOBAL.group_replication_group_seeds`
--let $restart_parameters=restart: --group_replication_enforce_update_everywhere_checks=ON --group_replication_single_primary_mode=ON --group_replication_local_address=$_group_replication_local_address --group_replication_group_seeds=$_group_replication_group_seeds --group-replication-group-name=$group_replication_group_name
--replace_result $_group_replication_local_address GROUP_REPLICATION_LOCAL_ADDRESS $_group_replication_group_seeds GROUP_REPLICATION_GROUP_SEEDS $group_replication_group_name GROUP_REPLICATION_GROUP_NAME
--source include/restart_mysqld.inc
## verify that 'start group_replication' should fail when MySQL Server is started with
## invalid single primary mode configuration
--source include/group_replication.inc
SET SESSION sql_log_bin= 0;
call mtr.add_suppression("It is not allowed to run single primary mode with 'group_replication_enforce_update_everywhere_checks' enabled.");
SET SESSION sql_log_bin= 1;
--error ER_GROUP_REPLICATION_CONFIGURATION
START GROUP_REPLICATION;
# set single primary mode configuration to valid values
SET GLOBAL group_replication_single_primary_mode= FALSE;
SET GLOBAL group_replication_enforce_update_everywhere_checks= FALSE;
## group_replication_single_primary_mode verifications
--error ER_WRONG_VALUE_FOR_VAR
SET GLOBAL group_replication_single_primary_mode= DEFAULT;
--error ER_WRONG_VALUE_FOR_VAR
SET GLOBAL group_replication_single_primary_mode= NULL;
--error ER_WRONG_VALUE_FOR_VAR
SET GLOBAL group_replication_single_primary_mode= "AAAAAA";
--let $assert_text= 'group_replication_single_primary_mode should be set to 0'
--let $assert_cond= [SELECT @@group_replication_single_primary_mode as value, value, 1] = 0
--source include/assert.inc
SET GLOBAL group_replication_single_primary_mode= TRUE;
--let $assert_text= 'group_replication_single_primary_mode should be set to 1'
--let $assert_cond= [SELECT @@group_replication_single_primary_mode as value, value, 1] = 1
--source include/assert.inc
SET GLOBAL group_replication_single_primary_mode= FALSE;
--let $assert_text= 'group_replication_single_primary_mode should be set to 0'
--let $assert_cond= [SELECT @@group_replication_single_primary_mode as value, value, 1] = 0
--source include/assert.inc
SET GLOBAL group_replication_single_primary_mode= ON;
--let $assert_text= 'group_replication_single_primary_mode should be set to ON'
--let $assert_cond= [SELECT @@group_replication_single_primary_mode as value, value, 1] = 1
--source include/assert.inc
SET GLOBAL group_replication_single_primary_mode= OFF;
--let $assert_text= 'group_replication_single_primary_mode should be set to OFF'
--let $assert_cond= [SELECT @@group_replication_single_primary_mode as value, value, 1] = 0
--source include/assert.inc
SET GLOBAL group_replication_single_primary_mode= -1;
--let $assert_text= 'group_replication_single_primary_mode should be set to 0'
--let $assert_cond= [SELECT @@group_replication_single_primary_mode as value, value, 1] = 0
--source include/assert.inc
SET GLOBAL group_replication_single_primary_mode= 100;
--let $assert_text= 'group_replication_single_primary_mode should be set to 1'
--let $assert_cond= [SELECT @@group_replication_single_primary_mode as value, value, 1] = 1
--source include/assert.inc
# disable single primary mode regardless
SET GLOBAL group_replication_single_primary_mode= FALSE;
## group_replication_enforce_update_everywhere_checks verifications
--error ER_WRONG_VALUE_FOR_VAR
SET GLOBAL group_replication_enforce_update_everywhere_checks= NULL;
--error ER_WRONG_VALUE_FOR_VAR
SET GLOBAL group_replication_enforce_update_everywhere_checks= "AAAAAA";
--let $assert_text= 'group_replication_enforce_update_everywhere_checks should be set to 0'
--let $assert_cond= [SELECT @@group_replication_enforce_update_everywhere_checks as value, value, 1] = 0
--source include/assert.inc
--error ER_WRONG_VALUE_FOR_VAR
SET GLOBAL group_replication_enforce_update_everywhere_checks= DEFAULT;
SET GLOBAL group_replication_enforce_update_everywhere_checks= TRUE;
--let $assert_text= 'group_replication_enforce_update_everywhere_checks should be set to 1'
--let $assert_cond= [SELECT @@group_replication_enforce_update_everywhere_checks as value, value, 1] = 1
--source include/assert.inc
SET GLOBAL group_replication_enforce_update_everywhere_checks= FALSE;
--let $assert_text= 'group_replication_enforce_update_everywhere_checks should be set to 0'
--let $assert_cond= [SELECT @@group_replication_enforce_update_everywhere_checks as value, value, 1] = 0
--source include/assert.inc
SET GLOBAL group_replication_enforce_update_everywhere_checks= ON;
--let $assert_text= 'group_replication_enforce_update_everywhere_checks should be set to ON'
--let $assert_cond= [SELECT @@group_replication_enforce_update_everywhere_checks as value, value, 1] = 1
--source include/assert.inc
SET GLOBAL group_replication_enforce_update_everywhere_checks= OFF;
--let $assert_text= 'group_replication_enforce_update_everywhere_checks should be set to OFF'
--let $assert_cond= [SELECT @@group_replication_enforce_update_everywhere_checks as value, value, 1] = 0
--source include/assert.inc
SET GLOBAL group_replication_enforce_update_everywhere_checks= -1;
--let $assert_text= 'group_replication_enforce_update_everywhere_checks should be set to 0'
--let $assert_cond= [SELECT @@group_replication_enforce_update_everywhere_checks as value, value, 1] = 0
--source include/assert.inc
SET GLOBAL group_replication_enforce_update_everywhere_checks= 100;
--let $assert_text= 'group_replication_enforce_update_everywhere_checks should be set to 1'
--let $assert_cond= [SELECT @@group_replication_enforce_update_everywhere_checks as value, value, 1] = 1
--source include/assert.inc
# assert that we cannot set single primary mode when
# enforce_update_everywhere_checks is set
SET GLOBAL group_replication_enforce_update_everywhere_checks= TRUE;
--error ER_WRONG_VALUE_FOR_VAR
SET GLOBAL group_replication_single_primary_mode= TRUE;
# now disable update everywhere checks so that one is able to
# enable single primary mode
SET GLOBAL group_replication_enforce_update_everywhere_checks= FALSE;
--let $assert_text= 'group_replication_enforce_update_everywhere_checks should be set to 0'
--let $assert_cond= [SELECT @@group_replication_enforce_update_everywhere_checks as value, value, 1] = 0
--source include/assert.inc
SET GLOBAL group_replication_single_primary_mode= TRUE;
--let $assert_text= 'group_replication_single_primary_mode should be set to 1'
--let $assert_cond= [SELECT @@group_replication_single_primary_mode as value, value, 1] = 1
--source include/assert.inc
# assert that we can set to other values
SET GLOBAL group_replication_single_primary_mode= FALSE;
--let $assert_text= 'group_replication_single_primary_mode should be set to 0'
--let $assert_cond= [SELECT @@group_replication_single_primary_mode as value, value, 1] = 0
--source include/assert.inc
SET GLOBAL group_replication_single_primary_mode= -1;
--let $assert_text= 'group_replication_single_primary_mode should be set to 0'
--let $assert_cond= [SELECT @@group_replication_single_primary_mode as value, value, 1] = 0
--source include/assert.inc
SET GLOBAL group_replication_single_primary_mode= 100;
--let $assert_text= 'group_replication_single_primary_mode should be set to 1'
--let $assert_cond= [SELECT @@group_replication_single_primary_mode as value, value, 1] = 1
--source include/assert.inc
# assert that we cannot set enforce update everywhere checks
# when single primary mode is ON
SET GLOBAL group_replication_single_primary_mode= TRUE;
--error ER_WRONG_VALUE_FOR_VAR
SET GLOBAL group_replication_enforce_update_everywhere_checks= TRUE;
# set both to false
SET GLOBAL group_replication_single_primary_mode= FALSE;
--let $assert_text= 'group_replication_single_primary_mode should be set to 0'
--let $assert_cond= [SELECT @@group_replication_single_primary_mode as value, value, 1] = 0
--source include/assert.inc
SET GLOBAL group_replication_enforce_update_everywhere_checks= FALSE;
--let $assert_text= 'group_replication_enforce_update_everywhere_checks should be set to 0'
--let $assert_cond= [SELECT @@group_replication_enforce_update_everywhere_checks as value, value, 1] = 0
--source include/assert.inc
# Lets start a group with single_primary_mode ON
SET GLOBAL group_replication_single_primary_mode= TRUE;
--let $assert_text= 'group_replication_single_primary_mode should be set to 1'
--let $assert_cond= [SELECT @@group_replication_single_primary_mode as value, value, 1] = 1
--source include/assert.inc
SET GLOBAL group_replication_enforce_update_everywhere_checks= FALSE;
--let $assert_text= 'group_replication_enforce_update_everywhere_checks should be set to 0'
--let $assert_cond= [SELECT @@group_replication_enforce_update_everywhere_checks as value, value, 1] = 0
--source include/assert.inc
--echo #
--echo # START GROUP REPLICATION ON SERVER 1
--source include/start_and_bootstrap_group_replication.inc
--echo # PLUGIN VARIABLES SHOULD BE READ ONLY ON SERVER 1
--error ER_GROUP_REPLICATION_RUNNING
SET GLOBAL group_replication_single_primary_mode= TRUE;
--error ER_GROUP_REPLICATION_RUNNING
SET GLOBAL group_replication_enforce_update_everywhere_checks= TRUE;
--echo #
--echo # START GROUP REPLICATION ON SERVER 2
--let $rpl_connection_name= server2
--source include/rpl_connection.inc
SET GLOBAL group_replication_enforce_update_everywhere_checks= FALSE;
--let $assert_text= 'group_replication_enforce_update_everywhere_checks should be set to 0'
--let $assert_cond= [SELECT @@group_replication_enforce_update_everywhere_checks as value, value, 1] = 0
--source include/assert.inc
SET GLOBAL group_replication_single_primary_mode= TRUE;
--let $assert_text= 'group_replication_single_primary_mode should be set to 1'
--let $assert_cond= [SELECT @@group_replication_single_primary_mode as value, value, 1] = 1
--source include/assert.inc
--source include/start_group_replication.inc
--echo # PLUGIN VARIABLES SHOULD BE READ ONLY ON SERVER 2
--error ER_GROUP_REPLICATION_RUNNING
SET GLOBAL group_replication_single_primary_mode= TRUE;
--error ER_GROUP_REPLICATION_RUNNING
SET GLOBAL group_replication_enforce_update_everywhere_checks= TRUE;
--source include/group_replication_end.inc
# restore single primary mode configuration system variables
--let $rpl_connection_name= server1
--source include/rpl_connection.inc
--eval SET @@GLOBAL.group_replication_single_primary_mode= $saved_single_primary_mode
--eval SET @@GLOBAL.group_replication_enforce_update_everywhere_checks= $saved_enforce_update_everywhere_checks
--let $rpl_connection_name= server2
--source include/rpl_connection.inc
--eval SET @@GLOBAL.group_replication_single_primary_mode= $saved_single_primary_mode
--eval SET @@GLOBAL.group_replication_enforce_update_everywhere_checks= $saved_enforce_update_everywhere_checks
|