1--source include/have_rocksdb.inc 2--source include/have_debug_sync.inc 3 4--source include/count_sessions.inc 5 6connect (con, localhost, root,,); 7connection default; 8eval SET SESSION TRANSACTION ISOLATION LEVEL $isolation_level; 9 10SET debug_sync='RESET'; 11 12eval CREATE TABLE t1 (pk INT PRIMARY KEY, a INT, index a(a)); 13INSERT INTO t1 VALUES(1,1), (2,2), (3,3), (4,4), (5,5); 14 15# This will cause the SELECT to block after finding the first row, but 16# before locking and reading it. 17--echo --SK first row delete 18connection con; 19eval SET SESSION TRANSACTION ISOLATION LEVEL $isolation_level; 20SET debug_sync='rocksdb_concurrent_delete_sk SIGNAL parked WAIT_FOR go'; 21send_eval SELECT a FROM t1 FORCE INDEX(a) FOR UPDATE; 22 23# While that connection is waiting, delete the first row (the one con 24# is about to lock and read 25connection default; 26SET debug_sync='now WAIT_FOR parked'; 27eval DELETE FROM t1 WHERE pk = 1; 28 29# Signal the waiting select to continue 30SET debug_sync='now SIGNAL go'; 31 32connection con; 33reap; 34 35# Deleting a middle row 36--echo --SK middle row delete 37SET debug_sync='rocksdb_concurrent_delete_sk SIGNAL parked WAIT_FOR go'; 38send_eval SELECT a FROM t1 FORCE INDEX(a) FOR UPDATE; 39 40connection default; 41SET debug_sync='now WAIT_FOR parked'; 42eval DELETE FROM t1 WHERE pk = 3; 43SET debug_sync='now SIGNAL go'; 44 45connection con; 46if ($isolation_level == "REPEATABLE READ") 47{ 48 --error ER_LOCK_DEADLOCK 49 reap; 50} 51if ($isolation_level == "READ COMMITTED") 52{ 53 reap; 54} 55 56# Deleting the end row 57--echo --SK end row delete 58SET debug_sync='rocksdb_concurrent_delete_sk SIGNAL parked WAIT_FOR go'; 59send_eval SELECT a FROM t1 FORCE INDEX(a) FOR UPDATE; 60 61connection default; 62SET debug_sync='now WAIT_FOR parked'; 63eval DELETE FROM t1 WHERE pk = 5; 64SET debug_sync='now SIGNAL go'; 65 66connection con; 67if ($isolation_level == "REPEATABLE READ") 68{ 69 --error ER_LOCK_DEADLOCK 70 reap; 71} 72if ($isolation_level == "READ COMMITTED") 73{ 74 reap; 75} 76 77# Cleanup 78connection default; 79disconnect con; 80set debug_sync='RESET'; 81drop table t1; 82--source include/wait_until_count_sessions.inc 83