# # Verify that the wsrep XID gets updated in InnoDB rollback segment # properly and can be recovered with --wsrep-recover # # The test runs the following scenarios: # # 1) The server is started but no SQL is run # 2) DDL is executed # 3) INSERT is executed # 4) Two INSERTs are executed so that the first one in order will be # blocked after certification and the second one before entering # commit order critical section. # 5) Two DMLs are executed so that the prepare step is run out of order. # Both transactions are blocked before commit order critical section. # # After each scenario server is killed and the recovered position # is validated. # --source include/have_wsrep.inc --source include/have_innodb.inc --source include/have_wsrep_provider.inc --source include/have_debug_sync.inc # # Binlog option for recovery run. This must be set in the test because # combinations file causes log-bin option to be set from command line, # not via my.cnf. # --let $log_bin = `SELECT @@log_bin` if ($log_bin) { --let $wsrep_recover_binlog_opt = --log-bin } # # Scenario 1 # The expected recovered seqno is 1 corresponding to initial cluster # configuration change. # let $restart_noprint=2; --source include/kill_mysqld.inc --source wsrep-recover-step.inc --echo Expect seqno 1 --echo $wsrep_recover_start_position_seqno --let $restart_parameters = --wsrep-start-position=$wsrep_recover_start_position_uuid:$wsrep_recover_start_position_seqno --source include/start_mysqld.inc --source include/wait_wsrep_ready.inc # # Senario 2 # The expected recovered seqno is 3 corresponding to two configuration # changes and CREATE TABLE # CREATE TABLE t1 (f1 INT PRIMARY KEY) ENGINE=InnoDB; let $restart_noprint=2; --source include/kill_mysqld.inc --source wsrep-recover-step.inc --echo Expect seqno 3 --echo $wsrep_recover_start_position_seqno --let $restart_parameters = --wsrep-start-position=$wsrep_recover_start_position_uuid:$wsrep_recover_start_position_seqno --source include/start_mysqld.inc --source include/wait_wsrep_ready.inc # # Scenario 3 # The expected recovered seqno is 5 corresponding to three configuration # changes, CREATE TABLE and INSERT. # # The expected wsrep_last_committed after the server is restarted is 6. # INSERT INTO t1 VALUES (5); let $restart_noprint=2; --source include/kill_mysqld.inc --source wsrep-recover-step.inc --echo Expect seqno 5 --echo $wsrep_recover_start_position_seqno --let $restart_parameters = --wsrep-start-position=$wsrep_recover_start_position_uuid:$wsrep_recover_start_position_seqno --source include/start_mysqld.inc --source include/wait_wsrep_ready.inc SELECT VARIABLE_VALUE `expect 6` FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_last_committed'; # # Scenario 4 # # The INSERT gets prepared but not committed. # # This scenario is not applicable if binlog is not on since the # commit is not 2PC. # # If binlog is on, the INSERT # should be rolled back during recovery phase since it has not yet # been logged into binlog. # if ($log_bin) { --connect con1, localhost, root SET DEBUG_SYNC = "ha_commit_trans_after_prepare SIGNAL after_prepare_reached WAIT_FOR continue"; --send INSERT INTO t1 VALUES (7) --connection default let $restart_noprint=2; SET DEBUG_SYNC = "now WAIT_FOR after_prepare_reached"; --source include/kill_mysqld.inc --source wsrep-recover-step.inc --echo Expect seqno 6 --echo $wsrep_recover_start_position_seqno --let $restart_parameters = --wsrep-start-position=$wsrep_recover_start_position_uuid:$wsrep_recover_start_position_seqno --source include/start_mysqld.inc --source include/wait_wsrep_ready.inc --echo Expect 5 SELECT * FROM t1; } DROP TABLE t1;