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
|
################################################################################
# This test proves Group replication does not delete group_replication_applier
# channel on start of group replication post reset master.
#
# Test:
# 0. The test requires two servers: M1 and M2.
# 1. Bootstrap M1.
# 2. Create user u1 on M2.
# Add PRIVILEGE_CHECKS_USER for u1 for GR applier channel.
# Reset master.
# 3. Start GR fails.
# Assert value of PRIVILEGE_CHECKS_USER is preserved.
# 4. Give privileges to u1.
# Start GR.
# Assert value of PRIVILEGE_CHECKS_USER is preserved.
# 5. Stop GR.
# Assert value of PRIVILEGE_CHECKS_USER is preserved.
# 6. Cleanup.
################################################################################
--source include/have_group_replication_plugin.inc
--let $rpl_skip_group_replication_start= 1
--source include/group_replication.inc
--echo
--echo # 1. Bootstrap M1.
--echo
--source include/start_and_bootstrap_group_replication.inc
--echo
--echo # 2. Create user u1 on M2.
--echo # Add PRIVILEGE_CHECKS_USER for u1 for GR applier channel.
--echo # Reset master.
--echo
--let $rpl_connection_name= server2
--source include/rpl_connection.inc
SET SQL_LOG_BIN=0;
CREATE USER 'u1'@'localhost';
SET SQL_LOG_BIN=1;
CHANGE REPLICATION SOURCE TO PRIVILEGE_CHECKS_USER = 'u1'@'localhost' FOR CHANNEL "group_replication_applier";
CHANGE REPLICATION SOURCE TO PRIVILEGE_CHECKS_USER = 'root'@'localhost' FOR CHANNEL "group_replication_recovery";
RESET MASTER;
--echo
--echo # 3. Start GR fails.
--echo # Assert value of PRIVILEGE_CHECKS_USER is preserved.
--echo
--replace_result $group_replication_group_name GROUP_REPLICATION_GROUP_NAME
--eval SET GLOBAL GROUP_REPLICATION_GROUP_NAME = "$group_replication_group_name"
# One of three things can happen:
# A. The applier fails after the join and the member leaves the group
# but the START GROUP_REPLICATION command does not fail
# B. The applier fails after initialization and sets the state to ERROR,
# making the group join fail that makes the START GROUP_REPLICATION
# command fail with a generic ER_GROUP_REPLICATION_CONFIGURATION.
# C. The applier fails and its initialization processes catches the error.
# During the start, it is known that the applier failed so the START
# GROUP_REPLICATION fails with: ER_GROUP_REPLICATION_APPLIER_INIT_ERROR
--error 0, ER_GROUP_REPLICATION_CONFIGURATION, ER_GROUP_REPLICATION_APPLIER_INIT_ERROR
START GROUP_REPLICATION;
--let $pcu_count = `SELECT COUNT(*) FROM performance_schema.replication_applier_configuration WHERE CHANNEL_NAME= "group_replication_applier" AND PRIVILEGE_CHECKS_USER = "'u1'@'localhost'"`
--let $assert_text= PRIVILEGE_CHECKS_USER has correct value for channel group_replication_applier
--let $assert_cond= $pcu_count = 1
--source include/assert.inc
--echo
--echo # 4. Give privileges to u1.
--echo # Start GR.
--echo # Assert value of PRIVILEGE_CHECKS_USER is preserved.
--echo
SET GLOBAL super_read_only= 0;
SET SQL_LOG_BIN=0;
GRANT REPLICATION_APPLIER, SYSTEM_VARIABLES_ADMIN ON *.* TO 'u1'@'localhost';
SET SQL_LOG_BIN=1;
--source include/start_group_replication.inc
--let $pcu_count = `SELECT COUNT(*) FROM performance_schema.replication_applier_configuration WHERE (CHANNEL_NAME= "group_replication_applier" AND PRIVILEGE_CHECKS_USER = "'u1'@'localhost'") OR (CHANNEL_NAME= "group_replication_recovery" AND PRIVILEGE_CHECKS_USER = "'root'@'localhost'")`
--let $assert_text= PRIVILEGE_CHECKS_USER has correct value for channel group_replication_applier and group_replication_recovery
--let $assert_cond= $pcu_count = 2
--source include/assert.inc
--echo
--echo # 5. Stop GR.
--echo # Assert value of PRIVILEGE_CHECKS_USER is preserved.
--echo
--source include/stop_group_replication.inc
--let $pcu_count = `SELECT COUNT(*) FROM performance_schema.replication_applier_configuration WHERE (CHANNEL_NAME= "group_replication_applier" AND PRIVILEGE_CHECKS_USER = "'u1'@'localhost'") OR (CHANNEL_NAME= "group_replication_recovery" AND PRIVILEGE_CHECKS_USER = "'root'@'localhost'")`
--let $assert_text= PRIVILEGE_CHECKS_USER has correct value for channel group_replication_applier and group_replication_recovery
--let $assert_cond= $pcu_count = 2
--source include/assert.inc
--echo
--echo # 6. Cleanup.
--echo
SET GLOBAL super_read_only= 0;
SET SQL_LOG_BIN=0;
DROP USER 'u1'@'localhost';
SET SQL_LOG_BIN=1;
SET SESSION sql_log_bin = 0;
call mtr.add_suppression(" Replica SQL for channel 'group_replication_applier': PRIVILEGE_CHECKS_USER for replication channel *");
call mtr.add_suppression("The applier thread execution was aborted. *");
call mtr.add_suppression("Fatal error during execution on the Applier process of Group Replication. The server will now leave the group.");
call mtr.add_suppression("Unable to confirm whether the server has left the group or not. *");
call mtr.add_suppression("The server was automatically set into read only mode after an error was detected.");
call mtr.add_suppression("Unable to initialize the Group Replication applier module.");
call mtr.add_suppression("There was a previous plugin error while the member joined the group. The member will now exit the group.");
SET SESSION sql_log_bin = 1;
--source include/group_replication_end.inc
|