Commit d2ffafe0 authored by Marko Mäkelä's avatar Marko Mäkelä

MDEV-14333 Mariabackup --apply-log-only crashes if incomplete transactions...

MDEV-14333 Mariabackup --apply-log-only crashes if incomplete transactions with update_undo logs are present

trx_undo_free_prepared(): Relax the assertion for
mariabackup --apply-log-only.
parent 0fdb0bdf
call mtr.add_suppression("InnoDB: New log files created"); call mtr.add_suppression("InnoDB: New log files created");
CREATE TABLE t(i INT) ENGINE INNODB; CREATE TABLE t(i INT PRIMARY KEY) ENGINE INNODB;
BEGIN;
INSERT INTO t VALUES(2);
SET GLOBAL innodb_flush_log_at_trx_commit = 1;
INSERT INTO t VALUES(1); INSERT INTO t VALUES(1);
# Create full backup , modify table, then create incremental/differential backup # Create full backup , modify table, then create incremental/differential backup
INSERT INTO t VALUES(2); BEGIN;
INSERT INTO t VALUES(0);
DELETE FROM t WHERE i=0;
COMMIT;
SELECT * FROM t; SELECT * FROM t;
i i
1 1
......
...@@ -4,23 +4,31 @@ call mtr.add_suppression("InnoDB: New log files created"); ...@@ -4,23 +4,31 @@ call mtr.add_suppression("InnoDB: New log files created");
let $basedir=$MYSQLTEST_VARDIR/tmp/backup; let $basedir=$MYSQLTEST_VARDIR/tmp/backup;
let $incremental_dir=$MYSQLTEST_VARDIR/tmp/backup_inc1; let $incremental_dir=$MYSQLTEST_VARDIR/tmp/backup_inc1;
CREATE TABLE t(i INT PRIMARY KEY) ENGINE INNODB;
CREATE TABLE t(i INT) ENGINE INNODB; BEGIN;
INSERT INTO t VALUES(2);
connect (con1,localhost,root,,);
SET GLOBAL innodb_flush_log_at_trx_commit = 1;
INSERT INTO t VALUES(1); INSERT INTO t VALUES(1);
echo # Create full backup , modify table, then create incremental/differential backup; echo # Create full backup , modify table, then create incremental/differential backup;
--disable_result_log --disable_result_log
exec $XTRABACKUP --defaults-file=$MYSQLTEST_VARDIR/my.cnf --backup --target-dir=$basedir; exec $XTRABACKUP --defaults-file=$MYSQLTEST_VARDIR/my.cnf --backup --target-dir=$basedir;
--enable_result_log --enable_result_log
INSERT INTO t VALUES(2); BEGIN;
INSERT INTO t VALUES(0);
DELETE FROM t WHERE i=0;
connection default;
COMMIT;
SELECT * FROM t; SELECT * FROM t;
exec $XTRABACKUP --defaults-file=$MYSQLTEST_VARDIR/my.cnf --backup --target-dir=$incremental_dir --incremental-basedir=$basedir; exec $XTRABACKUP --defaults-file=$MYSQLTEST_VARDIR/my.cnf --backup --target-dir=$incremental_dir --incremental-basedir=$basedir;
--disable_result_log --disable_result_log
echo # Prepare full backup, apply incremental one; echo # Prepare full backup, apply incremental one;
exec $XTRABACKUP --prepare --apply-log-only --target-dir=$basedir; exec $XTRABACKUP --prepare --apply-log-only --target-dir=$basedir;
exec $XTRABACKUP --prepare --target-dir=$basedir --incremental-dir=$incremental_dir ; exec $XTRABACKUP --prepare --apply-log-only --target-dir=$basedir --incremental-dir=$incremental_dir ;
disconnect con1;
echo # Restore and check results; echo # Restore and check results;
let $targetdir=$basedir; let $targetdir=$basedir;
-- source include/restart_and_restore.inc -- source include/restart_and_restore.inc
......
...@@ -2025,6 +2025,7 @@ trx_undo_free_prepared( ...@@ -2025,6 +2025,7 @@ trx_undo_free_prepared(
/* lock_trx_release_locks() assigns /* lock_trx_release_locks() assigns
trx->is_recovered=false */ trx->is_recovered=false */
ut_a(srv_read_only_mode ut_a(srv_read_only_mode
|| srv_apply_log_only
|| srv_force_recovery >= SRV_FORCE_NO_TRX_UNDO); || srv_force_recovery >= SRV_FORCE_NO_TRX_UNDO);
break; break;
default: default:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment