diff options
author | Andrei <andrei.elkin@mariadb.com> | 2021-12-14 20:52:37 +0200 |
---|---|---|
committer | Andrei <andrei.elkin@mariadb.com> | 2021-12-15 22:44:23 +0200 |
commit | 71bd27912b55b1d23862af32e6813371fa58bf78 (patch) | |
tree | 6b520013a96060216b22ddf3ea9c61eeb6e1b740 | |
parent | ec1e3301e377295a9cbc5c2fdac14f2fd9b519d5 (diff) | |
download | mariadb-git-71bd27912b55b1d23862af32e6813371fa58bf78.tar.gz |
MDEV-11675. The test to FTWRL commit.
-rw-r--r-- | mysql-test/suite/rpl/r/rpl_start_alter_ftwrl.result | 56 | ||||
-rw-r--r-- | mysql-test/suite/rpl/t/rpl_start_alter_ftwrl.test | 81 |
2 files changed, 137 insertions, 0 deletions
diff --git a/mysql-test/suite/rpl/r/rpl_start_alter_ftwrl.result b/mysql-test/suite/rpl/r/rpl_start_alter_ftwrl.result new file mode 100644 index 00000000000..5b08a4c68bb --- /dev/null +++ b/mysql-test/suite/rpl/r/rpl_start_alter_ftwrl.result @@ -0,0 +1,56 @@ +include/master-slave.inc +[connection master] +connection slave; +include/stop_slave.inc +SET @@global.slave_parallel_threads=4; +SET @@global.slave_parallel_mode=optimistic; +CHANGE MASTER TO master_use_gtid=slave_pos; +SET @@global.debug_dbug="+d,at_write_start_alter"; +include/start_slave.inc +connection master; +SET @@session.binlog_alter_two_phase=true; +CREATE TABLE t1 (a INT) ENGINE=innodb; +SET @@session.alter_algorithm='INSTANT'; +SET @@session.gtid_domain_id=11; +ALTER TABLE t1 ADD COLUMN b int; +# START Alter having exclusive lock is waiting for the signal +connection slave; +# FTWRL is sent first to wait for SA +connection slave1; +FLUSH TABLES WITH READ LOCK; +# SA completes +connection slave; +set DEBUG_SYNC= "now signal alter_cont"; +connection slave1; +connection slave; +# Release CA +connection slave1; +UNLOCK TABLES; +connection master; +connection slave; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` int(11) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +include/show_binlog_events.inc +Log_name Pos Event_type Server_id End_log_pos Info +slave-bin.000001 # Gtid # # GTID #-#-# +slave-bin.000001 # Query # # use `test`; CREATE TABLE t1 (a INT) ENGINE=innodb +slave-bin.000001 # Gtid # # GTID #-#-# START ALTER +slave-bin.000001 # Query # # use `test`; ALTER TABLE t1 ADD COLUMN b int +slave-bin.000001 # Gtid # # GTID #-#-# COMMIT ALTER id=# +slave-bin.000001 # Query # # use `test`; ALTER TABLE t1 ADD COLUMN b int +connection master; +DROP TABLE t1; +connection slave; +# cleanup +connection slave; +set DEBUG_SYNC = RESET; +include/stop_slave.inc +set global slave_parallel_threads = 0; +set global slave_parallel_mode = optimistic; +set @@global.debug_dbug = ""; +include/start_slave.inc +include/rpl_end.inc diff --git a/mysql-test/suite/rpl/t/rpl_start_alter_ftwrl.test b/mysql-test/suite/rpl/t/rpl_start_alter_ftwrl.test new file mode 100644 index 00000000000..9c8267bb721 --- /dev/null +++ b/mysql-test/suite/rpl/t/rpl_start_alter_ftwrl.test @@ -0,0 +1,81 @@ +# +# MDEV-11675 Two phase ALTER binlogging +# +# Prove that FTWRL in the middle of START and "COMPLETE" parts of ALTER +# is safe. + +--source include/have_debug.inc +--source include/have_innodb.inc +--source include/master-slave.inc + +--connection slave +--let $slave_parallel_threads= `select @@slave_parallel_threads` +--let $slave_parallel_mode= `select @@slave_parallel_mode` +--let $debug = `SELECT @@global.debug_dbug` + +--source include/stop_slave.inc + +SET @@global.slave_parallel_threads=4; +SET @@global.slave_parallel_mode=optimistic; +CHANGE MASTER TO master_use_gtid=slave_pos; + +SET @@global.debug_dbug="+d,at_write_start_alter"; +--source include/start_slave.inc + +--connection master +SET @@session.binlog_alter_two_phase=true; + +CREATE TABLE t1 (a INT) ENGINE=innodb; + +SET @@session.alter_algorithm='INSTANT'; +SET @@session.gtid_domain_id=11; +ALTER TABLE t1 ADD COLUMN b int; + + +--echo # START Alter having exclusive lock is waiting for the signal +--connection slave +--let $wait_condition = SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE STATE = 'debug sync point: now'; +--source include/wait_condition.inc + +--echo # FTWRL is sent first to wait for SA +--connection slave1 +--send FLUSH TABLES WITH READ LOCK + +--echo # SA completes +--connection slave +set DEBUG_SYNC= "now signal alter_cont"; + +--connection slave1 +--reap + +# Commit ALTER is hanging now +--connection slave +--let $wait_condition = SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE COMMAND = 'Slave_worker' AND STATE = 'Waiting for backup lock'; +--source include/wait_condition.inc + +--echo # Release CA +--connection slave1 +UNLOCK TABLES; + +--connection master +--sync_slave_with_master + +SHOW CREATE TABLE t1; +--source include/show_binlog_events.inc + +--connection master +DROP TABLE t1; + +--sync_slave_with_master + +--echo # cleanup +--connection slave +set DEBUG_SYNC = RESET; +--source include/stop_slave.inc +--eval set global slave_parallel_threads = $slave_parallel_threads +--eval set global slave_parallel_mode = $slave_parallel_mode +--eval set @@global.debug_dbug = "$debug" +--source include/start_slave.inc + + +--source include/rpl_end.inc |