summaryrefslogtreecommitdiff
path: root/storage/rocksdb/mysql-test/rocksdb/t/consistent_snapshot.inc
blob: ca7510b1253e66001ee8371ac3b34ad3f22f7521 (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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
#
# TRANSACTION WITH CONSISTENT SNAPSHOT
#

--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,,);

connection con1;

CREATE TABLE t1 (a INT, pk INT AUTO_INCREMENT PRIMARY KEY) ENGINE=ROCKSDB;
eval SET SESSION TRANSACTION ISOLATION LEVEL $trx_isolation;

# While a consistent snapshot transaction is executed,
# no external inserts should be visible to the transaction.
# But it should only work this way for REPEATABLE-READ and SERIALIZABLE

--error 0,ER_ISOLATION_LEVEL_WITH_CONSISTENT_SNAPSHOT
START TRANSACTION WITH CONSISTENT SNAPSHOT;
--echo ERROR: $mysql_errno

connection con2;
select * from information_schema.rocksdb_dbstats where stat_type='DB_NUM_SNAPSHOTS';

connection con1;
COMMIT;

# verifying snapshot is released after finishing transaction
connection con2;
select * from information_schema.rocksdb_dbstats where stat_type='DB_NUM_SNAPSHOTS';

connection con1;
--error 0,ER_ISOLATION_LEVEL_WITH_CONSISTENT_SNAPSHOT
START TRANSACTION WITH CONSISTENT SNAPSHOT;
--echo ERROR: $mysql_errno

connection con2;
INSERT INTO t1 (a) VALUES (1);

connection con1;
--echo # If consistent read works on this isolation level ($trx_isolation), the following SELECT should not return the value we inserted (1)
SELECT a FROM t1; 
COMMIT;

connection default;
disconnect con1;
disconnect con2;
DROP TABLE t1;

connect (con1,localhost,root,,);
connect (con2,localhost,root,,);

connection con1;
CREATE TABLE r1 (id int primary key, value int, value2 int) engine=ROCKSDB;
eval SET SESSION TRANSACTION ISOLATION LEVEL $trx_isolation;
insert into r1 values (1,1,1),(2,2,2),(3,3,3),(4,4,4);

BEGIN;

connection con2;
INSERT INTO r1 values (5,5,5);

connection con1;
SELECT * FROM r1; # 5

connection con2;
INSERT INTO r1 values (6,6,6);

connection con1;
SELECT * FROM r1; # 5
COMMIT;
SELECT * FROM r1; # 6

--error 0,ER_ISOLATION_LEVEL_WITH_CONSISTENT_SNAPSHOT
START TRANSACTION WITH CONSISTENT SNAPSHOT;
--echo ERROR: $mysql_errno

connection con2;
INSERT INTO r1 values (7,7,7);

connection con1;
SELECT * FROM r1; # 6

connection con2;
INSERT INTO r1 values (8,8,8);

connection con1;
SELECT * FROM r1; # 6
COMMIT;
SELECT * FROM r1; # 8

--error 0,ER_ISOLATION_LEVEL_WITH_CONSISTENT_SNAPSHOT
START TRANSACTION WITH CONSISTENT SNAPSHOT;
--echo ERROR: $mysql_errno

connection con2;
INSERT INTO r1 values (9,9,9);

connection con1;
--error 0,ER_ISOLATION_LEVEL_WITH_CONSISTENT_SNAPSHOT
START TRANSACTION WITH CONSISTENT SNAPSHOT;
--echo ERROR: $mysql_errno

connection con2;
INSERT INTO r1 values (10,10,10);

connection con1;
SELECT * FROM r1; # 9

--error 0,ER_ISOLATION_LEVEL_WITH_CONSISTENT_SNAPSHOT
START TRANSACTION WITH CONSISTENT SNAPSHOT;
--echo ERROR: $mysql_errno
# Succeeds with Read Committed, Fails with Repeatable Read
--error 0,ER_UPDATES_WITH_CONSISTENT_SNAPSHOT
INSERT INTO r1 values (11,11,11);
--echo ERROR: $mysql_errno
SELECT * FROM r1; # self changes should be visible


drop table r1;

connection default;
disconnect con1;
disconnect con2;


--source include/wait_until_count_sessions.inc