mirror of
https://github.com/MariaDB/server.git
synced 2025-01-28 01:34:17 +01:00
81258f1432
This was because of a wrong test in encryption code that wrote random numbers over the LSN for pages for transactional Aria tables during repair. The effect was that after an ALTER TABLE ENABLE KEYS of a encrypted recovery of the tables would not work. Fixed by changing testing of !share->now_transactional to !share->base.born_transactional. Other things: - Extended Aria check_table() to check for wrong (= too big) LSN numbers. - If check_table() failed just because of wrong LSN or TRN numbers, a following repair table will just do a zerofill which is much faster. - Limit number of LSN errors in one check table to MAX_LSN_ERROR (10). - Removed old obsolete test of 'if (error_count & 2)'. Changed error_count and warning_count from bits to numbers of errors/warnings as this is more useful.
129 lines
3.7 KiB
Text
129 lines
3.7 KiB
Text
# Test to verify that auto-zerofilling happens when a table is
|
|
# imported from a different Aria instance
|
|
|
|
# can't restart in embedded
|
|
--source include/not_embedded.inc
|
|
--source include/have_maria.inc
|
|
|
|
call mtr.add_suppression("Table 't1' is marked as crashed and should be repaired");
|
|
|
|
let $MARIA_LOG=.;
|
|
|
|
--disable_warnings
|
|
drop database if exists mysqltest;
|
|
--enable_warnings
|
|
create database mysqltest;
|
|
let $mms_tname=t;
|
|
|
|
connect (admin, localhost, root,,mysqltest,,);
|
|
--enable_reconnect
|
|
|
|
connection default;
|
|
use mysqltest;
|
|
--enable_reconnect
|
|
|
|
# Create some tables for future tests
|
|
create table t1(a int) engine=aria;
|
|
insert into t1 values(1);
|
|
create table t2 (a int) engine=aria;
|
|
INSERT INTO t2 VALUES (1),(2);
|
|
create table t3 (a int) engine=aria;
|
|
INSERT INTO t3 VALUES (1),(2);
|
|
create table t4 (a int) engine=aria;
|
|
INSERT INTO t4 VALUES (1),(2);
|
|
create table t5 (a int) engine=aria;
|
|
INSERT INTO t5 VALUES (1),(2);
|
|
create table t6 (a int) engine=aria;
|
|
INSERT INTO t6 VALUES (1),(2);
|
|
flush tables;
|
|
|
|
# Check that table is not zerofilled, not movable
|
|
let $MYSQLD_DATADIR= `select @@datadir`;
|
|
--exec $MARIA_CHK -dv --ignore-control-file $MYSQLD_DATADIR/mysqltest/t1 >$MYSQLTEST_VARDIR/tmp/autozerofill.txt
|
|
perl;
|
|
use strict;
|
|
use warnings;
|
|
my $fname= "$ENV{'MYSQLTEST_VARDIR'}/tmp/autozerofill.txt";
|
|
open(FILE, "<", $fname) or die;
|
|
my @content= <FILE>;
|
|
print grep(/Status:.*(zerofilled|movable)/, @content);
|
|
print "create_rename_lsn has non-magic value\n" if grep(/create_rename \([0-9]+/, @content);
|
|
close FILE;
|
|
EOF
|
|
|
|
# this will remove control file, so change the uuid of the Aria
|
|
# instance, thus t1 will appear as imported from elsewhere.
|
|
|
|
-- source include/maria_empty_logs.inc
|
|
|
|
disable_ps_protocol; # see aria-recover.test
|
|
replace_regex /Table.*t1/t1/ ;
|
|
replace_result \\ /;
|
|
select * from t1;
|
|
enable_ps_protocol;
|
|
flush table t1;
|
|
|
|
# Check that table is auto-zerofilled, movable
|
|
--exec $MARIA_CHK -dv --ignore-control-file $MYSQLD_DATADIR/mysqltest/t1 >$MYSQLTEST_VARDIR/tmp/autozerofill.txt
|
|
perl;
|
|
use strict;
|
|
use warnings;
|
|
my $fname= "$ENV{'MYSQLTEST_VARDIR'}/tmp/autozerofill.txt";
|
|
open(FILE, "<", $fname) or die;
|
|
my @content= <FILE>;
|
|
print grep(/Status:.*/, @content);
|
|
print "create_rename_lsn has magic value\n" if grep(/create_rename \(0,0x2\)/, @content);
|
|
close FILE;
|
|
EOF
|
|
|
|
# this will attach t1 to the current Aria instance
|
|
insert into t1 values(2);
|
|
flush table t1;
|
|
|
|
# Check that table is not zerofilled, not movable
|
|
--exec $MARIA_CHK -dv --ignore-control-file $MYSQLD_DATADIR/mysqltest/t1 >$MYSQLTEST_VARDIR/tmp/autozerofill.txt
|
|
perl;
|
|
use strict;
|
|
use warnings;
|
|
my $fname= "$ENV{'MYSQLTEST_VARDIR'}/tmp/autozerofill.txt";
|
|
open(FILE, "<", $fname) or die;
|
|
my @content= <FILE>;
|
|
print grep(/Status:.*(zerofilled|movable)/, @content);
|
|
print "create_rename_lsn has non-magic value\n" if grep(/create_rename \([0-9]+/, @content);
|
|
close FILE;
|
|
EOF
|
|
|
|
--echo #
|
|
--echo # BUG#44422 "mysql_upgrade destroys Maria tables?"
|
|
--echo # Check repair and optimize of moved table
|
|
--echo #
|
|
|
|
# Table t2 is regarded as it would be from another server as we removed
|
|
# the aria control file earlier
|
|
check table t2;
|
|
check table t2;
|
|
repair table t2;
|
|
check table t2;
|
|
replace_result \\ /;
|
|
optimize table t3;
|
|
replace_result \\ /;
|
|
analyze table t4;
|
|
repair table t5;
|
|
check table t5;
|
|
repair table t5;
|
|
check table t5;
|
|
|
|
# Check that if we zerofill with aria_chk, we should not get any warnings when
|
|
# accessing the table
|
|
--error 0,1,11,139
|
|
--exec $MARIA_CHK --ignore-control-file --zerofill $MYSQLD_DATADIR/mysqltest/t6 >$MYSQLTEST_VARDIR/tmp/autozerofill.txt 2>&1
|
|
if ($sys_errno != 0)
|
|
{
|
|
--cat_file $MYSQLTEST_VARDIR/tmp/autozerofill.txt
|
|
--die
|
|
}
|
|
|
|
select * from t6;
|
|
check table t6;
|
|
|
|
drop database mysqltest;
|