mirror of
https://github.com/MariaDB/server.git
synced 2025-08-08 11:22:35 +03:00
Backport MySQL WL#2540 into MariaDB.
Patch backported: bzr diff '-rrevid:alfranio.correia@oracle.com-20101121143257-se3vpqus73l4mum0 ..revid:luis.soares@oracle.com-20101124111752-9b8260bd1qak87hr' --old=lp:mysql-server --new=lp:mysql-server
This commit is contained in:
131
mysql-test/suite/rpl/t/rpl_corruption.test
Normal file
131
mysql-test/suite/rpl/t/rpl_corruption.test
Normal file
@@ -0,0 +1,131 @@
|
||||
############################################################
|
||||
# Author: Serge Kozlov <serge.kozlov@oracle.com>
|
||||
# Date: 17 Oct 2010
|
||||
# Purpose: WL#5064 Testing with corrupted events.
|
||||
# The test emulates the corruption at the vary stages
|
||||
# of replication:
|
||||
# - in binlog file
|
||||
# - in network
|
||||
# - in relay log
|
||||
############################################################
|
||||
|
||||
--source include/have_debug.inc
|
||||
--source include/master-slave.inc
|
||||
|
||||
# Block legal errors for MTR
|
||||
call mtr.add_suppression('Found invalid event in binary log');
|
||||
call mtr.add_suppression('Slave I/O: Relay log write failure: could not queue event from master');
|
||||
call mtr.add_suppression('event read from binlog did not pass crc check');
|
||||
call mtr.add_suppression('Replication event checksum verification failed');
|
||||
|
||||
SET @old_master_verify_checksum = @@master_verify_checksum;
|
||||
|
||||
# Creating test table/data and set corruption position for testing
|
||||
--echo # 1. Creating test table/data and set corruption position for testing
|
||||
--connection master
|
||||
--echo * insert/update/delete rows in table t1 *
|
||||
# Corruption algorithm modifies only the first event and
|
||||
# then will be reset. To avoid checking always the first event
|
||||
# from binlog (usually it is FD) we randomly execute different
|
||||
# statements and set position for corruption inside events.
|
||||
|
||||
CREATE TABLE t1 (a INT NOT NULL PRIMARY KEY, b VARCHAR(10), c VARCHAR(100));
|
||||
--disable_query_log
|
||||
let $i=`SELECT 3+CEILING(10*RAND())`;
|
||||
let $j=1;
|
||||
let $pos=0;
|
||||
while ($i) {
|
||||
eval INSERT INTO t1 VALUES ($j, 'a', NULL);
|
||||
if (`SELECT RAND() > 0.7`)
|
||||
{
|
||||
eval UPDATE t1 SET c = REPEAT('a', 20) WHERE a = $j;
|
||||
}
|
||||
if (`SELECT RAND() > 0.8`)
|
||||
{
|
||||
eval DELETE FROM t1 WHERE a = $j;
|
||||
}
|
||||
if (!$pos) {
|
||||
let $pos= query_get_value(SHOW MASTER STATUS, Position, 1);
|
||||
--sync_slave_with_master
|
||||
--source include/stop_slave.inc
|
||||
--disable_query_log
|
||||
--connection master
|
||||
}
|
||||
dec $i;
|
||||
inc $j;
|
||||
}
|
||||
--enable_query_log
|
||||
|
||||
# Emulate corruption in binlog file when SHOW BINLOG EVENTS is executing
|
||||
--echo # 2. Corruption in master binlog and SHOW BINLOG EVENTS
|
||||
SET GLOBAL debug="+d,corrupt_read_log_event_char";
|
||||
--echo SHOW BINLOG EVENTS;
|
||||
--disable_query_log
|
||||
send_eval SHOW BINLOG EVENTS FROM $pos;
|
||||
--enable_query_log
|
||||
--error ER_ERROR_WHEN_EXECUTING_COMMAND
|
||||
reap;
|
||||
SET GLOBAL debug="-d,corrupt_read_log_event_char";
|
||||
|
||||
# Emulate corruption on master with crc checking on master
|
||||
--echo # 3. Master read a corrupted event from binlog and send the error to slave
|
||||
SET GLOBAL debug="+d,corrupt_read_log_event2";
|
||||
--connection slave
|
||||
START SLAVE IO_THREAD;
|
||||
let $slave_io_errno= 1236;
|
||||
--source include/wait_for_slave_io_error.inc
|
||||
--connection master
|
||||
SET GLOBAL debug="-d,corrupt_read_log_event2";
|
||||
|
||||
# Emulate corruption on master without crc checking on master
|
||||
--echo # 4. Master read a corrupted event from binlog and send it to slave
|
||||
--connection master
|
||||
SET GLOBAL master_verify_checksum=0;
|
||||
SET GLOBAL debug="+d,corrupt_read_log_event2";
|
||||
--connection slave
|
||||
START SLAVE IO_THREAD;
|
||||
let $slave_io_errno= 1595;
|
||||
--source include/wait_for_slave_io_error.inc
|
||||
--connection master
|
||||
SET GLOBAL debug="-d,corrupt_read_log_event2";
|
||||
SET GLOBAL debug= "";
|
||||
SET GLOBAL master_verify_checksum=1;
|
||||
|
||||
# Emulate corruption in network
|
||||
--echo # 5. Slave. Corruption in network
|
||||
--connection slave
|
||||
SET GLOBAL debug="+d,corrupt_queue_event";
|
||||
START SLAVE IO_THREAD;
|
||||
let $slave_io_errno= 1595;
|
||||
--source include/wait_for_slave_io_error.inc
|
||||
SET GLOBAL debug="-d,corrupt_queue_event";
|
||||
|
||||
# Emulate corruption in relay log
|
||||
--echo # 6. Slave. Corruption in relay log
|
||||
SET GLOBAL debug="+d,corrupt_read_log_event_char";
|
||||
START SLAVE;
|
||||
let $slave_sql_errno= 1593;
|
||||
--source include/wait_for_slave_sql_error.inc
|
||||
SET GLOBAL debug="-d,corrupt_read_log_event_char";
|
||||
SET GLOBAL debug= "";
|
||||
|
||||
# Start normal replication and compare same table on master
|
||||
# and slave
|
||||
--echo # 7. Seek diff for tables on master and slave
|
||||
--connection slave
|
||||
--source include/start_slave.inc
|
||||
--connection master
|
||||
--sync_slave_with_master
|
||||
let $diff_tables= master:test.t1, slave:test.t1;
|
||||
--source include/diff_tables.inc
|
||||
|
||||
# Clean up
|
||||
--echo # 8. Clean up
|
||||
--connection master
|
||||
SET GLOBAL debug= "";
|
||||
SET GLOBAL master_verify_checksum = @old_master_verify_checksum;
|
||||
DROP TABLE t1;
|
||||
--sync_slave_with_master
|
||||
SET GLOBAL debug= "";
|
||||
|
||||
--source include/rpl_end.inc
|
Reference in New Issue
Block a user