1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150
|
#
# Test case for BUG#30198097
#
--source include/have_binlog_format_row.inc
--source include/master-slave.inc
--source include/rpl_connection_master.inc
--let $saved_master_binlog_transaction_compression=`SELECT @@session.binlog_transaction_compression`
SET @@session.binlog_transaction_compression = ON;
--source include/rpl_connection_slave.inc
--let $saved_replica_transaction_retries = `SELECT @@global.replica_transaction_retries`
--let $saved_innodb_lock_wait_timeout = `SELECT @@global.innodb_lock_wait_timeout`
--let $saved_replica_parallel_workers = `SELECT @@global.replica_parallel_workers`
--let $saved_replica_parallel_type = `SELECT @@global.replica_parallel_type`
--let $saved_binlog_transaction_compression = `SELECT @@global.binlog_transaction_compression`
--let $saved_replica_preserve_commit_order = `SELECT @@global.replica_preserve_commit_order`
--source include/stop_slave_sql.inc
SET @@global.replica_transaction_retries= 200;
SET @@global.innodb_lock_wait_timeout= 5;
SET @@global.binlog_transaction_compression = ON;
SET @@global.replica_parallel_workers = 4;
SET @@global.replica_preserve_commit_order = OFF;
--source include/start_slave_sql.inc
--let $j = 3
while ($j > 0) {
if ($j == 1) {
--let $nworkers = 0
}
if ($j == 2) {
--let $nworkers = 1
}
if ($j == 3) {
--let $nworkers = 8
}
--source include/stop_slave_sql.inc
--eval SET @@global.replica_parallel_workers = $nworkers
--source include/start_slave_sql.inc
--let $i = 2
while($i>0)
{
if ($i == 2)
{
--let $replica_parallel_type = 'DATABASE'
}
if ($i == 1)
{
--let $replica_parallel_type = 'LOGICAL_CLOCK'
}
--source include/rpl_connection_master.inc
--source include/rpl_reset.inc
CREATE TABLE t1 (a INT PRIMARY KEY, b INT);
--source include/sync_slave_sql_with_master.inc
--source include/stop_slave_sql.inc
--eval SET @@global.replica_parallel_type = $replica_parallel_type
--source include/start_slave_sql.inc
--source include/rpl_connection_slave1.inc
BEGIN;
INSERT INTO t1 SET a = 10, b = 11;
--source include/rpl_connection_master.inc
INSERT INTO t1 SET a = 22, b = 22;
XA START 'xa1';
INSERT INTO t1 SET a = 10, b = 1;
XA END 'xa1';
XA PREPARE 'xa1';
# assert that we have transactions were compressed
--let $include_trx_payload_events=1
--let $event_sequence = Gtid # Query # Gtid # Transaction_payload # Query # Table_map # Write_rows # Xid # Gtid # Transaction_payload # Query/XA START.* # Table_map # Write_rows # Query/XA END.* # XA_prepare
--source include/assert_binlog_events.inc
--let $include_trx_payload_events=0
--source include/rpl_connection_slave.inc
# wait for the applier thread to start applying
--let $wait_condition=SELECT COUNT(*) > 0 FROM performance_schema.threads WHERE name IN ("thread/sql/replica_sql", "thread/sql/replica_worker") AND processlist_info LIKE 'XA START%'
--source include/wait_condition.inc
# get the exact thread id for the applier thread
--let $worker_thread_id=`SELECT thread_id FROM performance_schema.threads WHERE name IN ("thread/sql/replica_sql", "thread/sql/replica_worker") AND processlist_info LIKE 'XA START%'`
# wait for the applier thread to start retrying
--let $wait_condition=SELECT APPLYING_TRANSACTION_RETRIES_COUNT > 0 FROM performance_schema.replication_applier_status_by_worker WHERE thread_id = $worker_thread_id
--source include/wait_condition.inc
--source include/rpl_connection_slave1.inc
ROLLBACK;
--source include/rpl_connection_master.inc
XA COMMIT 'xa1';
--source include/sync_slave_sql_with_master.inc
# assert that we have the expected event sequence in the
# slave's binary log
--let $include_trx_payload_events=1
--let $event_sequence = Gtid # Query # Gtid # Transaction_payload # Query # Table_map # Write_rows # Xid # Gtid # Transaction_payload # Query/XA START.* # Table_map # Write_rows # Query/XA END.* # XA_prepare # Gtid # Query/XA COMMIT.*
--source include/assert_binlog_events.inc
# assert that the tables have the same content
--let $diff_tables=master:test.t1,slave:test.t1
--source include/diff_tables.inc
--source include/rpl_connection_master.inc
DROP TABLE t1;
--source include/sync_slave_sql_with_master.inc
--dec $i
}
--dec $j
}
--source include/stop_slave.inc
--replace_result $saved_replica_transaction_retries SAVED
--eval SET @@global.replica_transaction_retries= $saved_replica_transaction_retries
--replace_result $saved_innodb_lock_wait_timeout SAVED
--eval SET @@global.innodb_lock_wait_timeout= $saved_innodb_lock_wait_timeout
--replace_result $saved_binlog_transaction_compression SAVED
--eval SET @@global.binlog_transaction_compression = $saved_binlog_transaction_compression
--disable_warnings
--replace_result $saved_replica_parallel_workers SAVED
--eval SET @@global.replica_parallel_workers = $saved_replica_parallel_workers
--enable_warnings
--replace_result $saved_replica_parallel_type SAVED
--eval SET @@global.replica_parallel_type = '$saved_replica_parallel_type'
--replace_result $saved_replica_preserve_commit_order SAVED
--eval SET @@global.replica_preserve_commit_order = $saved_replica_preserve_commit_order
--source include/start_slave.inc
--source include/rpl_connection_master.inc
--replace_result $saved_master_binlog_transaction_compression SAVED
--eval SET @@session.binlog_transaction_compression = $saved_master_binlog_transaction_compression
--source include/rpl_end.inc
|