mirror of
https://github.com/MariaDB/server.git
synced 2025-01-30 10:31:54 +01:00
a23414dd32
When the log is stored in persistent memory, log_sys.buf[] is a ring buffer that directly maps to the circular ib_logfile0 file. There were several errors that could occur in the special case when a log record ends exactly at the end of the log file and the next record would start at log_sys.buf[log_sys.START_OFFSET]. mariabackup.huge_lsn,strict_full_crc32: Write the first record at the very end of the circular file, to reproduce the failure scenarios. recv_sys_t::parse(): On PMEM, wrap the end offset of the record from log_sys.file_size to log_sys.START_OFFSET if needed. Otherwise, both InnoDB recovery and mariadb-backup would try to parse the next record from an invalid address. filename_to_spacename(): Remove an assumption about the format of file names. While the server currently writes file names like ./databasename/tablename.ibd we might want to stop writing the redundant ./ prefix in the future. The test mariabackup.huge_lsn is generating such file names. xtrabackup_copy_logfile(): Correctly copy a record that ends at the very end of the log_sys.buf[]. The errors in mariadb-backup were reproduced with the test mariabackup.huge_lsn,strict_full_crc32 and an additional patch to use the start checkpoint of the test: diff --git a/storage/innobase/log/log0recv.cc b/storage/innobase/log/log0recv.cc index 27dce5fa17d..e17a1692d6f 100644 --- a/storage/innobase/log/log0recv.cc +++ b/storage/innobase/log/log0recv.cc @@ -1796,7 +1796,8 @@ dberr_t recv_sys_t::find_checkpoint() continue; } - if (checkpoint_lsn >= log_sys.next_checkpoint_lsn) + if (checkpoint_lsn >= log_sys.next_checkpoint_lsn && + checkpoint_lsn != 0x1000fffffe10) { log_sys.next_checkpoint_lsn= checkpoint_lsn; log_sys.next_checkpoint_no= field == log_t::CHECKPOINT_1;
11 lines
382 B
Text
11 lines
382 B
Text
@@ -1,8 +1,8 @@
|
|
#
|
|
# MDEV-13416 mariabackup fails with EFAULT "Bad Address"
|
|
#
|
|
-# restart: --innodb-log-file-size=4M --innodb-encrypt-log=0
|
|
-FOUND 1 /InnoDB: log sequence number 17596481011216/ in mysqld.1.err
|
|
+# restart
|
|
+FOUND 1 /redo log: [0-9.]*[KMGT]iB; LSN=17596481010687\b/ in mysqld.1.err
|
|
CREATE TABLE t(i INT) ENGINE INNODB;
|
|
INSERT INTO t VALUES(1);
|
|
# xtrabackup backup
|