diff --git a/mysql-test/main/concurrent_innodb_unsafelog.result b/mysql-test/main/concurrent_innodb_unsafelog.result index b87a420b6c6..bd199f4f613 100644 --- a/mysql-test/main/concurrent_innodb_unsafelog.result +++ b/mysql-test/main/concurrent_innodb_unsafelog.result @@ -1,5 +1,7 @@ SET @save_timeout = @@GLOBAL.innodb_lock_wait_timeout; SET GLOBAL innodb_lock_wait_timeout = 1; +SET @save_snapshot_isolation = @@GLOBAL.innodb_snapshot_isolation; +SET GLOBAL innodb_snapshot_isolation = OFF; SET @save_isolation = @@GLOBAL.transaction_isolation; SET GLOBAL TRANSACTION ISOLATION LEVEL READ COMMITTED; connection default; @@ -792,3 +794,4 @@ drop user mysqltest@localhost; SET SQL_MODE=default; SET GLOBAL innodb_lock_wait_timeout = @save_timeout; SET GLOBAL transaction_isolation = @save_isolation; +SET GLOBAL innodb_snapshot_isolation = @save_snapshot_isolation; diff --git a/mysql-test/main/concurrent_innodb_unsafelog.test b/mysql-test/main/concurrent_innodb_unsafelog.test index 400d7ef8d87..f80e3f2dc00 100644 --- a/mysql-test/main/concurrent_innodb_unsafelog.test +++ b/mysql-test/main/concurrent_innodb_unsafelog.test @@ -18,6 +18,8 @@ let $engine_type= InnoDB; SET @save_timeout = @@GLOBAL.innodb_lock_wait_timeout; SET GLOBAL innodb_lock_wait_timeout = 1; +SET @save_snapshot_isolation = @@GLOBAL.innodb_snapshot_isolation; +SET GLOBAL innodb_snapshot_isolation = OFF; SET @save_isolation = @@GLOBAL.transaction_isolation; SET GLOBAL TRANSACTION ISOLATION LEVEL READ COMMITTED; --disable_service_connection @@ -25,3 +27,4 @@ SET GLOBAL TRANSACTION ISOLATION LEVEL READ COMMITTED; --enable_service_connection SET GLOBAL innodb_lock_wait_timeout = @save_timeout; SET GLOBAL transaction_isolation = @save_isolation; +SET GLOBAL innodb_snapshot_isolation = @save_snapshot_isolation; diff --git a/mysql-test/main/partition_innodb_semi_consistent.result b/mysql-test/main/partition_innodb_semi_consistent.result index 208bd0214f7..4401cdf78b8 100644 --- a/mysql-test/main/partition_innodb_semi_consistent.result +++ b/mysql-test/main/partition_innodb_semi_consistent.result @@ -17,6 +17,7 @@ a 3 connection b; set binlog_format=mixed; +set innodb_snapshot_isolation=OFF; set session transaction isolation level repeatable read; set autocommit=0; update t1 set a=10 where a=5; diff --git a/mysql-test/main/partition_innodb_semi_consistent.test b/mysql-test/main/partition_innodb_semi_consistent.test index c1a516b255f..c15956df966 100644 --- a/mysql-test/main/partition_innodb_semi_consistent.test +++ b/mysql-test/main/partition_innodb_semi_consistent.test @@ -29,6 +29,7 @@ set autocommit=0; select * from t1 where a=3 lock in share mode; connection b; set binlog_format=mixed; +set innodb_snapshot_isolation=OFF; set session transaction isolation level repeatable read; set autocommit=0; -- error ER_LOCK_WAIT_TIMEOUT diff --git a/mysql-test/suite/galera_3nodes_sr/r/galera_sr_threeway_split.result b/mysql-test/suite/galera_3nodes_sr/r/galera_sr_threeway_split.result index 1a50bace279..d03f297db36 100644 --- a/mysql-test/suite/galera_3nodes_sr/r/galera_sr_threeway_split.result +++ b/mysql-test/suite/galera_3nodes_sr/r/galera_sr_threeway_split.result @@ -77,6 +77,7 @@ COUNT(DISTINCT node_uuid) = 1 wsrep_gcomm_uuid_match 1 connection node_1; +SET innodb_snapshot_isolation=OFF; INSERT INTO t1 VALUES (30); INSERT INTO t1 VALUES (31); INSERT INTO t1 VALUES (32); diff --git a/mysql-test/suite/galera_3nodes_sr/t/galera_sr_threeway_split.test b/mysql-test/suite/galera_3nodes_sr/t/galera_sr_threeway_split.test index 62122fe4292..9d961171d93 100644 --- a/mysql-test/suite/galera_3nodes_sr/t/galera_sr_threeway_split.test +++ b/mysql-test/suite/galera_3nodes_sr/t/galera_sr_threeway_split.test @@ -138,6 +138,7 @@ SELECT COUNT(DISTINCT node_uuid) = 1 FROM mysql.wsrep_streaming_log; # --connection node_1 +SET innodb_snapshot_isolation=OFF; INSERT INTO t1 VALUES (30); INSERT INTO t1 VALUES (31); INSERT INTO t1 VALUES (32); diff --git a/mysql-test/suite/galera_sr/r/GCF-572.result b/mysql-test/suite/galera_sr/r/GCF-572.result index 41ae2378a3f..5ae650af6df 100644 --- a/mysql-test/suite/galera_sr/r/GCF-572.result +++ b/mysql-test/suite/galera_sr/r/GCF-572.result @@ -22,6 +22,7 @@ DROP TABLE t1; DROP TABLE t2; CREATE TABLE t1 (f1 INTEGER PRIMARY KEY AUTO_INCREMENT, f2 CHAR(10)) ENGINE=InnoDB; connection node_1; +SET innodb_snapshot_isolation = OFF; SET SESSION wsrep_trx_fragment_size = 1; START TRANSACTION; INSERT INTO t1 VALUES (1, 'node1'); diff --git a/mysql-test/suite/galera_sr/r/galera_sr_cc_slave.result b/mysql-test/suite/galera_sr/r/galera_sr_cc_slave.result index d439380e2ce..24df2af6784 100644 --- a/mysql-test/suite/galera_sr/r/galera_sr_cc_slave.result +++ b/mysql-test/suite/galera_sr/r/galera_sr_cc_slave.result @@ -31,6 +31,7 @@ SET GLOBAL wsrep_cluster_address = ''; SET SESSION wsrep_sync_wait = 0; SET SESSION wsrep_sync_wait = default; connection node_1; +SET innodb_snapshot_isolation=OFF; INSERT INTO t1 VALUES (6); INSERT INTO t1 VALUES (7); INSERT INTO t1 VALUES (8); diff --git a/mysql-test/suite/galera_sr/r/galera_sr_dupkey_error.result b/mysql-test/suite/galera_sr/r/galera_sr_dupkey_error.result index ad843c7c2c6..11324e0c8dd 100644 --- a/mysql-test/suite/galera_sr/r/galera_sr_dupkey_error.result +++ b/mysql-test/suite/galera_sr/r/galera_sr_dupkey_error.result @@ -24,6 +24,7 @@ SELECT COUNT(*) = 0 FROM mysql.wsrep_streaming_log; COUNT(*) = 0 1 connection node_1; +SET innodb_snapshot_isolation=OFF; INSERT INTO t1 VALUES (REPEAT('d', 512)); INSERT INTO t1 VALUES (REPEAT('e', 512)); INSERT INTO t1 VALUES (REPEAT('f', 512)); diff --git a/mysql-test/suite/galera_sr/t/GCF-572.test b/mysql-test/suite/galera_sr/t/GCF-572.test index be77451a332..7a18920e5da 100644 --- a/mysql-test/suite/galera_sr/t/GCF-572.test +++ b/mysql-test/suite/galera_sr/t/GCF-572.test @@ -39,6 +39,7 @@ DROP TABLE t2; # CREATE TABLE t1 (f1 INTEGER PRIMARY KEY AUTO_INCREMENT, f2 CHAR(10)) ENGINE=InnoDB; --connection node_1 +SET innodb_snapshot_isolation = OFF; SET SESSION wsrep_trx_fragment_size = 1; START TRANSACTION; INSERT INTO t1 VALUES (1, 'node1'); diff --git a/mysql-test/suite/galera_sr/t/galera_sr_cc_slave.test b/mysql-test/suite/galera_sr/t/galera_sr_cc_slave.test index 7ba0f253b4a..b57bcf8f3cf 100644 --- a/mysql-test/suite/galera_sr/t/galera_sr_cc_slave.test +++ b/mysql-test/suite/galera_sr/t/galera_sr_cc_slave.test @@ -58,6 +58,7 @@ SET SESSION wsrep_sync_wait = default; # Continue generating events in the transaction +SET innodb_snapshot_isolation=OFF; INSERT INTO t1 VALUES (6); INSERT INTO t1 VALUES (7); INSERT INTO t1 VALUES (8); diff --git a/mysql-test/suite/galera_sr/t/galera_sr_dupkey_error.test b/mysql-test/suite/galera_sr/t/galera_sr_dupkey_error.test index 146da425d88..880e456f3a9 100644 --- a/mysql-test/suite/galera_sr/t/galera_sr_dupkey_error.test +++ b/mysql-test/suite/galera_sr/t/galera_sr_dupkey_error.test @@ -38,6 +38,7 @@ SELECT COUNT(*) = 0 FROM mysql.wsrep_streaming_log; # Confirm that the transaction can be restarted on either node --connection node_1 +SET innodb_snapshot_isolation=OFF; INSERT INTO t1 VALUES (REPEAT('d', 512)); INSERT INTO t1 VALUES (REPEAT('e', 512)); INSERT INTO t1 VALUES (REPEAT('f', 512)); diff --git a/mysql-test/suite/innodb/r/deadlock_victim_race.result b/mysql-test/suite/innodb/r/deadlock_victim_race.result index 061edc775f0..1a26d6bc803 100644 --- a/mysql-test/suite/innodb/r/deadlock_victim_race.result +++ b/mysql-test/suite/innodb/r/deadlock_victim_race.result @@ -10,6 +10,7 @@ SELECT * FROM t WHERE a = 20 FOR UPDATE; a b 20 20 connect con_2,localhost,root,,; +SET innodb_snapshot_isolation=OFF; SET TRANSACTION ISOLATION LEVEL READ COMMITTED; BEGIN; SET DEBUG_SYNC = 'lock_trx_handle_wait_enter SIGNAL upd_locked WAIT_FOR upd_cont EXECUTE 2'; diff --git a/mysql-test/suite/innodb/r/deadlock_wait_lock_race.result b/mysql-test/suite/innodb/r/deadlock_wait_lock_race.result index 874f5af47d0..36d0f078dc6 100644 --- a/mysql-test/suite/innodb/r/deadlock_wait_lock_race.result +++ b/mysql-test/suite/innodb/r/deadlock_wait_lock_race.result @@ -8,6 +8,7 @@ SELECT * FROM t WHERE a = 20 FOR UPDATE; a b 20 20 connect con_2,localhost,root,,; +SET innodb_snapshot_isolation=OFF; SET TRANSACTION ISOLATION LEVEL READ COMMITTED; BEGIN; SET DEBUG_SYNC = 'lock_trx_handle_wait_before_unlocked_wait_lock_check SIGNAL upd_locked WAIT_FOR upd_cont'; diff --git a/mysql-test/suite/innodb/r/deadlock_wait_thr_race.result b/mysql-test/suite/innodb/r/deadlock_wait_thr_race.result index 6992a447c07..8974d9f140e 100644 --- a/mysql-test/suite/innodb/r/deadlock_wait_thr_race.result +++ b/mysql-test/suite/innodb/r/deadlock_wait_thr_race.result @@ -8,6 +8,7 @@ SELECT * FROM t WHERE a = 20 FOR UPDATE; a b 20 20 connect con_2,localhost,root,,; +SET innodb_snapshot_isolation=OFF; SET TRANSACTION ISOLATION LEVEL READ COMMITTED; SET DEBUG_SYNC = 'lock_trx_handle_wait_enter SIGNAL upd_locked WAIT_FOR upd_cont'; SET DEBUG_SYNC = 'trx_t_release_locks_enter SIGNAL sel_cont WAIT_FOR upd_cont_2'; diff --git a/mysql-test/suite/innodb/r/innodb-isolation.result b/mysql-test/suite/innodb/r/innodb-isolation.result index 8ff2c7f12e9..c3ba273797b 100644 --- a/mysql-test/suite/innodb/r/innodb-isolation.result +++ b/mysql-test/suite/innodb/r/innodb-isolation.result @@ -80,6 +80,7 @@ COUNT(*) # # Do some DML in the default connection and leave the transaction pending. # +SET innodb_snapshot_isolation=OFF; SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ; BEGIN; UPDATE t1 SET c2 = c2 * 3 WHERE c1 = 1; @@ -140,6 +141,7 @@ COUNT(*) # Connection 1 REPEATABLE READ # connect con1,localhost,root,,; +SET innodb_snapshot_isolation=OFF; SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ; BEGIN; ########## innodb_isolation_selects.inc ########## diff --git a/mysql-test/suite/innodb/r/innodb-semi-consistent.result b/mysql-test/suite/innodb/r/innodb-semi-consistent.result index f4541b589f7..e3dd46cb69e 100644 --- a/mysql-test/suite/innodb/r/innodb-semi-consistent.result +++ b/mysql-test/suite/innodb/r/innodb-semi-consistent.result @@ -20,6 +20,7 @@ commit; connection a; commit; connection b; +set innodb_snapshot_isolation=off; set session transaction isolation level read committed; update t1 set a=10 where a=5; connection a; diff --git a/mysql-test/suite/innodb/r/innodb_bug14007649.result b/mysql-test/suite/innodb/r/innodb_bug14007649.result index 0f91096a42d..b03453257ec 100644 --- a/mysql-test/suite/innodb/r/innodb_bug14007649.result +++ b/mysql-test/suite/innodb/r/innodb_bug14007649.result @@ -17,6 +17,7 @@ insert into `t1` (rowid, f1, f2) values (1, 1, 10), (2, 1, NULL); connect a,localhost,root,,; connect b,localhost,root,,; connection a; +set innodb_snapshot_isolation=OFF; start transaction with consistent snapshot; connection b; start transaction; diff --git a/mysql-test/suite/innodb/r/lock_isolation.result b/mysql-test/suite/innodb/r/lock_isolation.result index 1ddb9deb24c..5045ddaadde 100644 --- a/mysql-test/suite/innodb/r/lock_isolation.result +++ b/mysql-test/suite/innodb/r/lock_isolation.result @@ -11,6 +11,7 @@ a b 1 1 2 2 connect con_weird,localhost,root; +SET innodb_snapshot_isolation=OFF; BEGIN; SELECT * FROM t; a b diff --git a/mysql-test/suite/innodb/t/deadlock_victim_race.test b/mysql-test/suite/innodb/t/deadlock_victim_race.test index b9a442fc5b9..91ad4230d89 100644 --- a/mysql-test/suite/innodb/t/deadlock_victim_race.test +++ b/mysql-test/suite/innodb/t/deadlock_victim_race.test @@ -27,6 +27,7 @@ SELECT * FROM t WHERE a = 20 FOR UPDATE; # trx 1 --connect(con_2,localhost,root,,) +SET innodb_snapshot_isolation=OFF; # RC is neccessary to do semi-consistent read SET TRANSACTION ISOLATION LEVEL READ COMMITTED; BEGIN; # trx 2 diff --git a/mysql-test/suite/innodb/t/deadlock_wait_lock_race.test b/mysql-test/suite/innodb/t/deadlock_wait_lock_race.test index 79a62b098c9..23c485e5cca 100644 --- a/mysql-test/suite/innodb/t/deadlock_wait_lock_race.test +++ b/mysql-test/suite/innodb/t/deadlock_wait_lock_race.test @@ -34,6 +34,7 @@ SELECT * FROM t WHERE a = 20 FOR UPDATE; --connect(con_2,localhost,root,,) # RC is necessary to do semi-consistent read +SET innodb_snapshot_isolation=OFF; SET TRANSACTION ISOLATION LEVEL READ COMMITTED; BEGIN; # trx 2 # The first time it will be hit on trying to lock (20,20), the second hit diff --git a/mysql-test/suite/innodb/t/deadlock_wait_thr_race.test b/mysql-test/suite/innodb/t/deadlock_wait_thr_race.test index 42576f35baf..8300bb81362 100644 --- a/mysql-test/suite/innodb/t/deadlock_wait_thr_race.test +++ b/mysql-test/suite/innodb/t/deadlock_wait_thr_race.test @@ -33,6 +33,7 @@ UPDATE t2 SET a = a + 100; SELECT * FROM t WHERE a = 20 FOR UPDATE; --connect(con_2,localhost,root,,) +SET innodb_snapshot_isolation=OFF; # RC is necessary to do semi-consistent read SET TRANSACTION ISOLATION LEVEL READ COMMITTED; # It will be hit on trying to lock (20,20). diff --git a/mysql-test/suite/innodb/t/innodb-isolation.test b/mysql-test/suite/innodb/t/innodb-isolation.test index 6d347dc71af..2e5221c8746 100644 --- a/mysql-test/suite/innodb/t/innodb-isolation.test +++ b/mysql-test/suite/innodb/t/innodb-isolation.test @@ -45,6 +45,7 @@ INSERT INTO t2 (SELECT * FROM t1); --echo # --echo # Do some DML in the default connection and leave the transaction pending. --echo # +SET innodb_snapshot_isolation=OFF; SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ; BEGIN; --enable_info @@ -59,6 +60,7 @@ DELETE FROM t1 WHERE c1 = 6; --echo # Connection 1 REPEATABLE READ --echo # connect (con1,localhost,root,,); +SET innodb_snapshot_isolation=OFF; SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ; BEGIN; --source suite/innodb/include/innodb_isolation_selects.inc diff --git a/mysql-test/suite/innodb/t/innodb-semi-consistent.test b/mysql-test/suite/innodb/t/innodb-semi-consistent.test index 2551db99cf3..b77adaf1cd0 100644 --- a/mysql-test/suite/innodb/t/innodb-semi-consistent.test +++ b/mysql-test/suite/innodb/t/innodb-semi-consistent.test @@ -28,6 +28,7 @@ connection a; commit; connection b; # perform a semi-consisent read (and unlock non-matching rows) +set innodb_snapshot_isolation=off; set session transaction isolation level read committed; update t1 set a=10 where a=5; connection a; diff --git a/mysql-test/suite/innodb/t/innodb_bug14007649.test b/mysql-test/suite/innodb/t/innodb_bug14007649.test index 9b332b9b08b..7bb4fed69c9 100644 --- a/mysql-test/suite/innodb/t/innodb_bug14007649.test +++ b/mysql-test/suite/innodb/t/innodb_bug14007649.test @@ -15,6 +15,7 @@ connect (a,localhost,root,,); connect (b,localhost,root,,); connection a; +set innodb_snapshot_isolation=OFF; start transaction with consistent snapshot; connection b; diff --git a/mysql-test/suite/innodb/t/lock_isolation.test b/mysql-test/suite/innodb/t/lock_isolation.test index 4e44cea8c2e..8049b76ae9d 100644 --- a/mysql-test/suite/innodb/t/lock_isolation.test +++ b/mysql-test/suite/innodb/t/lock_isolation.test @@ -10,6 +10,7 @@ CREATE TABLE t(a INT PRIMARY KEY, b INT) ENGINE=InnoDB; INSERT INTO t VALUES (1,1),(2,2); BEGIN; SELECT * FROM t LOCK IN SHARE MODE; --connect con_weird,localhost,root +SET innodb_snapshot_isolation=OFF; BEGIN; SELECT * FROM t; --connect consistent,localhost,root diff --git a/mysql-test/suite/sys_vars/r/sysvars_innodb.result b/mysql-test/suite/sys_vars/r/sysvars_innodb.result index 871043d25e6..97f47f98d1f 100644 --- a/mysql-test/suite/sys_vars/r/sysvars_innodb.result +++ b/mysql-test/suite/sys_vars/r/sysvars_innodb.result @@ -1353,8 +1353,8 @@ ENUM_VALUE_LIST NULL READ_ONLY NO COMMAND_LINE_ARGUMENT OPTIONAL VARIABLE_NAME INNODB_SNAPSHOT_ISOLATION -SESSION_VALUE OFF -DEFAULT_VALUE OFF +SESSION_VALUE ON +DEFAULT_VALUE ON VARIABLE_SCOPE SESSION VARIABLE_TYPE BOOLEAN VARIABLE_COMMENT Use snapshot isolation (write-write conflict detection) diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc index 4bfaedf2006..c7f5fed4354 100644 --- a/storage/innobase/handler/ha_innodb.cc +++ b/storage/innobase/handler/ha_innodb.cc @@ -871,7 +871,7 @@ static MYSQL_THDVAR_BOOL(table_locks, PLUGIN_VAR_OPCMDARG, static MYSQL_THDVAR_BOOL(snapshot_isolation, PLUGIN_VAR_OPCMDARG, "Use snapshot isolation (write-write conflict detection)", - NULL, NULL, FALSE); + NULL, NULL, TRUE); static MYSQL_THDVAR_BOOL(strict_mode, PLUGIN_VAR_OPCMDARG, "Use strict mode when evaluating create options",