-
Notifications
You must be signed in to change notification settings - Fork 1.7k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
8 changed files
with
133 additions
and
8 deletions.
There are no files selected for viewing
43 changes: 43 additions & 0 deletions
43
mysql-test/suite/innodb/r/read_only_recover_committed.result
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
CREATE TABLE t(a INT PRIMARY KEY) ENGINE=InnoDB; | ||
INSERT INTO t VALUES(1); | ||
BEGIN; | ||
INSERT INTO t VALUES(2); | ||
DELETE FROM t WHERE a=2; | ||
# Normal MariaDB shutdown would roll back the above transaction. | ||
# We want the transaction to remain open, so we will kill the server | ||
# after ensuring that any non-transactional files are clean. | ||
FLUSH TABLES; | ||
# Create another transaction that will be recovered as COMMITTED. | ||
BEGIN; | ||
SET DEBUG_SYNC='after_trx_committed_in_memory SIGNAL committed WAIT_FOR ever'; | ||
COMMIT; | ||
SET DEBUG_SYNC='now WAIT_FOR committed'; | ||
# Ensure that the above incomplete transactions become durable. | ||
SET GLOBAL innodb_flush_log_at_trx_commit=1; | ||
BEGIN; | ||
INSERT INTO t VALUES(-10000); | ||
ROLLBACK; | ||
SELECT * FROM t; | ||
a | ||
1 | ||
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; | ||
SELECT * FROM t; | ||
a | ||
1 | ||
UPDATE t SET a=3 WHERE a=1; | ||
ERROR HY000: Table 't' is read only | ||
# Starting with MariaDB 10.2, innodb_read_only implies READ UNCOMMITTED. | ||
# In earlier versions, this would return the last committed version | ||
# (empty table)! | ||
SELECT * FROM t; | ||
a | ||
1 | ||
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; | ||
SELECT * FROM t; | ||
a | ||
1 | ||
SELECT * FROM t; | ||
a | ||
1 | ||
DROP TABLE t; | ||
NOT FOUND /Rolled back recovered transaction [^0]/ in mysqld.1.err |
68 changes: 68 additions & 0 deletions
68
mysql-test/suite/innodb/t/read_only_recover_committed.test
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,68 @@ | ||
--source include/have_innodb.inc | ||
--source include/have_debug.inc | ||
--source include/have_debug_sync.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; | ||
--connect(con2, localhost, root) | ||
--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 # Create another transaction that will be recovered as COMMITTED. | ||
BEGIN; | ||
# Generate multiple pages of both insert_undo and update_undo, so that | ||
# the state TRX_UNDO_CACHE will not be chosen. | ||
--disable_query_log | ||
let $n= 10000; | ||
while ($n) { | ||
dec $n; | ||
eval INSERT INTO t VALUES(-$n); | ||
eval DELETE FROM t WHERE a=-$n; | ||
} | ||
--enable_query_log | ||
SET DEBUG_SYNC='after_trx_committed_in_memory SIGNAL committed WAIT_FOR ever'; | ||
send COMMIT; | ||
|
||
connection default; | ||
SET DEBUG_SYNC='now WAIT_FOR committed'; | ||
--echo # Ensure that the above incomplete transactions become durable. | ||
SET GLOBAL innodb_flush_log_at_trx_commit=1; | ||
BEGIN; | ||
INSERT INTO t VALUES(-10000); | ||
ROLLBACK; | ||
--let $restart_parameters= --innodb-force-recovery=3 | ||
--let $shutdown_timeout= 0 | ||
--source include/restart_mysqld.inc | ||
--let $shutdown_timeout= 30 | ||
--disconnect con1 | ||
--disconnect con2 | ||
SELECT * FROM t; | ||
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; | ||
SELECT * FROM t; | ||
# refused on MySQL 5.6, MariaDB 10.0, 10.1, but not MariaDB 10.2+ | ||
--error ER_OPEN_AS_READONLY | ||
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; | ||
let SEARCH_FILE= $MYSQLTEST_VARDIR/log/mysqld.1.err; | ||
--let SEARCH_PATTERN= Rolled back recovered transaction [^0] | ||
--source include/search_pattern_in_file.inc |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters