connection node_2;
connection node_1;
connect replica, 127.0.0.1, root, , test, $NODE_MYPORT_2;
connect primary, 127.0.0.1, root, , test, $NODE_MYPORT_3;
create user repl@'%' identified by 'repl';
grant all on *.* to  repl@'%';
ALTER TABLE mysql.gtid_slave_pos ENGINE=InnoDB;
connection node_1;
connection replica;
connection replica;
START SLAVE;
connection primary;
CREATE TABLE t1 (id bigint auto_increment primary key, msg varchar(100)) engine=innodb;
# Intentionally generate 1k GTID-events
SELECT COUNT(*) AS EXPECT_1000 FROM t1;
EXPECT_1000
1000
connection replica;
SELECT COUNT(*) > 0 AS EXPECT_1 FROM mysql.gtid_slave_pos;
EXPECT_1
1
SELECT COUNT(*) < 1000 AS EXPECT_1 FROM mysql.gtid_slave_pos;
EXPECT_1
1
SELECT @@gtid_slave_pos,@@gtid_binlog_pos,@@gtid_current_pos;
@@gtid_slave_pos	@@gtid_binlog_pos	@@gtid_current_pos
0-3-1004	0-3-1004	0-3-1004
SELECT COUNT(*) AS EXPECT_1000 FROM t1;
EXPECT_1000
1000
connection node_1;
SELECT COUNT(*) > 0 AS EXPECT_1 FROM mysql.gtid_slave_pos;
EXPECT_1
1
SELECT COUNT(*) < 1000 AS EXPECT_1 FROM mysql.gtid_slave_pos;
EXPECT_1
1
SELECT @@gtid_slave_pos,@@gtid_binlog_pos,@@gtid_current_pos;
@@gtid_slave_pos	@@gtid_binlog_pos	@@gtid_current_pos
0-3-1004	0-3-1004	0-3-1004
SELECT COUNT(*) AS EXPECT_1000 FROM t1;
EXPECT_1000
1000
connection replica;
# Verify that graceful shutdown succeeds in replica.
# Force SST
connection node_1;
# Waiting until replica is not part of cluster anymore
connection replica;
# Start replica again
# Wait until replica is back on cluster
SELECT COUNT(*) > 0 AS EXPECT_1 FROM mysql.gtid_slave_pos;
EXPECT_1
1
SELECT COUNT(*) < 1000 AS EXPECT_1 FROM mysql.gtid_slave_pos;
EXPECT_1
1
SELECT @@gtid_slave_pos,@@gtid_binlog_pos,@@gtid_current_pos;
@@gtid_slave_pos	@@gtid_binlog_pos	@@gtid_current_pos
0-3-1004	0-3-1004	0-3-1004
SELECT COUNT(*) AS EXPECT_1000 FROM t1;
EXPECT_1000
1000
connection node_1;
SELECT COUNT(*) > 0 AS EXPECT_1 FROM mysql.gtid_slave_pos;
EXPECT_1
1
SELECT COUNT(*) < 1000 AS EXPECT_1 FROM mysql.gtid_slave_pos;
EXPECT_1
1
SELECT @@gtid_slave_pos,@@gtid_binlog_pos,@@gtid_current_pos;
@@gtid_slave_pos	@@gtid_binlog_pos	@@gtid_current_pos
0-3-1004	0-3-1004	0-3-1004
SELECT COUNT(*) AS EXPECT_1000 FROM t1;
EXPECT_1000
1000
connection primary;
SELECT COUNT(*) AS EXPECT_1000 FROM t1;
EXPECT_1000
1000
drop table t1;
connection replica;
connection node_1;
connection primary;
CREATE TABLE t1 (id bigint auto_increment primary key, msg varchar(100)) engine=innodb;
# Intentionally generate 1k GTID-events
SELECT COUNT(*) AS EXPECT_1000 FROM t1;
EXPECT_1000
1000
connection replica;
SELECT COUNT(*) > 0 AS EXPECT_1 FROM mysql.gtid_slave_pos;
EXPECT_1
1
SELECT COUNT(*) < 1000 AS EXPECT_1 FROM mysql.gtid_slave_pos;
EXPECT_1
1
SELECT @@gtid_slave_pos,@@gtid_binlog_pos,@@gtid_current_pos;
@@gtid_slave_pos	@@gtid_binlog_pos	@@gtid_current_pos
0-3-2006	0-3-2006	0-3-2006
SELECT COUNT(*) AS EXPECT_1000 FROM t1;
EXPECT_1000
1000
connection node_1;
SELECT COUNT(*) > 0 AS EXPECT_1 FROM mysql.gtid_slave_pos;
EXPECT_1
1
SELECT COUNT(*) < 1000 AS EXPECT_1 FROM mysql.gtid_slave_pos;
EXPECT_1
1
SELECT @@gtid_slave_pos,@@gtid_binlog_pos,@@gtid_current_pos;
@@gtid_slave_pos	@@gtid_binlog_pos	@@gtid_current_pos
0-3-2006	0-3-2006	0-3-2006
connection replica;
# Verify that graceful shutdown succeeds in replica.
# Force SST
connection node_1;
# Waiting until replica is not part of cluster anymore
# Add writes to primary
connection primary;
# Intentionally generate 1k GTID-events
SELECT COUNT(*) AS EXPECT_2000 FROM t1;
EXPECT_2000
2000
connection replica;
# Start replica again
# Wait until replica is back on cluster
SELECT COUNT(*) > 0 AS EXPECT_1 FROM mysql.gtid_slave_pos;
EXPECT_1
1
SELECT COUNT(*) < 1000 AS EXPECT_1 FROM mysql.gtid_slave_pos;
EXPECT_1
1
SELECT @@gtid_slave_pos,@@gtid_binlog_pos,@@gtid_current_pos;
@@gtid_slave_pos	@@gtid_binlog_pos	@@gtid_current_pos
0-3-3006	0-3-3006	0-3-3006
SELECT COUNT(*) AS EXPECT_2000 FROM t1;
EXPECT_2000
2000
connection node_1;
SELECT COUNT(*) > 0 AS EXPECT_1 FROM mysql.gtid_slave_pos;
EXPECT_1
1
SELECT COUNT(*) < 1000 AS EXPECT_1 FROM mysql.gtid_slave_pos;
EXPECT_1
1
SELECT @@gtid_slave_pos,@@gtid_binlog_pos,@@gtid_current_pos;
@@gtid_slave_pos	@@gtid_binlog_pos	@@gtid_current_pos
0-3-3006	0-3-3006	0-3-3006
SELECT COUNT(*) AS EXPECT_2000 FROM t1;
EXPECT_2000
2000
connection primary;
SELECT COUNT(*) AS EXPECT_2000 FROM t1;
EXPECT_2000
2000
drop table t1;
connection replica;
connection node_1;
connection replica;
STOP SLAVE;
RESET SLAVE ALL;
connection primary;
RESET MASTER;
connection node_1;
disconnect primary;
disconnect replica;
disconnect node_2;
disconnect node_1;
# End of test