summaryrefslogtreecommitdiff
path: root/storage/rocksdb/mysql-test/rocksdb/t/lock_rows_not_exist.test
blob: d8a6bde45c899ced952db9583fa006f75ee9ad0f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
--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;