summaryrefslogtreecommitdiff
path: root/mysql-test/suite/galera/t/galera_gcache_recover_manytrx.test
blob: d92288b78815a1a9747007b5aa2f64bfa0fab362 (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
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
#
# Kill entire cluster while various transactions are in progress
# restore the cluster and expect that node #2 will rejoin using IST
#

--source include/galera_cluster.inc
--source include/big_test.inc
--source include/have_log_bin.inc

SET SESSION wsrep_sync_wait = 0;
CREATE TABLE t1 (f1 INTEGER PRIMARY KEY AUTO_INCREMENT, f2 LONGBLOB) ENGINE=InnoDB;
CREATE TABLE ten (f1 INTEGER) ENGINE=InnoDB;
INSERT INTO ten VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10);

DELIMITER |;
CREATE PROCEDURE insert_simple ()
BEGIN
        DECLARE CONTINUE HANDLER FOR SQLEXCEPTION BEGIN END;
	SET SESSION wsrep_sync_wait = 0;
        WHILE 1 DO
                INSERT INTO t1 (f1, f2) VALUES (DEFAULT,'abcdef');
        END WHILE;
END|

CREATE PROCEDURE insert_multi ()
BEGIN
        DECLARE CONTINUE HANDLER FOR SQLEXCEPTION BEGIN END;
	SET SESSION wsrep_sync_wait = 0;
        WHILE 1 DO
                INSERT INTO t1 (f1) VALUES (DEFAULT),(DEFAULT),(DEFAULT),(DEFAULT),(DEFAULT),(DEFAULT),(DEFAULT),(DEFAULT),(DEFAULT),(DEFAULT);
        END WHILE;
END|

CREATE PROCEDURE insert_transaction ()
BEGIN
        DECLARE CONTINUE HANDLER FOR SQLEXCEPTION BEGIN END;
	SET SESSION wsrep_sync_wait = 0;
	SET AUTOCOMMIT = OFF;
        WHILE 1 DO
		START TRANSACTION;
		INSERT INTO t1 (f1) VALUES (DEFAULT);
		INSERT INTO t1 (f1) VALUES (DEFAULT);
		INSERT INTO t1 (f1) VALUES (DEFAULT);
		INSERT INTO t1 (f1) VALUES (DEFAULT);
		INSERT INTO t1 (f1) VALUES (DEFAULT);

		INSERT INTO t1 (f1) VALUES (DEFAULT);
		INSERT INTO t1 (f1) VALUES (DEFAULT);
		INSERT INTO t1 (f1) VALUES (DEFAULT);
		INSERT INTO t1 (f1) VALUES (DEFAULT);
		INSERT INTO t1 (f1) VALUES (DEFAULT);
		COMMIT;
        END WHILE;
END|

DELIMITER ;|
DELIMITER |;

CREATE PROCEDURE update_simple ()
BEGIN
        DECLARE CONTINUE HANDLER FOR SQLEXCEPTION BEGIN END;
	SET SESSION wsrep_sync_wait = 0;
        WHILE 1 DO
		UPDATE t1 SET f2 = CONCAT(f2,f2);
        END WHILE;
END|

CREATE PROCEDURE insert_1k ()
BEGIN
        DECLARE CONTINUE HANDLER FOR SQLEXCEPTION BEGIN END;
	SET SESSION wsrep_sync_wait = 0;
        WHILE 1 DO
		INSERT INTO t1 (f2) VALUES (REPEAT('x', 1024));
        END WHILE;
END|

CREATE PROCEDURE insert_1m ()
BEGIN
        DECLARE CONTINUE HANDLER FOR SQLEXCEPTION BEGIN END;
	SET SESSION wsrep_sync_wait = 0;
        WHILE 1 DO
		INSERT INTO t1 (f2) VALUES (REPEAT('x', 1024 * 1024));
        END WHILE;
END|

CREATE PROCEDURE insert_10m ()
BEGIN
        DECLARE CONTINUE HANDLER FOR SQLEXCEPTION BEGIN END;
	SET SESSION wsrep_sync_wait = 0;
        WHILE 1 DO
		INSERT INTO t1 (f2) VALUES (REPEAT('x', 1024 * 1024 * 10));
        END WHILE;
END|

DELIMITER ;|

--let $wsrep_last_committed_before = `SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.SESSION_STATUS WHERE VARIABLE_NAME = 'wsrep_last_committed'`

--connect node_1_insert_simple, 127.0.0.1, root, , test, $NODE_MYPORT_1
--connect node_1_insert_multi, 127.0.0.1, root, , test, $NODE_MYPORT_1
--connect node_1_insert_transaction, 127.0.0.1, root, , test, $NODE_MYPORT_1
--connect node_1_update_simple, 127.0.0.1, root, , test, $NODE_MYPORT_1
--connect node_1_insert_1k, 127.0.0.1, root, , test, $NODE_MYPORT_1
--connect node_1_insert_1m, 127.0.0.1, root, , test, $NODE_MYPORT_1
--connect node_1_insert_10m, 127.0.0.1, root, , test, $NODE_MYPORT_1

--connection node_1_insert_simple
--send CALL insert_simple();

--connection node_1_insert_multi
--send CALL insert_multi();

--connection node_1_insert_transaction
--send CALL insert_transaction ();

--connection node_1_update_simple
--send CALL update_simple ();

--connection node_1_insert_1k
--send CALL insert_1k ();

--connection node_1_insert_1m
--send CALL insert_1m ();

--connection node_1_insert_10m
--send CALL insert_10m ();

--connection node_2
call mtr.add_suppression("Error in Log_event::read_log_event():.*");
SET SESSION wsrep_sync_wait = 0;

# Make sure that node_2 is not killed while TOIs are applied.
# Otherwhise we risk that grastate file is marked unsafe, and
# as a consequence the node cannot rejoin with IST.
--let $wait_condition = SELECT VARIABLE_VALUE > $wsrep_last_committed_before FROM INFORMATION_SCHEMA.SESSION_STATUS WHERE VARIABLE_NAME = 'wsrep_last_committed'
--source include/wait_condition.inc

--source include/kill_galera.inc

--sleep 10
--connection node_1
--source include/kill_galera.inc

--connection node_1_insert_simple
--error 2013
--reap

--connection node_1_insert_multi
--error 2013
--reap

--connection node_1_insert_transaction
--error 2013
--reap

--connection node_1_update_simple
--error 2013
--reap

--connection node_1_insert_1k
--error 2013
--reap

--connection node_1_insert_1m
--error 2013
--reap

--connection node_1_insert_10m
--error 2013
--reap

--connection node_1
--let $galera_wsrep_recover_server_id=1
--source suite/galera/include/galera_wsrep_recover.inc

--let $_expect_file_name = $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
--source include/start_mysqld.inc
--connection node_2
--let $galera_wsrep_recover_server_id=2
--source suite/galera/include/galera_wsrep_recover.inc

--let $_expect_file_name= $MYSQLTEST_VARDIR/tmp/mysqld.2.expect
--source include/start_mysqld.inc

--connection node_1
--let $wait_condition = SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
--source include/wait_condition.inc

--let $diff_servers = 1 2
--source include/diff_servers.inc

--connection node_1
DROP TABLE t1;
DROP TABLE ten;
DROP PROCEDURE insert_simple;
DROP PROCEDURE insert_multi;
DROP PROCEDURE insert_transaction;
DROP PROCEDURE update_simple;
DROP PROCEDURE insert_1k;
DROP PROCEDURE insert_1m;

--connection node_1
call mtr.add_suppression("Error in Log_event::read_log_event():.*");
CALL mtr.add_suppression("conflict state 7 after post commit");

# Warning happens when the cluster is started for the first time
CALL mtr.add_suppression("Skipped GCache ring buffer recovery");

# Confirm that IST took place
--let $assert_text = async IST sender starting to serve
--let $assert_select = async IST sender starting to serve
--let $assert_count = 1
--let $assert_file = $MYSQLTEST_VARDIR/log/mysqld.1.err
--let $assert_only_after = starting as process
--source include/assert_grep.inc

--connection node_2
call mtr.add_suppression("Error in Log_event::read_log_event():.*");
CALL mtr.add_suppression("Skipped GCache ring buffer recovery");

# Confirm that gcache recovery took place

--let $assert_text = Recovering GCache ring buffer: found gapless sequence
--let $assert_select = Recovering GCache ring buffer: found gapless sequence
--let $assert_count = 1
--let $assert_file = $MYSQLTEST_VARDIR/log/mysqld.2.err
--let $assert_only_after = starting as process
--source include/assert_grep.inc