mirror of
https://github.com/MariaDB/server.git
synced 2025-01-31 02:51:44 +01:00
033e29b6a1
trx_t::commit_in_memory(): Do not initiate a redo log write if the transaction has no visible effect. If anything for this transaction had been made durable, crash recovery will roll back the transaction just fine even if the end of ROLLBACK is not durably written. Rollbacks of transactions that are associated with XA identifiers (possibly internally via the binlog) will always be persisted. The test rpl.rpl_gtid_crash covers this.
44 lines
1.4 KiB
Text
44 lines
1.4 KiB
Text
--source include/have_innodb.inc
|
|
# need to restart server
|
|
--source include/not_embedded.inc
|
|
|
|
--connect(con1, localhost, root)
|
|
CREATE TABLE t(a INT PRIMARY KEY) ENGINE=InnoDB;
|
|
INSERT INTO t VALUES(1);
|
|
BEGIN;
|
|
# Generate insert_undo log.
|
|
INSERT INTO t VALUES(2);
|
|
# Generate update_undo log.
|
|
DELETE FROM t WHERE a=2;
|
|
--connection default
|
|
--echo # Normal MariaDB shutdown would roll back the above transaction.
|
|
--echo # We want the transaction to remain open, so we will kill the server
|
|
--echo # after ensuring that any non-transactional files are clean.
|
|
FLUSH TABLES;
|
|
--echo # Ensure that the above incomplete transaction becomes durable.
|
|
SET GLOBAL innodb_flush_log_at_trx_commit=1;
|
|
BEGIN;
|
|
INSERT INTO t VALUES(0);
|
|
DELETE FROM t WHERE a=0;
|
|
COMMIT;
|
|
--let $restart_parameters= --innodb-force-recovery=3
|
|
--let $shutdown_timeout= 0
|
|
--source include/restart_mysqld.inc
|
|
--let $shutdown_timeout= 30
|
|
--disconnect con1
|
|
SELECT * FROM t;
|
|
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
|
|
SELECT * FROM t;
|
|
UPDATE t SET a=3 WHERE a=1;
|
|
--let $restart_parameters= --innodb-read-only
|
|
--source include/restart_mysqld.inc
|
|
--echo # Starting with MariaDB 10.2, innodb_read_only implies READ UNCOMMITTED.
|
|
--echo # In earlier versions, this would return the last committed version
|
|
--echo # (empty table)!
|
|
SELECT * FROM t;
|
|
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
|
|
SELECT * FROM t;
|
|
--let $restart_parameters=
|
|
--source include/restart_mysqld.inc
|
|
SELECT * FROM t;
|
|
DROP TABLE t;
|