1############################################################################### 2# 3# Outside the scope of configurations changes, if a primary member fails 4# the new primary wont be writable until it executes all 5# the transactions from the old primary. 6# 7# Test: 8# 0. This test requires three servers 9# 1. Test starts in Single primary mode with server1 as primary 10# 2. Set weight on server2 to be the next elected primary and join to 11# the group 12# 3. Add server3 to group 13# 4. Lock table on the new primary (server 2) 14# 5. Execute a transaction that will stuck 15# 6. Stop server1 16# 7. Server2 will wait for buffered transactions on read only mode 17# 8. Unlock table on server2 18# 9. Server2 will apply buffered transactions and disable read only mode 19# 10. Assert server2 is primary server 20# 11. Cleanup 21# 22############################################################################### 23 24--source include/big_test.inc 25--source include/have_group_replication_plugin.inc 26--let $rpl_skip_group_replication_start= 1 27--let $rpl_group_replication_single_primary_mode=1 28--let $rpl_server_count= 3 29--source include/group_replication.inc 30 31--echo 32--echo # 1. Test starts in Single primary mode with server1 as primary 33 34--let $server1_uuid= query_get_value(SELECT @@SERVER_UUID, @@SERVER_UUID, 1) 35 36--source include/start_and_bootstrap_group_replication.inc 37 38CREATE TABLE t1(a int primary key); 39 40--let $rpl_connection_name= server2 41--source include/rpl_connection.inc 42 43--echo 44--echo # 2. Set weight on server2 to be the next elected primary and join to 45--echo # the group 46 47SET @@GLOBAL.group_replication_member_weight= 90; 48 49--source include/start_group_replication.inc 50 51--echo 52--echo # 3. Add server3 to group 53 54--let $rpl_connection_name= server3 55--source include/rpl_connection.inc 56 57--source include/start_group_replication.inc 58 59--echo 60--echo # 4. Lock table on the new primary (server 2) 61 62--let $rpl_connection_name= server_2 63--source include/rpl_connection.inc 64 65LOCK TABLE t1 READ; 66 67--echo 68--echo # 5. Execute a transaction that will stuck 69 70--let $rpl_connection_name= server1 71--source include/rpl_connection.inc 72 73INSERT INTO t1 VALUES (1); 74 75--echo 76--echo # 6. Stop server1 77 78--source include/stop_group_replication.inc 79 80--echo 81--echo # 7. Server2 will wait for buffered transactions on read only mode 82 83--let $rpl_connection_name= server2 84--source include/rpl_connection.inc 85 86--let $wait_condition=SELECT COUNT(*)=1 FROM performance_schema.events_stages_current WHERE event_name LIKE "stage/group_rpl/Primary Election: applying buffered transactions" 87--source include/wait_condition.inc 88 89--let $wait_condition= SELECT @@GLOBAL.super_read_only = '1' 90--source include/wait_condition.inc 91 92--echo 93--echo # 8. Unlock table on server2 94 95--let $rpl_connection_name= server_2 96--source include/rpl_connection.inc 97 98UNLOCK TABLES; 99 100--echo 101--echo # 9. Server2 will apply buffered transactions and disable read only mode 102 103--let $wait_condition= SELECT @@GLOBAL.super_read_only = '0' 104--source include/wait_condition.inc 105 106--echo 107--echo # 10. Assert server2 is primary server 108 109--source include/gr_assert_primary_member.inc 110 111--echo 112--echo # 11. Cleanup 113 114--let $rpl_connection_name= server1 115--source include/rpl_connection.inc 116 117--source include/start_group_replication.inc 118 119--let $rpl_connection_name= server2 120--source include/rpl_connection.inc 121 122SET @@GLOBAL.group_replication_member_weight= DEFAULT; 123DROP TABLE t1; 124 125--let $rpl_group_replication_reset_persistent_vars=1 126--source include/group_replication_end.inc 127