105 lines
3.0 KiB
Plaintext
105 lines
3.0 KiB
Plaintext
# Scenario:
|
|
# SigCon= ({R(B), W(B)})
|
|
# SQLThread=({R(B), W(B), C}, HIGH_PRIORITY).
|
|
#
|
|
# Outcome: SigCon must abort, SQLThread must commit.
|
|
|
|
# no need to rerun this test three times
|
|
--source include/have_binlog_format_mixed.inc
|
|
|
|
--source include/have_debug.inc
|
|
--source include/have_debug_sync.inc
|
|
--source include/master-slave.inc
|
|
|
|
--source include/rpl_connection_slave.inc
|
|
SET GLOBAL DEBUG="+d,dbug_set_high_prio_sql_thread";
|
|
|
|
# now applier thread starts with high prio
|
|
# since we are now setting the internal flag
|
|
--source include/stop_slave_sql.inc
|
|
--source include/start_slave_sql.inc
|
|
|
|
--source include/rpl_connection_master.inc
|
|
|
|
####### MASTER #######
|
|
CREATE TABLE t1 (c1 INT NOT NULL PRIMARY KEY) ENGINE=InnoDB;
|
|
INSERT INTO t1 VALUES (0);
|
|
|
|
####### SIGCON #######
|
|
--let $rpl_connection_name= sigcon
|
|
--let $rpl_server_number= 2
|
|
--source include/rpl_connect.inc
|
|
|
|
--echo [connection sigcon]
|
|
--let $sync_slave_connection= sigcon
|
|
--source include/sync_slave_sql_with_master.inc
|
|
|
|
SET DEBUG_SYNC='ha_innobase_end_statement WAIT_FOR waiting1';
|
|
|
|
BEGIN;
|
|
--send UPDATE t1 SET c1=99 WHERE c1=0
|
|
|
|
####### SLAVE #######
|
|
--source include/rpl_connection_slave.inc
|
|
# Wait until sigcon reaches the ha_innobase_update_row_done debug sync point.
|
|
--let $wait_condition=SELECT COUNT(*)=1 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE State = 'debug sync point: ha_innobase_end_statement'
|
|
--source include/wait_condition.inc
|
|
|
|
####### MASTER #######
|
|
--source include/rpl_connection_master.inc
|
|
UPDATE t1 SET c1=1 WHERE c1=0;
|
|
|
|
####### SLAVE #######
|
|
--source include/rpl_connection_slave.inc
|
|
|
|
# Wait for c1 in t1 to be 1
|
|
--let $wait_condition=SELECT COUNT(*)=1 FROM t1 WHERE c1=1
|
|
--source include/wait_condition.inc
|
|
|
|
# Now signal the waiting thread on sigcon to resume
|
|
# and it should end up in an error stating that it
|
|
# was aborted
|
|
SET DEBUG_SYNC='now SIGNAL waiting1';
|
|
|
|
####### SIGCON #######
|
|
--echo [connection sigcon]
|
|
--let $rpl_connection_name= sigcon
|
|
--source include/rpl_connection.inc
|
|
--reap
|
|
# FIXME: This seems to be an error in the server layer. Control doesn't reach
|
|
# the InnoDB handler methods.
|
|
#--error ER_ERROR_DURING_COMMIT
|
|
--error ER_ERROR_DURING_COMMIT
|
|
COMMIT;
|
|
|
|
--disconnect sigcon
|
|
|
|
####### SLAVE #######
|
|
--connection master
|
|
--let $sync_slave_connection= slave
|
|
--source include/sync_slave_sql_with_master.inc
|
|
|
|
--let $assert_text= 'There is a 1 in t1'
|
|
--let $assert_cond= [SELECT COUNT(*) AS count FROM t1 WHERE t1.c1 = 1, count, 1] = 1
|
|
--source include/assert.inc
|
|
|
|
--let $assert_text= 'There is no 0 in t1'
|
|
--let $assert_cond= [SELECT COUNT(*) AS count FROM t1 WHERE t1.c1 = 0, count, 1] = 0
|
|
--source include/assert.inc
|
|
|
|
--let $assert_text= 'There is no 99 in t1'
|
|
--let $assert_cond= [SELECT COUNT(*) AS count FROM t1 WHERE t1.c1 = 99, count, 1] = 0
|
|
--source include/assert.inc
|
|
|
|
# Clean up.
|
|
--connection master
|
|
DROP TABLE t1;
|
|
--source include/sync_slave_sql_with_master.inc
|
|
|
|
# resetting the applier thread
|
|
--source include/stop_slave_sql.inc
|
|
SET GLOBAL DEBUG="-d,dbug_set_high_prio_sql_thread";
|
|
--source include/start_slave_sql.inc
|
|
|
|
--source include/rpl_end.inc
|