# 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;