mirror of
https://github.com/MariaDB/server.git
synced 2025-07-18 23:03:28 +03:00
1. main.merge fails with errno 13 in copy_file(). The reason for the error is that copy_file tries to create a file with the same name as recently deleted one, and there is still an open handle for the deleted file. To fix, use my_delete_allow_opened() for MTR's delete_file. On Windows, this renames file to unique name prior to deletion, and prevents EACCES errors for files opened with FILE_SHARE_DELETE. 2. innodb_bug59641 generates warnings, after server was killed and restarted in the test case. The warnings are about test_suppression table (needs to be repaired, as it that was written just prior to the crash) Fixed by using FLUSH TABLES after populating warning suppression table.
70 lines
1.7 KiB
Plaintext
70 lines
1.7 KiB
Plaintext
# Bug #59641 Prepared XA transaction causes shutdown hang after a crash
|
|
|
|
-- source include/not_embedded.inc
|
|
-- source include/have_innodb_plugin.inc
|
|
|
|
# Close tables used by other tests (to not get crashed myisam tables)
|
|
flush tables;
|
|
|
|
CREATE TABLE t(a INT PRIMARY KEY, b INT)ENGINE=InnoDB;
|
|
INSERT INTO t VALUES(2,2),(4,4),(8,8),(16,16),(32,32);
|
|
COMMIT;
|
|
XA START '123';
|
|
INSERT INTO t VALUES(1,1);
|
|
XA END '123';
|
|
XA PREPARE '123';
|
|
|
|
CONNECT (con1,localhost,root,,);
|
|
CONNECTION con1;
|
|
|
|
XA START '456';
|
|
INSERT INTO t VALUES(3,47),(5,67);
|
|
UPDATE t SET b=2*b WHERE a BETWEEN 5 AND 8;
|
|
XA END '456';
|
|
XA PREPARE '456';
|
|
|
|
CONNECT (con2,localhost,root,,);
|
|
CONNECTION con2;
|
|
|
|
XA START '789';
|
|
UPDATE t SET b=4*a WHERE a=32;
|
|
XA END '789';
|
|
XA PREPARE '789';
|
|
|
|
# The server would issue this warning on restart.
|
|
call mtr.add_suppression("Found 3 prepared XA transactions");
|
|
FLUSH TABLES;
|
|
# Kill the server without sending a shutdown command
|
|
-- exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
|
|
-- shutdown_server 0
|
|
-- source include/wait_until_disconnected.inc
|
|
|
|
# Restart the server.
|
|
-- exec echo "restart" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
|
|
-- enable_reconnect
|
|
-- source include/wait_until_connected_again.inc
|
|
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
|
|
SELECT * FROM t;
|
|
COMMIT;
|
|
|
|
# Shut down the server. This would hang because of the bug.
|
|
-- exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
|
|
-- shutdown_server
|
|
-- source include/wait_until_disconnected.inc
|
|
|
|
# Restart the server.
|
|
-- exec echo "restart" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
|
|
-- enable_reconnect
|
|
-- source include/wait_until_connected_again.inc
|
|
|
|
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
|
|
SELECT * FROM t;
|
|
COMMIT;
|
|
XA RECOVER;
|
|
XA ROLLBACK '123';
|
|
XA ROLLBACK '456';
|
|
XA COMMIT '789';
|
|
SELECT * FROM t;
|
|
|
|
DROP TABLE t;
|