mirror of
https://github.com/MariaDB/server.git
synced 2025-08-08 11:22:35 +03:00
Merge remote-tracking branch 'github/bb-11.4-release' into bb-11.8-serg
This commit is contained in:
@@ -1,3 +1,6 @@
|
||||
connect disable_purging,localhost,root;
|
||||
START TRANSACTION WITH CONSISTENT SNAPSHOT;
|
||||
connection default;
|
||||
#
|
||||
# MDEV-26642 Weird SELECT view when a record is
|
||||
# modified to the same value by two transactions
|
||||
@@ -53,15 +56,17 @@ DROP TABLE t;
|
||||
# MDEV-26643 Inconsistent behaviors of UPDATE under
|
||||
# READ UNCOMMITTED and READ COMMITTED isolation level
|
||||
#
|
||||
CREATE TABLE t(a INT, b INT) ENGINE=InnoDB;
|
||||
CREATE TABLE t(a INT, b INT) ENGINE=InnoDB STATS_PERSISTENT=0;
|
||||
INSERT INTO t VALUES(NULL, 1), (2, 2);
|
||||
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
|
||||
BEGIN;
|
||||
UPDATE t SET a = 10;
|
||||
connection consistent;
|
||||
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
|
||||
SET DEBUG_SYNC="lock_wait_before_suspend SIGNAL select_blocked";
|
||||
UPDATE t SET b = 20 WHERE a;
|
||||
connection default;
|
||||
SET DEBUG_SYNC="now WAIT_FOR select_blocked";
|
||||
COMMIT;
|
||||
connection consistent;
|
||||
SELECT * FROM t;
|
||||
@@ -75,8 +80,10 @@ BEGIN;
|
||||
UPDATE t SET a = 10;
|
||||
connection consistent;
|
||||
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
|
||||
SET DEBUG_SYNC="lock_wait_before_suspend SIGNAL select_blocked";
|
||||
UPDATE t SET b = 20 WHERE a;
|
||||
connection default;
|
||||
SET DEBUG_SYNC="now WAIT_FOR select_blocked";
|
||||
COMMIT;
|
||||
connection consistent;
|
||||
SELECT * FROM t;
|
||||
@@ -90,8 +97,10 @@ BEGIN;
|
||||
UPDATE t SET a = 10;
|
||||
connection con_weird;
|
||||
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
|
||||
SET DEBUG_SYNC="lock_wait_before_suspend SIGNAL select_blocked";
|
||||
UPDATE t SET b = 20 WHERE a;
|
||||
connection default;
|
||||
SET DEBUG_SYNC="now WAIT_FOR select_blocked";
|
||||
SELECT * FROM t;
|
||||
a b
|
||||
10 1
|
||||
@@ -114,8 +123,10 @@ UPDATE t SET b = 3;
|
||||
connection consistent;
|
||||
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
|
||||
BEGIN;
|
||||
SET DEBUG_SYNC="lock_wait_before_suspend SIGNAL select_blocked";
|
||||
UPDATE t SET b = 2 WHERE a;
|
||||
connection default;
|
||||
SET DEBUG_SYNC="now WAIT_FOR select_blocked";
|
||||
UPDATE t SET a = 1;
|
||||
COMMIT;
|
||||
connection consistent;
|
||||
@@ -129,20 +140,25 @@ DROP TABLE t;
|
||||
#
|
||||
# MDEV-33802 Weird read view after ROLLBACK of other transactions
|
||||
#
|
||||
CREATE TABLE t(a INT PRIMARY KEY, b INT UNIQUE) ENGINE=InnoDB;
|
||||
INSERT INTO t SET a=1;
|
||||
BEGIN;
|
||||
INSERT INTO t SET a=2;
|
||||
CREATE TABLE t(a INT PRIMARY KEY, b INT UNIQUE) ENGINE=InnoDB STATS_PERSISTENT=0;
|
||||
connection consistent;
|
||||
START TRANSACTION WITH CONSISTENT SNAPSHOT;
|
||||
connection default;
|
||||
INSERT INTO t SET a=1;
|
||||
connection consistent;
|
||||
SAVEPOINT sp1;
|
||||
SELECT * FROM t FORCE INDEX (b) FOR UPDATE;
|
||||
ERROR HY000: Record has changed since last read in table 't'
|
||||
SAVEPOINT sp1;
|
||||
connection default;
|
||||
BEGIN;
|
||||
INSERT INTO t SET a=2;
|
||||
connection con_weird;
|
||||
START TRANSACTION WITH CONSISTENT SNAPSHOT;
|
||||
SET DEBUG_SYNC="lock_wait_before_suspend SIGNAL select_blocked";
|
||||
SELECT * FROM t FORCE INDEX (b) FOR UPDATE;
|
||||
connection default;
|
||||
SET DEBUG_SYNC="now WAIT_FOR select_blocked";
|
||||
ROLLBACK;
|
||||
connection con_weird;
|
||||
a b
|
||||
@@ -150,12 +166,74 @@ a b
|
||||
SELECT * FROM t FORCE INDEX (b) FOR UPDATE;
|
||||
a b
|
||||
1 NULL
|
||||
COMMIT;
|
||||
disconnect con_weird;
|
||||
connection consistent;
|
||||
SELECT * FROM t FORCE INDEX (b) FOR UPDATE;
|
||||
a b
|
||||
1 NULL
|
||||
disconnect consistent;
|
||||
COMMIT;
|
||||
connection default;
|
||||
TRUNCATE TABLE t;
|
||||
#
|
||||
# MDEV-36639 innodb_snapshot_isolation=1 gives error for not comitted row changes
|
||||
#
|
||||
INSERT INTO t VALUES (1,1),(2,2);
|
||||
connection default;
|
||||
# Case 1: Transaction A modifies a record, transaction B with snapshot
|
||||
# isolation level is blocked by A, then A is committed.
|
||||
# Expected behaviour: B gets ER_CHECKREAD.
|
||||
BEGIN;
|
||||
UPDATE t SET b=3 WHERE a = 1;
|
||||
connection consistent;
|
||||
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
|
||||
BEGIN;
|
||||
SELECT * FROM t;
|
||||
a b
|
||||
1 1
|
||||
2 2
|
||||
SET DEBUG_SYNC="lock_wait_before_suspend SIGNAL select_blocked";
|
||||
SELECT * FROM t WHERE a=1 FOR UPDATE;
|
||||
connection default;
|
||||
SET DEBUG_SYNC="now WAIT_FOR select_blocked";
|
||||
COMMIT;
|
||||
connection consistent;
|
||||
ERROR HY000: Record has changed since last read in table 't'
|
||||
# Case 2: Transaction A modifies a record, transaction B with snapshot
|
||||
# isolation level is blocked by A, then A is rolled back.
|
||||
# Expected behaviour: B continues execution.
|
||||
connection default;
|
||||
BEGIN;
|
||||
UPDATE t SET b=4 WHERE a=1;
|
||||
connection consistent;
|
||||
BEGIN;
|
||||
SELECT * FROM t;
|
||||
a b
|
||||
2 2
|
||||
1 3
|
||||
SET DEBUG_SYNC="lock_wait_before_suspend SIGNAL select_blocked";
|
||||
SELECT * FROM t WHERE a=1 FOR UPDATE;
|
||||
connection default;
|
||||
SET DEBUG_SYNC="now WAIT_FOR select_blocked";
|
||||
ROLLBACK;
|
||||
connection consistent;
|
||||
a b
|
||||
1 3
|
||||
ROLLBACK;
|
||||
# Case 3: Transaction B with snapshot isolation level started with
|
||||
# consistent snapshot. Transaction A modifies a record and is committed.
|
||||
# Both B tries to read modified by A record.
|
||||
# Expected behavior: B gets ER_CHECKREAD.
|
||||
connection consistent;
|
||||
START TRANSACTION WITH CONSISTENT SNAPSHOT;
|
||||
connection default;
|
||||
UPDATE t SET b=4 WHERE a=1;
|
||||
connection consistent;
|
||||
SELECT * FROM t WHERE a=1 FOR UPDATE;
|
||||
ERROR HY000: Record has changed since last read in table 't'
|
||||
disconnect consistent;
|
||||
disconnect disable_purging;
|
||||
connection default;
|
||||
SET DEBUG_SYNC="RESET";
|
||||
DROP TABLE t;
|
||||
# End of 10.6 tests
|
||||
|
Reference in New Issue
Block a user