summaryrefslogtreecommitdiff
path: root/mysql-test/suite/mariabackup
diff options
context:
space:
mode:
authorVlad Lesin <vlad_lesin@mail.ru>2019-11-20 21:27:30 +0300
committerVlad Lesin <vlad_lesin@mail.ru>2019-11-29 17:01:12 +0300
commitbd11bd63ccbfa71dbd359314db6c4f116629a357 (patch)
treed248d6b1fc9f2a36ccac06135651cb99916f18a6 /mysql-test/suite/mariabackup
parent32ce5301a973688f250b64049a0db099100028c1 (diff)
downloadmariadb-git-bd11bd63ccbfa71dbd359314db6c4f116629a357.tar.gz
MDEV-18310: Aria engine: Undo phase failed with "Got error 121 when
executing undo undo_key_delete" upon startup on datadir restored from incremental backup aria_log* files were not copied on --prepare --incremental-dir step from incremental to destination backup directory.
Diffstat (limited to 'mysql-test/suite/mariabackup')
-rw-r--r--mysql-test/suite/mariabackup/incremental_backup.result4
-rw-r--r--mysql-test/suite/mariabackup/incremental_backup.test63
2 files changed, 63 insertions, 4 deletions
diff --git a/mysql-test/suite/mariabackup/incremental_backup.result b/mysql-test/suite/mariabackup/incremental_backup.result
index cc7277bdde9..70cc2cf8c4a 100644
--- a/mysql-test/suite/mariabackup/incremental_backup.result
+++ b/mysql-test/suite/mariabackup/incremental_backup.result
@@ -1,4 +1,5 @@
call mtr.add_suppression("InnoDB: New log files created");
+CREATE TABLE t_aria(i INT) ENGINE ARIA;
CREATE TABLE t(i INT PRIMARY KEY) ENGINE INNODB;
BEGIN;
INSERT INTO t VALUES(2);
@@ -11,11 +12,13 @@ INSERT INTO t VALUES(0);
DELETE FROM t WHERE i=0;
connection default;
COMMIT;
+# Generate enough aria log records to increase area log file size
SELECT * FROM t;
i
1
2
# Prepare full backup, apply incremental one
+# Aria log file was updated during applying incremental backup
disconnect con1;
# Restore and check results
# shutdown server
@@ -27,3 +30,4 @@ i
1
2
DROP TABLE t;
+DROP TABLE t_aria;
diff --git a/mysql-test/suite/mariabackup/incremental_backup.test b/mysql-test/suite/mariabackup/incremental_backup.test
index 8fbfa701999..3e877af1398 100644
--- a/mysql-test/suite/mariabackup/incremental_backup.test
+++ b/mysql-test/suite/mariabackup/incremental_backup.test
@@ -1,10 +1,12 @@
+--source include/have_aria.inc
--source include/innodb_page_size.inc
call mtr.add_suppression("InnoDB: New log files created");
-let $basedir=$MYSQLTEST_VARDIR/tmp/backup;
-let $incremental_dir=$MYSQLTEST_VARDIR/tmp/backup_inc1;
+let basedir=$MYSQLTEST_VARDIR/tmp/backup;
+let incremental_dir=$MYSQLTEST_VARDIR/tmp/backup_inc1;
+CREATE TABLE t_aria(i INT) ENGINE ARIA;
CREATE TABLE t(i INT PRIMARY KEY) ENGINE INNODB;
BEGIN;
INSERT INTO t VALUES(2);
@@ -14,21 +16,73 @@ INSERT INTO t VALUES(1);
echo # Create full backup , modify table, then create incremental/differential backup;
--disable_result_log
-exec $XTRABACKUP --defaults-file=$MYSQLTEST_VARDIR/my.cnf --backup --target-dir=$basedir;
+exec $XTRABACKUP --defaults-file=$MYSQLTEST_VARDIR/my.cnf --backup --parallel=10 --target-dir=$basedir;
--enable_result_log
BEGIN;
INSERT INTO t VALUES(0);
DELETE FROM t WHERE i=0;
connection default;
COMMIT;
+
+--echo # Generate enough aria log records to increase area log file size
+--disable_query_log
+--disable_result_log
+INSERT INTO t_aria VALUES
+ (0), (1), (2), (3), (4), (5), (6), (7), (8), (9),
+ (0), (1), (2), (3), (4), (5), (6), (7), (8), (9),
+ (0), (1), (2), (3), (4), (5), (6), (7), (8), (9),
+ (0), (1), (2), (3), (4), (5), (6), (7), (8), (9),
+ (0), (1), (2), (3), (4), (5), (6), (7), (8), (9),
+ (0), (1), (2), (3), (4), (5), (6), (7), (8), (9),
+ (0), (1), (2), (3), (4), (5), (6), (7), (8), (9),
+ (0), (1), (2), (3), (4), (5), (6), (7), (8), (9),
+ (0), (1), (2), (3), (4), (5), (6), (7), (8), (9),
+ (0), (1), (2), (3), (4), (5), (6), (7), (8), (9);
+--let $i = 4
+while ($i) {
+INSERT INTO t_aria SELECT * FROM seq_1_to_2000;
+--dec $i
+}
+--enable_query_log
+--enable_result_log
+
SELECT * FROM t;
-exec $XTRABACKUP --defaults-file=$MYSQLTEST_VARDIR/my.cnf --backup --ftwrl-wait-timeout=5 --ftwrl-wait-threshold=300 --ftwrl-wait-query-type=all --target-dir=$incremental_dir --incremental-basedir=$basedir;
+# wf_incremental_init() allocates (page_size/4)*page_size bytes with mmap()
+# in each data file copy thread, what can fail on 32-bit platforms if threads
+# are too much, that's why don't set too big --parallel option value.
+exec $XTRABACKUP --defaults-file=$MYSQLTEST_VARDIR/my.cnf --backup --parallel=2 --ftwrl-wait-timeout=5 --ftwrl-wait-threshold=300 --ftwrl-wait-query-type=all --target-dir=$incremental_dir --incremental-basedir=$basedir;
--disable_result_log
echo # Prepare full backup, apply incremental one;
exec $XTRABACKUP --prepare --target-dir=$basedir;
exec $XTRABACKUP --prepare --target-dir=$basedir --incremental-dir=$incremental_dir ;
+let perl_result_file=$MYSQLTEST_VARDIR/tmp/check_file_size_result.inc;
+
+--perl END_OF_FILE
+ use strict;
+ use warnings;
+
+ my $dst_file = "$ENV{'basedir'}/aria_log.00000001";
+ my $src_file = "$ENV{'incremental_dir'}/aria_log.00000001";
+ my $out_file = $ENV{'perl_result_file'};
+
+ my $dst_size = -s $dst_file;
+ my $src_size = -s $src_file;
+
+ open (my $output, '>', $out_file) or die $!;
+ if ($dst_size >= $src_size) {
+ print $output '--echo # Aria log file was updated during applying incremental backup'."\n";
+ }
+ else {
+ print $output '--echo # Aria log file was NOT updated during applying incremental backup'."\n";
+ }
+ close $output;
+END_OF_FILE
+
+--source $perl_result_file
+--remove_file $perl_result_file
+
disconnect con1;
echo # Restore and check results;
let $targetdir=$basedir;
@@ -37,6 +91,7 @@ let $targetdir=$basedir;
SELECT * FROM t;
DROP TABLE t;
+DROP TABLE t_aria;
# Cleanup
rmdir $basedir;