mirror of
https://github.com/MariaDB/server.git
synced 2025-04-08 16:25:32 +02:00
230 lines
5.9 KiB
Text
230 lines
5.9 KiB
Text
--source include/galera_cluster.inc
|
|
--source include/have_innodb.inc
|
|
|
|
#
|
|
# Test case 1: Start a transaction on node_2a and kill it
|
|
# from other connection on same node
|
|
#
|
|
|
|
--connection node_2
|
|
CREATE TABLE t1(a int not null primary key auto_increment,b int) engine=InnoDB;
|
|
insert into t1 values (NULL,1);
|
|
|
|
--connect node_2a, 127.0.0.1, root, , test, $NODE_MYPORT_2
|
|
--connection node_2a
|
|
begin;
|
|
update t1 set a = 5;
|
|
|
|
--connection node_2
|
|
|
|
--let $wait_condition = SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE USER = 'root' AND COMMAND = 'Sleep' LIMIT 1
|
|
--source include/wait_condition.inc
|
|
|
|
--let $k_thread = `SELECT ID FROM INFORMATION_SCHEMA.PROCESSLIST WHERE USER = 'root' AND COMMAND = 'Sleep' LIMIT 1`
|
|
|
|
--disable_query_log
|
|
--eval KILL $k_thread
|
|
--enable_query_log
|
|
|
|
select * from t1;
|
|
--disconnect node_2a
|
|
|
|
#
|
|
# Test case 2: Start a transaction on node_2a and use
|
|
# kill query from other connection on same node
|
|
#
|
|
|
|
--connect node_2a, 127.0.0.1, root, , test, $NODE_MYPORT_2
|
|
--connection node_2a
|
|
begin;
|
|
update t1 set a =5;
|
|
|
|
--connection node_2
|
|
--let $wait_condition = SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE USER = 'root' AND COMMAND = 'Sleep' LIMIT 1
|
|
--source include/wait_condition.inc
|
|
|
|
--let $k_thread = `SELECT ID FROM INFORMATION_SCHEMA.PROCESSLIST WHERE USER = 'root' AND COMMAND = 'Sleep' LIMIT 1`
|
|
|
|
--disable_query_log
|
|
--eval KILL QUERY $k_thread
|
|
--enable_query_log
|
|
|
|
select * from t1;
|
|
--disconnect node_2a
|
|
#
|
|
# Test case 3: Start a transaction on node_2a and start a DDL on other transaction
|
|
# that will then abort node_2a transaction
|
|
#
|
|
--connect node_2a, 127.0.0.1, root, , test, $NODE_MYPORT_2
|
|
--connection node_2a
|
|
begin;
|
|
update t1 set a =5, b=2;
|
|
|
|
--connection node_2
|
|
ALTER TABLE t1 ADD UNIQUE KEY b1(b);
|
|
ALTER TABLE t1 DROP KEY b1;
|
|
|
|
select * from t1;
|
|
|
|
--disconnect node_2a
|
|
|
|
#
|
|
# Test case 4: Start a transaction on node_2a and conflicting transaction on node_2b
|
|
# and start a DDL on other transaction that will then abort node_2a and node_2b
|
|
# transactions
|
|
#
|
|
|
|
--connect node_2a, 127.0.0.1, root, , test, $NODE_MYPORT_2
|
|
--connection node_2a
|
|
begin;
|
|
update t1 set a =5, b=2;
|
|
|
|
--connect node_2b, 127.0.0.1, root, , test, $NODE_MYPORT_2
|
|
--connection node_2b
|
|
begin;
|
|
send update t1 set a =6, b=7;
|
|
|
|
--connection node_2
|
|
ALTER TABLE t1 ADD UNIQUE KEY b2(b);
|
|
ALTER TABLE t1 DROP KEY b2;
|
|
|
|
select * from t1;
|
|
|
|
--disconnect node_2a
|
|
--disconnect node_2b
|
|
|
|
#
|
|
# Test case 5: Start a transaction on node_2a with wsrep disabled.
|
|
# A conflicting DDL on other transaction can't BF abort
|
|
# transaction from node_2a (wsrep disabled).
|
|
#
|
|
|
|
--connect node_2a, 127.0.0.1, root, , test, $NODE_MYPORT_2
|
|
--connect node_2b, 127.0.0.1, root, , test, $NODE_MYPORT_2
|
|
--connection node_2a
|
|
SET SESSION wsrep_on=OFF;
|
|
begin;
|
|
update t1 set a =5, b=2;
|
|
|
|
--connection node_2
|
|
--send ALTER TABLE t1 ADD UNIQUE KEY b3(b)
|
|
|
|
--connection node_2b
|
|
SET SESSION wsrep_sync_wait=0;
|
|
--let $wait_condition = SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE STATE LIKE 'Waiting for table metadata lock%' OR STATE LIKE 'Waiting to execute in isolation%';
|
|
--source include/wait_condition.inc
|
|
|
|
--connection node_2a
|
|
select * from t1;
|
|
|
|
# We expect that ALTER should not be able to BF abort
|
|
# this transaction, it must wait for it to finish.
|
|
# Expect commit to succeed.
|
|
commit;
|
|
|
|
--connection node_2
|
|
--reap
|
|
|
|
--disconnect node_2a
|
|
--disconnect node_2b
|
|
|
|
#
|
|
# Test case 6: Start a transaction on node_2a with wsrep disabled
|
|
# and kill it from other connection on same node.
|
|
#
|
|
|
|
--connect node_2a, 127.0.0.1, root, , test, $NODE_MYPORT_2
|
|
--connection node_2a
|
|
SET SESSION wsrep_on=OFF;
|
|
begin;
|
|
update t1 set a =5, b=2;
|
|
|
|
--connection node_2
|
|
--let $wait_condition = SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE USER = 'root' AND COMMAND = 'Sleep' LIMIT 1
|
|
--source include/wait_condition.inc
|
|
|
|
--let $k_thread = `SELECT ID FROM INFORMATION_SCHEMA.PROCESSLIST WHERE USER = 'root' AND COMMAND = 'Sleep' LIMIT 1`
|
|
|
|
--disable_query_log
|
|
--eval KILL $k_thread
|
|
--enable_query_log
|
|
|
|
select * from t1;
|
|
|
|
--disconnect node_2a
|
|
|
|
--connection node_1
|
|
|
|
source include/maybe_debug.inc;
|
|
if ($have_debug) {
|
|
#
|
|
# Test case 7: Start a transaction on node_2 and use KILL to abort
|
|
# a query in connection node_2a
|
|
# During the KILL execution replicate conflicting transaction from node_1
|
|
# to BF abort the transaction executing the KILL
|
|
#
|
|
|
|
--connect node_2a, 127.0.0.1, root, , test, $NODE_MYPORT_2
|
|
--connection node_2a
|
|
truncate t1;
|
|
insert into t1 values (7,0);
|
|
|
|
--connection node_2
|
|
set wsrep_sync_wait=0;
|
|
|
|
# get the ID of connection to be later killed
|
|
--let $wait_condition = SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE USER = 'root' AND COMMAND = 'Sleep' LIMIT 1
|
|
--source include/wait_condition.inc
|
|
--let $k_thread = `SELECT ID FROM INFORMATION_SCHEMA.PROCESSLIST WHERE USER = 'root' AND COMMAND = 'Sleep' LIMIT 1`
|
|
|
|
# start a transaction
|
|
begin;
|
|
update t1 set b=2 where a=7;
|
|
|
|
# set sync point for incoming applying
|
|
--connect node_2b, 127.0.0.1, root, , test, $NODE_MYPORT_2
|
|
set wsrep_sync_wait=0;
|
|
|
|
SET GLOBAL debug_dbug = "d,sync.wsrep_apply_cb";
|
|
|
|
# replicate conflicting transaction, should stopp in the sync point
|
|
--connection node_1
|
|
update t1 set b=1 where a=7;
|
|
|
|
# wait for the applier to reach the sync point
|
|
--connection node_2b
|
|
SET SESSION DEBUG_SYNC = "now WAIT_FOR sync.wsrep_apply_cb_reached";
|
|
|
|
# issue KILL inside the transacion, implicit commit is expected
|
|
--connection node_2
|
|
--disable_query_log
|
|
--send_eval KILL QUERY $k_thread
|
|
--enable_query_log
|
|
|
|
# wait for the KILL processing to be seen in processlist
|
|
--connection node_2b
|
|
--let $wait_condition = SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE USER = 'root' AND INFO LIKE 'KILL QUERY%'
|
|
--source include/wait_condition.inc
|
|
|
|
# resume applying, BF abort should follow
|
|
SET DEBUG_SYNC = "now SIGNAL signal.wsrep_apply_cb";
|
|
|
|
--connection node_2
|
|
--error ER_LOCK_DEADLOCK
|
|
--reap
|
|
|
|
commit;
|
|
|
|
select * from t1;
|
|
|
|
--connection node_2a
|
|
SET DEBUG_SYNC= 'RESET';
|
|
SET GLOBAL debug_dbug = "";
|
|
|
|
--disconnect node_2a
|
|
--disconnect node_2b
|
|
|
|
--connection node_1
|
|
}
|
|
|
|
drop table t1;
|