mirror of
https://github.com/MariaDB/server.git
synced 2025-01-22 14:54:20 +01:00
[t:5024], add xa.test
git-svn-id: file:///svn/mysql/tests/mysql-test@44762 c7de825b-a66e-492c-adef-691d508d4ae1
This commit is contained in:
parent
143157448e
commit
0b459feb77
2 changed files with 369 additions and 0 deletions
132
mysql-test/suite/tokudb.bugs/r/xa.result
Normal file
132
mysql-test/suite/tokudb.bugs/r/xa.result
Normal file
|
@ -0,0 +1,132 @@
|
||||||
|
drop table if exists t1, t2;
|
||||||
|
create table t1 (a int) engine=tokudb;
|
||||||
|
xa start 'test1';
|
||||||
|
insert t1 values (10);
|
||||||
|
xa end 'test1';
|
||||||
|
xa prepare 'test1';
|
||||||
|
xa rollback 'test1';
|
||||||
|
select * from t1;
|
||||||
|
a
|
||||||
|
xa start 'test2';
|
||||||
|
xa start 'test-bad';
|
||||||
|
ERROR XAE07: XAER_RMFAIL: The command cannot be executed when global transaction is in the ACTIVE state
|
||||||
|
insert t1 values (20);
|
||||||
|
xa prepare 'test2';
|
||||||
|
ERROR XAE07: XAER_RMFAIL: The command cannot be executed when global transaction is in the ACTIVE state
|
||||||
|
xa end 'test2';
|
||||||
|
xa prepare 'test2';
|
||||||
|
xa commit 'test2';
|
||||||
|
select * from t1;
|
||||||
|
a
|
||||||
|
20
|
||||||
|
xa start 'testa','testb';
|
||||||
|
insert t1 values (30);
|
||||||
|
commit;
|
||||||
|
ERROR XAE07: XAER_RMFAIL: The command cannot be executed when global transaction is in the ACTIVE state
|
||||||
|
xa end 'testa','testb';
|
||||||
|
begin;
|
||||||
|
ERROR XAE07: XAER_RMFAIL: The command cannot be executed when global transaction is in the IDLE state
|
||||||
|
create table t2 (a int);
|
||||||
|
ERROR XAE07: XAER_RMFAIL: The command cannot be executed when global transaction is in the IDLE state
|
||||||
|
xa start 'testa','testb';
|
||||||
|
ERROR XAE08: XAER_DUPID: The XID already exists
|
||||||
|
xa start 'testa','testb', 123;
|
||||||
|
ERROR XAE08: XAER_DUPID: The XID already exists
|
||||||
|
xa start 0x7465737462, 0x2030405060, 0xb;
|
||||||
|
insert t1 values (40);
|
||||||
|
xa end 'testb',' 0@P`',11;
|
||||||
|
xa prepare 'testb',0x2030405060,11;
|
||||||
|
start transaction;
|
||||||
|
ERROR XAE07: XAER_RMFAIL: The command cannot be executed when global transaction is in the PREPARED state
|
||||||
|
xa recover;
|
||||||
|
formatID gtrid_length bqual_length data
|
||||||
|
11 5 5 testb 0@P`
|
||||||
|
xa prepare 'testa','testb';
|
||||||
|
xa recover;
|
||||||
|
formatID gtrid_length bqual_length data
|
||||||
|
11 5 5 testb 0@P`
|
||||||
|
1 5 5 testatestb
|
||||||
|
xa commit 'testb',0x2030405060,11;
|
||||||
|
ERROR XAE04: XAER_NOTA: Unknown XID
|
||||||
|
xa rollback 'testa','testb';
|
||||||
|
xa start 'zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz';
|
||||||
|
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
|
||||||
|
xa rollback 'testb',0x2030405060,11;
|
||||||
|
select * from t1;
|
||||||
|
a
|
||||||
|
20
|
||||||
|
drop table t1;
|
||||||
|
drop table if exists t1;
|
||||||
|
create table t1(a int, b int, c varchar(20), primary key(a)) engine = tokudb;
|
||||||
|
insert into t1 values(1, 1, 'a');
|
||||||
|
insert into t1 values(2, 2, 'b');
|
||||||
|
xa start 'a','b';
|
||||||
|
update t1 set c = 'aa' where a = 1;
|
||||||
|
xa start 'a','c';
|
||||||
|
update t1 set c = 'bb' where a = 2;
|
||||||
|
update t1 set c = 'bb' where a = 2;
|
||||||
|
update t1 set c = 'aa' where a = 1;
|
||||||
|
ERROR 40001: Deadlock found when trying to get lock; try restarting transaction
|
||||||
|
select count(*) from t1;
|
||||||
|
count(*)
|
||||||
|
2
|
||||||
|
xa end 'a','c';
|
||||||
|
xa rollback 'a','c';
|
||||||
|
xa start 'a','c';
|
||||||
|
drop table t1;
|
||||||
|
#
|
||||||
|
# BUG#51342 - more xid crashing
|
||||||
|
#
|
||||||
|
CREATE TABLE t1(a INT) ENGINE=TokuDB;
|
||||||
|
XA START 'x';
|
||||||
|
SET SESSION autocommit=0;
|
||||||
|
INSERT INTO t1 VALUES(1);
|
||||||
|
SET SESSION autocommit=1;
|
||||||
|
ERROR XAE07: XAER_RMFAIL: The command cannot be executed when global transaction is in the ACTIVE state
|
||||||
|
SELECT @@autocommit;
|
||||||
|
@@autocommit
|
||||||
|
0
|
||||||
|
INSERT INTO t1 VALUES(1);
|
||||||
|
XA END 'x';
|
||||||
|
XA COMMIT 'x' ONE PHASE;
|
||||||
|
DROP TABLE t1;
|
||||||
|
SET SESSION autocommit=1;
|
||||||
|
End of 5.0 tests
|
||||||
|
xa start 'a';
|
||||||
|
xa end 'a';
|
||||||
|
xa rollback 'a';
|
||||||
|
xa start 'a';
|
||||||
|
xa end 'a';
|
||||||
|
xa rollback 'a';
|
||||||
|
xa start 'a';
|
||||||
|
xa end 'a';
|
||||||
|
xa prepare 'a';
|
||||||
|
xa commit 'a';
|
||||||
|
xa start 'a';
|
||||||
|
xa end 'a';
|
||||||
|
xa prepare 'a';
|
||||||
|
xa commit 'a';
|
||||||
|
CREATE TABLE t1(a INT, KEY(a)) ENGINE=TokuDB;
|
||||||
|
INSERT INTO t1 VALUES(1),(2);
|
||||||
|
BEGIN;
|
||||||
|
UPDATE t1 SET a=3 WHERE a=1;
|
||||||
|
BEGIN;
|
||||||
|
UPDATE t1 SET a=4 WHERE a=2;
|
||||||
|
UPDATE t1 SET a=5 WHERE a=2;
|
||||||
|
UPDATE t1 SET a=5 WHERE a=1;
|
||||||
|
ERROR 40001: Deadlock found when trying to get lock; try restarting transaction
|
||||||
|
ROLLBACK;
|
||||||
|
ROLLBACK;
|
||||||
|
BEGIN;
|
||||||
|
UPDATE t1 SET a=3 WHERE a=1;
|
||||||
|
XA START 'xid1';
|
||||||
|
UPDATE t1 SET a=4 WHERE a=2;
|
||||||
|
UPDATE t1 SET a=5 WHERE a=2;
|
||||||
|
UPDATE t1 SET a=5 WHERE a=1;
|
||||||
|
ERROR 40001: Deadlock found when trying to get lock; try restarting transaction
|
||||||
|
XA END 'xid1';
|
||||||
|
XA ROLLBACK 'xid1';
|
||||||
|
XA START 'xid1';
|
||||||
|
XA END 'xid1';
|
||||||
|
XA ROLLBACK 'xid1';
|
||||||
|
DROP TABLE t1;
|
237
mysql-test/suite/tokudb.bugs/t/xa.test
Normal file
237
mysql-test/suite/tokudb.bugs/t/xa.test
Normal file
|
@ -0,0 +1,237 @@
|
||||||
|
#
|
||||||
|
# WL#1756
|
||||||
|
#
|
||||||
|
-- source include/have_tokudb.inc
|
||||||
|
|
||||||
|
# Save the initial number of concurrent sessions
|
||||||
|
--source include/count_sessions.inc
|
||||||
|
|
||||||
|
--disable_warnings
|
||||||
|
drop table if exists t1, t2;
|
||||||
|
--enable_warnings
|
||||||
|
create table t1 (a int) engine=tokudb;
|
||||||
|
xa start 'test1';
|
||||||
|
insert t1 values (10);
|
||||||
|
xa end 'test1';
|
||||||
|
xa prepare 'test1';
|
||||||
|
xa rollback 'test1';
|
||||||
|
select * from t1;
|
||||||
|
|
||||||
|
xa start 'test2';
|
||||||
|
--error ER_XAER_RMFAIL
|
||||||
|
xa start 'test-bad';
|
||||||
|
insert t1 values (20);
|
||||||
|
--error ER_XAER_RMFAIL
|
||||||
|
xa prepare 'test2';
|
||||||
|
xa end 'test2';
|
||||||
|
xa prepare 'test2';
|
||||||
|
xa commit 'test2';
|
||||||
|
select * from t1;
|
||||||
|
|
||||||
|
xa start 'testa','testb';
|
||||||
|
insert t1 values (30);
|
||||||
|
|
||||||
|
--error ER_XAER_RMFAIL
|
||||||
|
commit;
|
||||||
|
|
||||||
|
xa end 'testa','testb';
|
||||||
|
|
||||||
|
--error ER_XAER_RMFAIL
|
||||||
|
begin;
|
||||||
|
--error ER_XAER_RMFAIL
|
||||||
|
create table t2 (a int);
|
||||||
|
|
||||||
|
connect (con1,localhost,root,,);
|
||||||
|
connection con1;
|
||||||
|
|
||||||
|
--error ER_XAER_DUPID
|
||||||
|
xa start 'testa','testb';
|
||||||
|
--error ER_XAER_DUPID
|
||||||
|
xa start 'testa','testb', 123;
|
||||||
|
|
||||||
|
# gtrid [ , bqual [ , formatID ] ]
|
||||||
|
xa start 0x7465737462, 0x2030405060, 0xb;
|
||||||
|
insert t1 values (40);
|
||||||
|
xa end 'testb',' 0@P`',11;
|
||||||
|
xa prepare 'testb',0x2030405060,11;
|
||||||
|
|
||||||
|
--error ER_XAER_RMFAIL
|
||||||
|
start transaction;
|
||||||
|
|
||||||
|
xa recover;
|
||||||
|
|
||||||
|
# uncomment the line below when binlog will be able to prepare
|
||||||
|
#disconnect con1;
|
||||||
|
connection default;
|
||||||
|
|
||||||
|
xa prepare 'testa','testb';
|
||||||
|
|
||||||
|
xa recover;
|
||||||
|
|
||||||
|
--error ER_XAER_NOTA
|
||||||
|
xa commit 'testb',0x2030405060,11;
|
||||||
|
xa rollback 'testa','testb';
|
||||||
|
|
||||||
|
--error ER_PARSE_ERROR
|
||||||
|
xa start 'zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz';
|
||||||
|
|
||||||
|
connection con1;
|
||||||
|
xa rollback 'testb',0x2030405060,11;
|
||||||
|
connection default;
|
||||||
|
|
||||||
|
select * from t1;
|
||||||
|
drop table t1;
|
||||||
|
|
||||||
|
disconnect con1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug#28323: Server crashed in xid cache operations
|
||||||
|
#
|
||||||
|
|
||||||
|
--disable_warnings
|
||||||
|
drop table if exists t1;
|
||||||
|
--enable_warnings
|
||||||
|
|
||||||
|
create table t1(a int, b int, c varchar(20), primary key(a)) engine = tokudb;
|
||||||
|
insert into t1 values(1, 1, 'a');
|
||||||
|
insert into t1 values(2, 2, 'b');
|
||||||
|
|
||||||
|
connect (con1,localhost,root,,);
|
||||||
|
connect (con2,localhost,root,,);
|
||||||
|
|
||||||
|
--connection con1
|
||||||
|
xa start 'a','b';
|
||||||
|
update t1 set c = 'aa' where a = 1;
|
||||||
|
--connection con2
|
||||||
|
xa start 'a','c';
|
||||||
|
update t1 set c = 'bb' where a = 2;
|
||||||
|
--connection con1
|
||||||
|
--send update t1 set c = 'bb' where a = 2
|
||||||
|
--connection con2
|
||||||
|
--sleep 1
|
||||||
|
--error ER_LOCK_DEADLOCK
|
||||||
|
update t1 set c = 'aa' where a = 1;
|
||||||
|
select count(*) from t1;
|
||||||
|
### unlike InnoDB, for TokuDB, this does not have an error
|
||||||
|
#--error ER_XA_RBDEADLOCK
|
||||||
|
xa end 'a','c';
|
||||||
|
xa rollback 'a','c';
|
||||||
|
--disconnect con2
|
||||||
|
|
||||||
|
connect (con3,localhost,root,,);
|
||||||
|
--connection con3
|
||||||
|
xa start 'a','c';
|
||||||
|
|
||||||
|
--disconnect con1
|
||||||
|
--disconnect con3
|
||||||
|
--connection default
|
||||||
|
drop table t1;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # BUG#51342 - more xid crashing
|
||||||
|
--echo #
|
||||||
|
CREATE TABLE t1(a INT) ENGINE=TokuDB;
|
||||||
|
XA START 'x';
|
||||||
|
SET SESSION autocommit=0;
|
||||||
|
INSERT INTO t1 VALUES(1);
|
||||||
|
--error ER_XAER_RMFAIL
|
||||||
|
SET SESSION autocommit=1;
|
||||||
|
SELECT @@autocommit;
|
||||||
|
INSERT INTO t1 VALUES(1);
|
||||||
|
XA END 'x';
|
||||||
|
XA COMMIT 'x' ONE PHASE;
|
||||||
|
DROP TABLE t1;
|
||||||
|
SET SESSION autocommit=1;
|
||||||
|
|
||||||
|
--echo End of 5.0 tests
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug#44672: Assertion failed: thd->transaction.xid_state.xid.is_null()
|
||||||
|
#
|
||||||
|
|
||||||
|
xa start 'a';
|
||||||
|
xa end 'a';
|
||||||
|
xa rollback 'a';
|
||||||
|
xa start 'a';
|
||||||
|
xa end 'a';
|
||||||
|
xa rollback 'a';
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug#45548: XA transaction without access to TokuDB tables crashes the server
|
||||||
|
#
|
||||||
|
|
||||||
|
xa start 'a';
|
||||||
|
xa end 'a';
|
||||||
|
xa prepare 'a';
|
||||||
|
xa commit 'a';
|
||||||
|
|
||||||
|
xa start 'a';
|
||||||
|
xa end 'a';
|
||||||
|
xa prepare 'a';
|
||||||
|
xa commit 'a';
|
||||||
|
|
||||||
|
#
|
||||||
|
# BUG#43171 - Assertion failed: thd->transaction.xid_state.xid.is_null()
|
||||||
|
#
|
||||||
|
CREATE TABLE t1(a INT, KEY(a)) ENGINE=TokuDB;
|
||||||
|
INSERT INTO t1 VALUES(1),(2);
|
||||||
|
connect(con1,localhost,root,,);
|
||||||
|
|
||||||
|
# Part 1: Prepare to test XA START after regular transaction deadlock
|
||||||
|
BEGIN;
|
||||||
|
UPDATE t1 SET a=3 WHERE a=1;
|
||||||
|
|
||||||
|
connection default;
|
||||||
|
BEGIN;
|
||||||
|
UPDATE t1 SET a=4 WHERE a=2;
|
||||||
|
|
||||||
|
connection con1;
|
||||||
|
let $conn_id= `SELECT CONNECTION_ID()`;
|
||||||
|
SEND UPDATE t1 SET a=5 WHERE a=2;
|
||||||
|
|
||||||
|
connection default;
|
||||||
|
let $wait_timeout= 2;
|
||||||
|
let $wait_condition= SELECT 1 FROM INFORMATION_SCHEMA.PROCESSLIST
|
||||||
|
WHERE ID=$conn_id AND STATE='Searching rows for update';
|
||||||
|
--source include/wait_condition.inc
|
||||||
|
|
||||||
|
--error ER_LOCK_DEADLOCK
|
||||||
|
UPDATE t1 SET a=5 WHERE a=1;
|
||||||
|
ROLLBACK;
|
||||||
|
|
||||||
|
# Part 2: Prepare to test XA START after XA transaction deadlock
|
||||||
|
connection con1;
|
||||||
|
REAP;
|
||||||
|
ROLLBACK;
|
||||||
|
BEGIN;
|
||||||
|
UPDATE t1 SET a=3 WHERE a=1;
|
||||||
|
|
||||||
|
connection default;
|
||||||
|
XA START 'xid1';
|
||||||
|
UPDATE t1 SET a=4 WHERE a=2;
|
||||||
|
|
||||||
|
connection con1;
|
||||||
|
SEND UPDATE t1 SET a=5 WHERE a=2;
|
||||||
|
|
||||||
|
connection default;
|
||||||
|
let $wait_timeout= 2;
|
||||||
|
let $wait_condition= SELECT 1 FROM INFORMATION_SCHEMA.PROCESSLIST
|
||||||
|
WHERE ID=$conn_id AND STATE='Searching rows for update';
|
||||||
|
--source include/wait_condition.inc
|
||||||
|
|
||||||
|
--error ER_LOCK_DEADLOCK
|
||||||
|
UPDATE t1 SET a=5 WHERE a=1;
|
||||||
|
|
||||||
|
XA END 'xid1';
|
||||||
|
XA ROLLBACK 'xid1';
|
||||||
|
|
||||||
|
XA START 'xid1';
|
||||||
|
XA END 'xid1';
|
||||||
|
XA ROLLBACK 'xid1';
|
||||||
|
|
||||||
|
disconnect con1;
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
# Wait till all disconnects are completed
|
||||||
|
--source include/wait_until_count_sessions.inc
|
||||||
|
|
Loading…
Add table
Reference in a new issue