1--source include/have_rocksdb.inc
2--source include/have_binlog_format_row.inc
3
4source include/master-slave.inc;
5
6connection master;
7
8eval SET SESSION TRANSACTION ISOLATION LEVEL $trx_isolation;
9set @save_rocksdb_blind_delete_primary_key=@@session.rocksdb_blind_delete_primary_key;
10set @save_rocksdb_master_skip_tx_api=@@session.rocksdb_master_skip_tx_api;
11
12--disable_warnings
13DROP TABLE IF EXISTS t1,t2;
14--enable_warnings
15create table t1 (id int primary key, value int, value2 varchar(200)) engine=rocksdb;
16create table t2 (id int primary key, value int, value2 varchar(200), index(value)) engine=rocksdb;
17
18--disable_query_log
19let $t = 1;
20while ($t <= 2) {
21  let $i = 1;
22  while ($i <= 10000) {
23    let $insert = INSERT INTO t$t VALUES($i, $i, REPEAT('x', 150));
24    inc $i;
25    eval $insert;
26  }
27  inc $t;
28}
29--enable_query_log
30
31SET session rocksdb_blind_delete_primary_key=1;
32select variable_value into @c from information_schema.global_status where variable_name='rocksdb_rows_deleted_blind';
33# Deleting 1000 rows from t1
34--disable_query_log
35let $i = 1;
36while ($i <= 1000) {
37  let $insert = DELETE FROM t1 WHERE id=$i;
38  inc $i;
39  eval $insert;
40}
41--enable_query_log
42select variable_value-@c from information_schema.global_status where variable_name='rocksdb_rows_deleted_blind';
43SELECT count(*) FROM t1;
44
45--source include/sync_slave_sql_with_master.inc
46connection slave;
47eval SET SESSION TRANSACTION ISOLATION LEVEL $trx_isolation;
48SELECT count(*) FROM t1;
49connection master;
50
51# Deleting 1000 rows from t2 (blind delete disabled because of secondary key)
52select variable_value into @c from information_schema.global_status where variable_name='rocksdb_rows_deleted_blind';
53--disable_query_log
54let $i = 1;
55while ($i <= 1000) {
56  let $insert = DELETE FROM t2 WHERE id=$i;
57  inc $i;
58  eval $insert;
59}
60--enable_query_log
61select variable_value-@c from information_schema.global_status where variable_name='rocksdb_rows_deleted_blind';
62SELECT count(*) FROM t2;
63
64SET session rocksdb_master_skip_tx_api=1;
65
66select variable_value into @c from information_schema.global_status where variable_name='rocksdb_rows_deleted_blind';
67--disable_query_log
68let $t = 1;
69while ($t <= 2) {
70  let $i = 1001;
71  while ($i <= 2000) {
72    let $insert = DELETE FROM t$t WHERE id=$i;
73    inc $i;
74    eval $insert;
75  }
76  inc $t;
77}
78--enable_query_log
79select variable_value-@c from information_schema.global_status where variable_name='rocksdb_rows_deleted_blind';
80SELECT count(*) FROM t1;
81SELECT count(*) FROM t2;
82--source include/sync_slave_sql_with_master.inc
83connection slave;
84SELECT count(*) FROM t1;
85SELECT count(*) FROM t2;
86connection master;
87
88
89# Range Deletes (blind delete disabled)
90select variable_value into @c from information_schema.global_status where variable_name='rocksdb_rows_deleted_blind';
91DELETE FROM t1 WHERE id BETWEEN 3001 AND 4000;
92DELETE FROM t2 WHERE id BETWEEN 3001 AND 4000;
93select variable_value-@c from information_schema.global_status where variable_name='rocksdb_rows_deleted_blind';
94SELECT count(*) FROM t1;
95SELECT count(*) FROM t2;
96--source include/sync_slave_sql_with_master.inc
97connection slave;
98SELECT count(*) FROM t1;
99SELECT count(*) FROM t2;
100connection master;
101
102
103# Deleting same keys (slaves stop)
104DELETE FROM t1 WHERE id = 10;
105SELECT count(*) FROM t1;
106connection slave;
107call mtr.add_suppression("Slave SQL.*Could not execute Delete_rows event on table test.t1.*Error_code.*");
108call mtr.add_suppression("Slave: Can't find record in 't1'.*");
109# wait until we have the expected error
110--let $slave_sql_errno= convert_error(ER_KEY_NOT_FOUND)
111--source include/wait_for_slave_sql_error.inc
112
113connection slave;
114set @save_rocksdb_read_free_rpl=@@global.rocksdb_read_free_rpl;
115set global rocksdb_read_free_rpl=PK_SK;
116START SLAVE;
117connection master;
118--source include/sync_slave_sql_with_master.inc
119connection slave;
120SELECT count(*) FROM t1;
121connection master;
122
123
124# cleanup
125connection slave;
126set global rocksdb_read_free_rpl=@save_rocksdb_read_free_rpl;
127connection master;
128SET session rocksdb_blind_delete_primary_key=@save_rocksdb_blind_delete_primary_key;
129SET session rocksdb_master_skip_tx_api=@save_rocksdb_master_skip_tx_api;
130
131DROP TABLE t1, t2;
132--source include/rpl_end.inc
133