mirror of
https://github.com/MariaDB/server.git
synced 2025-01-19 13:32:33 +01:00
91bc9cc9e6
mysql-test/suite/maria/r/maria-recovery3.result: result. mysql-test/suite/maria/t/maria-recovery3-master.opt: usual recovery test options mysql-test/suite/maria/t/maria-recovery3.test: Test for BUG#41037. Without the bugfix, the test would hang because Recovery would fail with "undo_key_insert got error 126": Recovery would believe INSERT of 2 is uncommitted, try to execute its UNDO_KEY_INSERT, fail to find the key to delete because DELETE deleted it. That failure of _ma_ck_real_delete() would mark table as corrupted (see in d_search()) which is error 126 (HA_ERR_CRASHED). storage/maria/ma_blockrec.c: set trn->rec_lsn to LSN of commit record, when writing it. storage/maria/ma_blockrec.h: new function storage/maria/ma_commit.c: when committing or rolling back, rec_lsn should be LSN_IMPOSSIBLE: assertion is moved here from trnman_end_trn(), because now ma_commit() can set rec_lsn and so when we reach trnman_end_trn() it's not LSN_IMPOSSIBLE anymore. Adding debug possibility to pause between COMMIT record write and trnman_commit_trn(), to be able to fire checkpoint in between. storage/maria/ma_loghandler.c: in-write hook for COMMIT records storage/maria/ma_recovery.c: More debugging info in maria_recovery.trace, to see how the starting point of REDO phase is determined storage/maria/trnman.c: assertion cannot be here anymore see ma_commit.c
29 lines
965 B
Text
29 lines
965 B
Text
set global maria_log_file_size=4294967295;
|
|
drop database if exists mysqltest;
|
|
create database mysqltest;
|
|
use mysqltest;
|
|
* shut down mysqld, removed logs, restarted it
|
|
* TEST of Checkpoint between writing the commit log record and committing in trnman
|
|
create table t1(a int primary key) engine=maria;
|
|
insert into t1 values(1);
|
|
flush table t1;
|
|
* copied t1 for comparison
|
|
set session debug="+d,maria_sleep_in_commit";
|
|
insert into t1 values(2);
|
|
set global maria_checkpoint_interval=1000;
|
|
delete from t1 where a=2;
|
|
SET SESSION debug="+d,maria_flush_whole_log,maria_crash";
|
|
* crashing mysqld intentionally
|
|
set global maria_checkpoint_interval=1;
|
|
ERROR HY000: Lost connection to MySQL server during query
|
|
* recovery happens
|
|
check table t1 extended;
|
|
Table Op Msg_type Msg_text
|
|
mysqltest.t1 check status OK
|
|
* testing that checksum after recovery is as expected
|
|
Checksum-check
|
|
ok
|
|
use mysqltest;
|
|
drop table t1;
|
|
drop database mysqltest_for_comparison;
|
|
drop database mysqltest;
|