mirror of
https://github.com/MariaDB/server.git
synced 2025-02-15 09:55:33 +01:00
![Andrei](/assets/img/avatar_default.png)
The test could fail sporadically because of not anticipated race on slave between CREATE and ALTER queries. Fixed to synchronize slave and master wrt CREATE.
91 lines
2.5 KiB
Text
91 lines
2.5 KiB
Text
#
|
|
# 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;
|
|
--source include/save_master_gtid.inc
|
|
|
|
# Make sure the table exists on slave now.
|
|
--connection slave
|
|
--source include/sync_with_master_gtid.inc
|
|
|
|
--connection master
|
|
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
|
|
# First wait for the FTWRL arrival.
|
|
--connection slave
|
|
--let $wait_condition = SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE INFO = 'FLUSH TABLES WITH READ LOCK' and STATE = 'Waiting for worker threads to pause for global read lock'
|
|
--source include/wait_condition.inc
|
|
|
|
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
|