1--source include/have_log_bin.inc
2--source include/have_rocksdb.inc
3--source include/count_sessions.inc
4--disable_warnings
5--source include/have_gtid.inc
6--enable_warnings
7-- let $uuid = `select @@server_uuid;`
8
9connect (con1,localhost,root,,);
10connect (con2,localhost,root,,);
11
12connection con1;
13CREATE TABLE t1 (id INT, value int, PRIMARY KEY (id), INDEX (value)) ENGINE=ROCKSDB;
14INSERT INTO t1 VALUES (1,1);
15
16# Read-only, long-running transaction. SingleDelete/Put shouldn't increase much.
17select variable_value into @p from performance_schema.global_status where variable_name='rocksdb_number_sst_entry_put';
18select variable_value into @s from performance_schema.global_status where variable_name='rocksdb_number_sst_entry_singledelete';
19START TRANSACTION WITH CONSISTENT SNAPSHOT;
20SHOW STATUS LIKE 'binlog_snapshot_file';
21SHOW STATUS LIKE 'binlog_snapshot_position';
22
23connection con2;
24--disable_query_log
25let $i = 1;
26while ($i <= 10000) {
27  let $update = UPDATE t1 SET value=value+1 WHERE id=1;
28  inc $i;
29  eval $update;
30}
31--enable_query_log
32
33connection con1;
34select case when variable_value-@p < 1000 then 'true' else variable_value-@p end from performance_schema.global_status where variable_name='rocksdb_number_sst_entry_put';
35select case when variable_value-@s < 100 then 'true' else variable_value-@s end from performance_schema.global_status where variable_name='rocksdb_number_sst_entry_singledelete';
36SELECT * FROM t1;
37--error ER_UPDATES_WITH_CONSISTENT_SNAPSHOT
38INSERT INTO t1 values (2, 2);
39ROLLBACK;
40SELECT * FROM t1;
41INSERT INTO t1 values (2, 2);
42SELECT * FROM t1 ORDER BY id;
43
44# Regular long-running transaction.
45# No "Transaction could not check for conflicts for opearation" error should happen.
46BEGIN;
47
48connection con2;
49--disable_query_log
50let $i = 5;
51while ($i <= 10000) {
52  let $insert = INSERT INTO t1 VALUES ($i, $i);
53  inc $i;
54  eval $insert;
55}
56--enable_query_log
57
58connection con1;
59SELECT COUNT(*) FROM t1;
60COMMIT;
61
62connection default;
63disconnect con1;
64disconnect con2;
65OPTIMIZE TABLE t1;
66DROP TABLE t1;
67reset master;
68