File: wsrep-recover-gtid.test

package info (click to toggle)
mariadb 1%3A11.8.2-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, trixie
  • size: 765,428 kB
  • sloc: ansic: 2,382,827; cpp: 1,803,532; asm: 378,315; perl: 63,176; sh: 46,496; pascal: 40,776; java: 39,363; yacc: 20,428; python: 19,506; sql: 17,864; xml: 12,463; ruby: 8,544; makefile: 6,059; cs: 5,855; ada: 1,700; lex: 1,193; javascript: 1,039; objc: 80; tcl: 73; awk: 46; php: 22
file content (73 lines) | stat: -rw-r--r-- 2,505 bytes parent folder | download | duplicates (3)
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
# Test wsrep recovery with gtid_mode=ON. The test crashes the server
# in different commit stages and verifies that the GTID returned by
# SELECT WSREP_LAST_SEEN_GTID() and @@GLOBAL.gtid_binlog_pos get
# initialized properly during server restart.
#
--source include/have_wsrep.inc
--source include/have_wsrep_provider.inc
--source include/have_innodb.inc
--source include/have_log_bin.inc
--source include/have_debug_sync.inc

CREATE TABLE t1 (f1 INT PRIMARY KEY) ENGINE=InnoDB;

--echo # Case 1: Server goes through graceful shutdown and is restarted
--connection default
INSERT INTO t1 VALUES (1);
--source include/shutdown_mysqld.inc
--let $galera_wsrep_recover_server_id = 1
--source suite/galera/include/galera_wsrep_recover.inc
--source suite/galera/include/start_mysqld.inc

--echo Expect 100-10-2
SELECT WSREP_LAST_SEEN_GTID();
SELECT @@GLOBAL.gtid_binlog_pos;
SELECT * FROM t1;

--echo # Case 2: Server is killed after the transaction gets prepared
--echo # but before it is written into binlog. As there is not GTID assigned,
--echo # the transaction must be rolled back during recovery.
--connect con, localhost, root
SET DEBUG_SYNC = "ha_commit_trans_after_prepare SIGNAL reached WAIT_FOR continue";
--send INSERT INTO t1 VALUES (2)

--connection default
SET DEBUG_SYNC = "now WAIT_FOR reached";
--source include/kill_mysqld.inc
--let $galera_wsrep_recover_server_id = 1
--source suite/galera/include/galera_wsrep_recover.inc
--source suite/galera/include/start_mysqld.inc
--source include/wait_wsrep_ready.inc

--echo Expect 100-10-2
SELECT WSREP_LAST_SEEN_GTID();
SELECT @@GLOBAL.gtid_binlog_pos;
--echo Expect 1
SELECT * FROM t1;
--disconnect con

--echo # Case 3: Server is killed after the transaction gets written into binlog
--echo # but before it is committed in storage engine. In this case the
--echo # transaction must be committed during recovery as it had a valid
--echo # GTID assigned.

--connect con, localhost, root
SET DEBUG_SYNC = "commit_before_get_LOCK_commit_ordered SIGNAL reached WAIT_FOR continue";
--send INSERT INTO t1 VALUES (3)

--connection default
SET DEBUG_SYNC = "now WAIT_FOR reached";
--source include/kill_mysqld.inc
--let $galera_wsrep_recover_server_id = 1
--source suite/galera/include/galera_wsrep_recover.inc
--source suite/galera/include/start_mysqld.inc
--source include/wait_wsrep_ready.inc
--echo Expect 100-10-3
SELECT WSREP_LAST_SEEN_GTID();
SELECT @@GLOBAL.gtid_binlog_pos;
--echo Expect 1 3
SELECT * FROM t1;

--disconnect con

DROP TABLE t1;