--source include/not_group_replication_plugin.inc --source include/have_gtid.inc --source include/have_innodb.inc --source include/have_perfschema.inc --source include/have_blackhole.inc --source include/have_binlog_format_row.inc --let $number_of_workers = 8 --let $number_of_connections = $number_of_workers --let $number_of_inserts = 8192 --let $rpl_topology = 1->2->3 --let $use_gtids = 1 --source include/rpl_init.inc --echo # Creating a table on server_1 --let $rpl_connection_name = server_1 --source include/rpl_connection.inc CREATE TABLE t1( a INT NOT NULL ) ENGINE=InnoDB; --echo # Let server_2 catch up with server_1 --let $sync_slave_connection = server_2 --source include/sync_slave_sql_with_master.inc --echo # Let server_3 catch up with server_2 --let $sync_slave_connection = server_3 --source include/sync_slave_sql_with_master.inc --let $rpl_connection_name = server_3 --source include/rpl_connection.inc SHOW CREATE TABLE t1; --echo # Switching server_2 to MTS mode --let $rpl_connection_name = server_2 --source include/rpl_connection.inc --source include/stop_slave.inc SET @saved_slave_parallel_type2 = @@global.slave_parallel_type; SET @saved_slave_parallel_workers2 = @@global.slave_parallel_workers; SET GLOBAL slave_parallel_type = 'LOGICAL_CLOCK'; eval SET GLOBAL slave_parallel_workers = $number_of_workers; --source include/start_slave.inc --echo # Switching server_3 to MTS mode --let $sync_slave_connection = server_3 --source include/sync_slave_sql_with_master.inc --source include/stop_slave.inc SET @saved_slave_parallel_type3 = @@global.slave_parallel_type; SET @saved_slave_parallel_workers3 = @@global.slave_parallel_workers; SET GLOBAL slave_parallel_type = 'LOGICAL_CLOCK'; eval SET GLOBAL slave_parallel_workers = $number_of_workers; --source include/start_slave.inc --echo # Changing table engine on server_2 to Blackhole --let $rpl_connection_name = server_2 --source include/rpl_connection.inc SET sql_log_bin = 0; ALTER TABLE t1 ENGINE=Blackhole; SET sql_log_bin = 1; --echo # Stopping slave on server_2 --source include/stop_slave.inc --echo # Inserting a bunch of records on server_1 using several connections --disable_query_log --disable_result_log --let $i = $number_of_connections while ($i) { --connect(con$i,localhost,root,,test,$MASTER_MYPORT,) --dec $i } --let $j = $number_of_inserts while($j) { --let $i = $number_of_connections while ($i) { --connection con$i --send_eval INSERT INTO t1 VALUES($j * $number_of_connections + $i) --dec $i } --let $i = $number_of_connections while ($i) { --connection con$i --reap --dec $i } --dec $j } --let $i = $number_of_connections while ($i) { --disconnect con$i --dec $i } --enable_result_log --enable_query_log --echo # Starting slave on server_2 --let $rpl_connection_name = server_2 --source include/rpl_connection.inc --source include/start_slave.inc --echo # Checking MTS status on server_3 --let $rpl_connection_name = server_3 --source include/rpl_connection.inc --let $applying = 1 --let $max_busy_workers = 0 while($applying) { --sleep 1 --let $current_busy_workers = `SELECT COUNT(*) FROM performance_schema.replication_applier_status_by_worker WHERE LAST_SEEN_TRANSACTION != ''` --let $max_busy_workers = `SELECT GREATEST($max_busy_workers, $current_busy_workers)` --let $applying = `SELECT COUNT(*) != $number_of_inserts * $number_of_connections FROM t1` } --echo # Checking max busy workers --let $assert_text= All slave workers must be busy --let $assert_cond= $max_busy_workers = $number_of_workers --source include/assert.inc --echo # Let server_2 catch up with server_1 --let $rpl_connection_name = server_1 --source include/rpl_connection.inc --let $sync_slave_connection = server_2 --source include/sync_slave_sql_with_master.inc --echo # Let server_3 catch up with server_2 --let $sync_slave_connection = server_3 --source include/sync_slave_sql_with_master.inc --echo # Restoring global vars on server_2 --let $rpl_connection_name = server_2 --source include/rpl_connection.inc --source include/stop_slave.inc SET GLOBAL slave_parallel_type = @saved_slave_parallel_type2; SET GLOBAL slave_parallel_workers = @saved_slave_parallel_workers2; --source include/start_slave.inc --echo # Restoring global vars on server_3 --let $sync_slave_connection = server_3 --source include/sync_slave_sql_with_master.inc --source include/stop_slave.inc SET GLOBAL slave_parallel_type = @saved_slave_parallel_type3; SET GLOBAL slave_parallel_workers = @saved_slave_parallel_workers3; --source include/start_slave.inc --echo # Cleanup --let $rpl_connection_name = server_1 --source include/rpl_connection.inc DROP TABLE t1; --source include/rpl_end.inc