--source include/have_rocksdb.inc --enable_connect_log # Save the initial number of concurrent sessions --source include/count_sessions.inc --disable_warnings DROP TABLE IF EXISTS t1; --enable_warnings connect (con1,localhost,root,,); connect (con2,localhost,root,,); #1. Using all primary key columns, with equal conditions connection con1; CREATE TABLE t (id1 int, id2 int, id3 int, value int, PRIMARY KEY (id1, id2, id3)) ENGINE=RocksDB; #1.1 SELECT FOR UPDATE SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ; BEGIN; SELECT * FROM t WHERE id1=1 AND id2=1 AND id3=1 FOR UPDATE; connection con2; SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ; BEGIN; --error ER_LOCK_WAIT_TIMEOUT SELECT * FROM t WHERE id1=1 AND id2=1 AND id3=1 FOR UPDATE; SELECT * FROM t WHERE id1=1 AND id2=1 AND id3=2 FOR UPDATE; #1.2 UPDATE connection con1; ROLLBACK; BEGIN; UPDATE t SET value=value+100 WHERE id1=1 AND id2=1 AND id3=1; connection con2; ROLLBACK; BEGIN; --error ER_LOCK_WAIT_TIMEOUT UPDATE t SET value=value+100 WHERE id1=1 AND id2=1 AND id3=1; UPDATE t SET value=value+100 WHERE id1=1 AND id2=0 AND id3=1; #1.3 DELETE connection con1; ROLLBACK; BEGIN; DELETE FROM t WHERE id1=1 AND id2=1 AND id3=1; connection con2; ROLLBACK; BEGIN; --error ER_LOCK_WAIT_TIMEOUT DELETE FROM t WHERE id1=1 AND id2=1 AND id3=1; DELETE FROM t WHERE id1=1 AND id2=1 AND id3=0; --disable_parsing # # The following is commented out because RocksDB's Transaction API doesn't # "support" READ COMMITED, in particular, it doesn't release row locks # after each statement. (MyRocks is able to request a new snapshot for # every statement, but this won't free the locks. TODO: Is the behavior # that is tested below really needed?) # connection con1; ROLLBACK; SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED; BEGIN; SELECT * FROM t WHERE id1=1 AND id2=1 AND id3=1 FOR UPDATE; connection con2; ROLLBACK; SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED; BEGIN; SELECT * FROM t WHERE id1=1 AND id2=1 AND id3=1 FOR UPDATE; SELECT * FROM t WHERE id1=1 AND id2=1 AND id3=2 FOR UPDATE; connection con1; ROLLBACK; BEGIN; UPDATE t SET value=value+100 WHERE id1=1 AND id2=1 AND id3=1; connection con2; ROLLBACK; BEGIN; UPDATE t SET value=value+100 WHERE id1=1 AND id2=1 AND id3=1; UPDATE t SET value=value+100 WHERE id1=1 AND id2=0 AND id3=1; connection con1; ROLLBACK; BEGIN; DELETE FROM t WHERE id1=1 AND id2=1 AND id3=1; connection con2; ROLLBACK; BEGIN; DELETE FROM t WHERE id1=1 AND id2=1 AND id3=1; DELETE FROM t WHERE id1=1 AND id2=1 AND id3=0; connection con1; ROLLBACK; connection con2; ROLLBACK; --enable_parsing connection default; disconnect con1; disconnect con2; DROP TABLE t;