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 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165
|
#
# The test verifies execution specially timestamped transactions and
# erroring out due to inconsistent timestamps found.
#
--source include/have_debug.inc
--source include/master-slave.inc
# format - non-specific test is enough to executed in MIXED mode only.
--source include/have_binlog_format_mixed.inc
--connection slave
call mtr.add_suppression("Transaction is tagged with inconsistent logical timestamps");
call mtr.add_suppression("Cannot execute the current event group in the parallel mode.");
#call mtr.add_suppression("Replica I/O: Got fatal error 1236 from source when reading data from binary log");
--source include/stop_slave.inc
SET @save_replica_parallel_type = @@GLOBAL.replica_parallel_type;
SET @save_replica_parallel_workers = @@GLOBAL.replica_parallel_workers;
SET @save_replica_transaction_retries = @@GLOBAL.replica_transaction_retries;
SET GLOBAL replica_parallel_type = LOGICAL_CLOCK;
SET GLOBAL replica_parallel_workers = 3;
SET GLOBAL replica_transaction_retries = 0;
#
# Part I. "Rotated" transactions apply correctly.
# At times Master generalates last_committed as magic SEQ_UNINIT which
# designates the transaction's commit parent is unknown so
# it has to be applied in exclusive environment, aka
# fallback to sequential mode.
#
# Create a chain of binlogs containing two consequent SEQ_UNINIT last_committed
# transactions in one them.
connect (master2,localhost,root,,);
--connection master
--let $MYSQLD_DATADIR= `select @@datadir`
--let $events_file=$MYSQLTEST_VARDIR/tmp/events.sql
RESET MASTER; # make sure we start from 0000001 binlog
CREATE TABLE t1 (a int) ENGINE= innodb;
INSERT INTO t1 SET a=1;
--connection master1
BEGIN;
INSERT INTO t1 SET a=2;
--connection master2
BEGIN;
INSERT INTO t1 SET a=3;
--connection master
FLUSH LOGS;
--connection master1
COMMIT;
--connection master2
COMMIT;
# two timestamp pair of (0,[12]) must be found.
--exec $MYSQL_BINLOG --force-if-open $MYSQLD_DATADIR/master-bin.000002 > $events_file
--let $grep_file= $events_file
--let $grep_pattern= last_committed=0\tsequence_number=[12]
--let $grep_output= print_count
--source include/grep_pattern.inc
# Create a chain of binlogs containing two consequent SEQ_UNINIT last_committed
# transactions separated by a Rotate event.
--connection master
INSERT INTO t1 SET a=1;
--connection master1
BEGIN;
INSERT INTO t1 SET a=2;
--connection master2
BEGIN;
INSERT INTO t1 SET a=3;
--connection master
FLUSH LOGS;
--connection master1
COMMIT;
--connection master
FLUSH LOGS;
--connection master2
COMMIT;
--connection master
--send INSERT INTO t1 SET a=1
--connection master1
--send INSERT INTO t1 SET a=2
--connection master2
--send INSERT INTO t1 SET a=3
--connection master
--reap
--connection master1
--reap
--connection master2
--reap
--connection slave
--source include/start_slave.inc
# Proof of correctess stable execution
--connection master
--sync_slave_with_master
--let $diff_tables=master:t1,slave:t1
--source include/diff_tables.inc
#
# Part II. Let's feign inconsistent timestamping
# to see how Slave expectedly stops.
#
--connection master
SET @@session.debug ='+d,feign_commit_parent';
INSERT INTO t1 SET a=0;
SET @@session.debug ='-d,feign_commit_parent';
--connection slave
--let $slave_sql_errno= convert_error(ER_MTA_CANT_PARALLEL)
--source include/wait_for_slave_sql_to_stop.inc
--source include/stop_slave_io.inc
# "Manual" recovery to restart anew 'cos of the schrambled event
--connection master
RESET MASTER;
--connection slave
RESET SLAVE;
RESET MASTER;
--source include/start_slave.inc
#
# Cleanup
#
--connection master
DROP TABLE t1;
--remove_file $events_file
--sync_slave_with_master
#--connection slave
--source include/stop_slave.inc
SET @@GLOBAL.replica_parallel_type= @save_replica_parallel_type;
--disable_warnings
SET @@GLOBAL.replica_parallel_workers= @save_replica_parallel_workers;
--enable_warnings
SET @@GLOBAL.replica_transaction_retries= @save_replica_transaction_retries;
--source include/start_slave.inc
--source include/rpl_end.inc
|