403 lines
13 KiB
Plaintext
403 lines
13 KiB
Plaintext
#************************************************************
|
|
# WL6045:Improve Innochecksum
|
|
# Test Case [1] Check the innochecksum tool when read from stdin and without any rewrite of checksum.
|
|
# Test Case [2] Check the innochecksum tool when read from stdin and rewrite to "crc32" checksum.
|
|
# Test Case [3] Check the innochecksum tool when read from stdin and rewrite to "none" checksum
|
|
# and page-type-summary output.
|
|
# Test Case [4] Check the innochecksum tool when read from stdin and rewrite to "innodb" checksum.
|
|
# Test Case [5] Test for lock: As mysqld is running, & then start the innochecksum which must fail.
|
|
#************************************************************
|
|
|
|
--source include/not_windows.inc
|
|
|
|
# Valgrind would complain about memory leaks when we crash on purpose.
|
|
--source include/not_valgrind.inc
|
|
|
|
|
|
# Avoid CrashReporter popup on Mac.
|
|
--source include/not_crashrep.inc
|
|
|
|
let MYSQLD_BASEDIR= `SELECT @@basedir`;
|
|
let MYSQLD_DATADIR= `SELECT @@datadir`;
|
|
let SEARCH_FILE= $MYSQLTEST_VARDIR/log/my_restart.err;
|
|
|
|
SET GLOBAL innodb_file_per_table=on;
|
|
|
|
SHOW variables like '%innodb_checksum_algorithm%';
|
|
# Disable compression for this table
|
|
CREATE TABLE t1(c1 INT PRIMARY KEY,c2 VARCHAR(20)) COMPRESSION="none", ENGINE=InnoDB;
|
|
INSERT INTO t1 VALUES(1, 'Innochecksum InnoDB');
|
|
INSERT INTO t1 VALUES(2, 'Innochecksum CRC32');
|
|
|
|
--echo # Shutdown the Server
|
|
--source include/shutdown_mysqld.inc
|
|
|
|
# Test cases for read from standard input for innochecksum tool
|
|
--echo # Test[1(a)]: for read from standard input for innochecksum tool without rewrite of checksum with log option.
|
|
perl;
|
|
use strict;
|
|
use warnings;
|
|
my $innochecksum = $ENV{'INNOCHECKSUM'};
|
|
my $mysqltest_vardir= $ENV{'MYSQLTEST_VARDIR'};
|
|
my $mysqld_datadir= $ENV{'MYSQLD_DATADIR'};
|
|
exec("cat $mysqld_datadir/test/t1.ibd | $innochecksum --log='$mysqltest_vardir/tmp/mtrchecksum.log' -");
|
|
EOF
|
|
|
|
perl;
|
|
use strict;
|
|
use warnings;
|
|
use File::Copy;
|
|
my $dir = $ENV{'MYSQLTEST_VARDIR'};
|
|
my $file= 'mtrchecksum.log';
|
|
# open file in write mode
|
|
open IN_FILE,"<", "$dir/tmp/$file" or die $! ;
|
|
open OUT_FILE, ">", "$dir/tmp/tmpfile" or die $! ;
|
|
while(<IN_FILE>) {
|
|
# Replace all intergers to #
|
|
$_=~ s/\d+/#/g;
|
|
$_=~ s/crc#/crc32/g;
|
|
$_=~ s/Filename =.+/Filename = -/g;
|
|
print OUT_FILE $_;
|
|
}
|
|
close(IN_FILE);
|
|
close(OUT_FILE);
|
|
#move the new content from tmp file to the orginal file.
|
|
move ("$dir/tmp/tmpfile", "$dir/tmp/$file");
|
|
EOF
|
|
|
|
# Print the information for log option.
|
|
cat_file $MYSQLTEST_VARDIR/tmp/mtrchecksum.log;
|
|
--remove_file $MYSQLTEST_VARDIR/tmp/mtrchecksum.log
|
|
|
|
--echo # Test[1(b)]: for read from standard input for innochecksum tool Test checking for page: 3 to page:5
|
|
perl;
|
|
use strict;
|
|
use warnings;
|
|
my $innochecksum = $ENV{'INNOCHECKSUM'};
|
|
my $mysqltest_vardir= $ENV{'MYSQLTEST_VARDIR'};
|
|
my $mysqld_datadir= $ENV{'MYSQLD_DATADIR'};
|
|
exec("cat $mysqld_datadir/test/t1.ibd | $innochecksum --log='$mysqltest_vardir/tmp/mtrchecksum.log' -s 3 -e 5 -");
|
|
EOF
|
|
|
|
perl;
|
|
use strict;
|
|
use warnings;
|
|
use File::Copy;
|
|
my $dir = $ENV{'MYSQLTEST_VARDIR'};
|
|
my $file= 'mtrchecksum.log';
|
|
# open file in write mode
|
|
open IN_FILE,"<", "$dir/tmp/$file" or die $! ;
|
|
open OUT_FILE, ">", "$dir/tmp/tmpfile" or die $! ;
|
|
while(<IN_FILE>) {
|
|
# Replace all intergers to #
|
|
$_=~ s/\d+/#/g;
|
|
$_=~ s/crc#/crc32/g;
|
|
$_=~ s/Filename =.+/Filename = -/g;
|
|
$_=~ s/file .+ =/file - =/g;
|
|
print OUT_FILE $_;
|
|
}
|
|
close(IN_FILE);
|
|
close(OUT_FILE);
|
|
#move the new content from tmp file to the orginal file.
|
|
move ("$dir/tmp/tmpfile", "$dir/tmp/$file");
|
|
EOF
|
|
|
|
# Print the information for log option.
|
|
cat_file $MYSQLTEST_VARDIR/tmp/mtrchecksum.log;
|
|
--remove_file $MYSQLTEST_VARDIR/tmp/mtrchecksum.log
|
|
|
|
--echo # Test[1] End
|
|
--echo # Test [2] for read from standard input for innochecksum tool with rewrite of crc32 checksum.
|
|
let t1_IBD = $MYSQLD_DATADIR/test/t1.ibd;
|
|
--echo # Backup the t1.ibd before any rewrite of checksum, so used for further testing.
|
|
--copy_file $t1_IBD $MYSQLD_DATADIR/test/t1.ibd.backup
|
|
|
|
perl;
|
|
use strict;
|
|
use warnings;
|
|
my $innochecksum = $ENV{'INNOCHECKSUM'};
|
|
my $mysqltest_vardir= $ENV{'MYSQLTEST_VARDIR'};
|
|
my $mysqld_datadir= $ENV{'MYSQLD_DATADIR'};
|
|
exec("cat $mysqld_datadir/test/t1.ibd | $innochecksum --log='$mysqltest_vardir/tmp/mtrchecksum.log' --write=crc32 - > $mysqltest_vardir/tmp/a.ibd");
|
|
EOF
|
|
|
|
perl;
|
|
use strict;
|
|
use warnings;
|
|
use File::Copy;
|
|
my $dir = $ENV{'MYSQLTEST_VARDIR'};
|
|
my $file= 'mtrchecksum.log';
|
|
# open file in write mode
|
|
open IN_FILE,"<", "$dir/tmp/$file" or die $!;
|
|
open OUT_FILE, ">", "$dir/tmp/tmpfile" or die $!;
|
|
while(<IN_FILE>) {
|
|
# Replace all intergers to #
|
|
$_=~ s/\d+/#/g;
|
|
$_=~ s/crc#/crc32/g;
|
|
$_=~ s/Filename =.+/Filename = -/g;
|
|
$_=~ s/file .+ =/file t1.ibd =/g;
|
|
print OUT_FILE $_;
|
|
}
|
|
close(IN_FILE);
|
|
close(OUT_FILE);
|
|
# move the new content from tmp file to the orginal file.
|
|
move ("$dir/tmp/tmpfile", "$dir/tmp/$file");
|
|
EOF
|
|
--echo # Print the information for log option.
|
|
cat_file $MYSQLTEST_VARDIR/tmp/mtrchecksum.log;
|
|
--remove_file $MYSQLTEST_VARDIR/tmp/mtrchecksum.log
|
|
|
|
--echo # Recheck the a.ibd created file having crc32 checksum with the --strict-check=crc32 for innochecksum tool.
|
|
--exec $INNOCHECKSUM --log="$MYSQLTEST_VARDIR/tmp/mtrchecksum.log" --strict-check=crc32 $MYSQLTEST_VARDIR/tmp/a.ibd
|
|
|
|
perl;
|
|
use strict;
|
|
use warnings;
|
|
use File::Copy;
|
|
my $dir = $ENV{'MYSQLTEST_VARDIR'};
|
|
my $file= 'mtrchecksum.log';
|
|
# open file in write mode
|
|
open IN_FILE,"<", "$dir/tmp/$file" or die $!;
|
|
open OUT_FILE, ">", "$dir/tmp/tmpfile" or die $!;
|
|
while(<IN_FILE>) {
|
|
# Replace all intergers to #
|
|
$_=~ s/\d+/#/g;
|
|
$_=~ s/crc#/crc32/g;
|
|
$_=~ s/Filename =.+/Filename = a.ibd/g;
|
|
$_=~ s/file .+ =/file t1.ibd =/g;
|
|
print OUT_FILE $_;
|
|
}
|
|
close(IN_FILE);
|
|
close(OUT_FILE);
|
|
# move the new content from tmp file to the orginal file.
|
|
move ("$dir/tmp/tmpfile", "$dir/tmp/$file");
|
|
EOF
|
|
|
|
# Print the information for log option.
|
|
cat_file $MYSQLTEST_VARDIR/tmp/mtrchecksum.log;
|
|
--remove_file $MYSQLTEST_VARDIR/tmp/mtrchecksum.log
|
|
|
|
--echo #Replace the t.ibd with the newly created a.ibd having crc32 checksum.
|
|
--remove_file $MYSQLD_DATADIR/test/t1.ibd
|
|
--copy_file $MYSQLTEST_VARDIR/tmp/a.ibd $MYSQLD_DATADIR/test/t1.ibd
|
|
--remove_file $MYSQLTEST_VARDIR/tmp/a.ibd
|
|
|
|
--echo # Start the server to validate the t1.ibd having crc32 checksum.
|
|
--source include/start_mysqld.inc
|
|
|
|
select * from t1;
|
|
|
|
--echo # Shutdown the server
|
|
--source include/shutdown_mysqld.inc
|
|
|
|
--echo # Test[2] End
|
|
--echo # Test[3] for read from standard input for innochecksum tool with rewrite of "none" checksum.
|
|
|
|
--echo # Retrieve the original t1.ibd before any rewrite of checksum, so used for further testing.
|
|
--remove_file $t1_IBD
|
|
--copy_file $MYSQLD_DATADIR/test/t1.ibd.backup $t1_IBD
|
|
|
|
--echo # Check for innochecksum tool to read from stdin and rewrite the checksum to "none"
|
|
--echo # along with check for --verbose & --page-type-summary
|
|
perl;
|
|
use strict;
|
|
use warnings;
|
|
my $innochecksum = $ENV{'INNOCHECKSUM'};
|
|
my $vardir= $ENV{'MYSQLTEST_VARDIR'};
|
|
my $mysqld_datadir= $ENV{'MYSQLD_DATADIR'};
|
|
exec("cat $mysqld_datadir/test/t1.ibd | $innochecksum -v -S --log='$vardir/tmp/mtrchecksum.log' --write=none - > $vardir/tmp/a.ibd 2>$vardir/tmp/veroutput");
|
|
EOF
|
|
|
|
perl;
|
|
use strict;
|
|
use warnings;
|
|
use File::Copy;
|
|
my $dir = $ENV{'MYSQLTEST_VARDIR'};
|
|
my $file= 'mtrchecksum.log';
|
|
# open file in write mode
|
|
open IN_FILE,"<", "$dir/tmp/$file" or die $!;
|
|
open OUT_FILE, ">", "$dir/tmp/tmpfile" or die $!;
|
|
while(<IN_FILE>) {
|
|
# Replace all intergers to #
|
|
$_=~ s/\d+/#/g;
|
|
$_=~ s/crc#/crc32/g;
|
|
$_=~ s/Filename =.+/Filename = -/g;
|
|
$_=~ s/file .+ =/file - =/g;;
|
|
print OUT_FILE $_;
|
|
}
|
|
close(IN_FILE);
|
|
close(OUT_FILE);
|
|
# move the new content from tmp file to the orginal file.
|
|
move ("$dir/tmp/tmpfile", "$dir/tmp/$file");
|
|
|
|
$file= 'veroutput';
|
|
# open file in write mode
|
|
open IN_FILE,"<", "$dir/tmp/$file" or die $!;
|
|
open OUT_FILE, ">", "$dir/tmp/tmpfile" or die $!;
|
|
while(<IN_FILE>) {
|
|
unless ($_=~ /^debug.*$/) {
|
|
# Replace all intergers to #
|
|
$_=~ s/\d+/#/g;
|
|
$_=~ s/log(\s+)(.*log)/log$1mtrchecksum.log/g;
|
|
print OUT_FILE $_;
|
|
}
|
|
}
|
|
close(IN_FILE);
|
|
close(OUT_FILE);
|
|
# move the new content from tmp file to the orginal file.
|
|
move ("$dir/tmp/tmpfile", "$dir/tmp/$file");
|
|
EOF
|
|
--echo # Print the content for --verbose and --page-type-summary
|
|
cat_file $MYSQLTEST_VARDIR/tmp/veroutput;
|
|
--remove_file $MYSQLTEST_VARDIR/tmp/veroutput
|
|
|
|
--echo # Print the information for log option.
|
|
cat_file $MYSQLTEST_VARDIR/tmp/mtrchecksum.log;
|
|
--remove_file $MYSQLTEST_VARDIR/tmp/mtrchecksum.log
|
|
|
|
--echo # Recheck the a.ibd created file having crc32 checksum with the --strict-check=none for innochecksum tool.
|
|
--exec $INNOCHECKSUM --log="$MYSQLTEST_VARDIR/tmp/mtrchecksum.log" --strict-check=none $MYSQLTEST_VARDIR/tmp/a.ibd
|
|
|
|
perl;
|
|
use strict;
|
|
use warnings;
|
|
use File::Copy;
|
|
my $dir = $ENV{'MYSQLTEST_VARDIR'};
|
|
my $file= 'mtrchecksum.log';
|
|
# open file in write mode
|
|
open IN_FILE,"<", "$dir/tmp/$file" or die $!;
|
|
open OUT_FILE, ">", "$dir/tmp/tmpfile" or die $!;
|
|
while(<IN_FILE>) {
|
|
# Replace all intergers to #
|
|
$_=~ s/\d+/#/g;
|
|
$_=~ s/crc#/crc32/g;
|
|
$_=~ s/Filename =.+/Filename = a.ibd/g;
|
|
$_=~ s/file .+ =/file t1.ibd =/g;
|
|
print OUT_FILE $_;
|
|
}
|
|
close(IN_FILE);
|
|
close(OUT_FILE);
|
|
# move the new content from tmp file to the orginal file.
|
|
move ("$dir/tmp/tmpfile", "$dir/tmp/$file");
|
|
EOF
|
|
|
|
# Print the information for log option.
|
|
cat_file $MYSQLTEST_VARDIR/tmp/mtrchecksum.log;
|
|
--remove_file $MYSQLTEST_VARDIR/tmp/mtrchecksum.log
|
|
|
|
# Replace the t.ibd with the newly created a.ibd having "none" checksum.
|
|
--remove_file $MYSQLD_DATADIR/test/t1.ibd
|
|
--copy_file $MYSQLTEST_VARDIR/tmp/a.ibd $MYSQLD_DATADIR/test/t1.ibd
|
|
--remove_file $MYSQLTEST_VARDIR/tmp/a.ibd
|
|
|
|
--echo # Start the server to validate the t1.ibd having "none" checksum.
|
|
--source include/start_mysqld.inc
|
|
|
|
select * from t1;
|
|
|
|
--echo # Shutdown the server
|
|
--source include/shutdown_mysqld.inc
|
|
|
|
--echo # Test[3] End
|
|
|
|
--echo # Test[4] for read from standard input for innochecksum tool with rewrite of "innodb" checksum.
|
|
# Retrieve the original t1.ibd before any rewrite of checksum.
|
|
--remove_file $t1_IBD
|
|
--copy_file $MYSQLD_DATADIR/test/t1.ibd.backup $t1_IBD
|
|
|
|
--echo # Command for innochecksum tool to read from stdin and rewrite the checksum to "innodb"
|
|
perl;
|
|
use strict;
|
|
use warnings;
|
|
my $innochecksum = $ENV{'INNOCHECKSUM'};
|
|
my $mysqltest_vardir= $ENV{'MYSQLTEST_VARDIR'};
|
|
my $mysqld_datadir= $ENV{'MYSQLD_DATADIR'};
|
|
exec("cat $mysqld_datadir/test/t1.ibd | $innochecksum --log='$mysqltest_vardir/tmp/mtrchecksum.log' --write=innodb - > $mysqltest_vardir/tmp/a.ibd");
|
|
EOF
|
|
|
|
perl;
|
|
use strict;
|
|
use warnings;
|
|
use File::Copy;
|
|
my $dir = $ENV{'MYSQLTEST_VARDIR'};
|
|
my $file= 'mtrchecksum.log';
|
|
# open file in write mode
|
|
open IN_FILE,"<", "$dir/tmp/$file" or die $!;
|
|
open OUT_FILE, ">", "$dir/tmp/tmpfile" or die $!;
|
|
while(<IN_FILE>) {
|
|
# Replace all intergers to #
|
|
$_=~ s/\d+/#/g;
|
|
$_=~ s/crc#/crc32/g;
|
|
$_=~ s/Filename =.+/Filename = -/g;
|
|
$_=~ s/file .+ =/file - =/g;
|
|
print OUT_FILE $_;
|
|
}
|
|
close(IN_FILE);
|
|
close(OUT_FILE);
|
|
# move the new content from tmp file to the orginal file.
|
|
move ("$dir/tmp/tmpfile", "$dir/tmp/$file");
|
|
EOF
|
|
--echo # Print the information for log option.
|
|
cat_file $MYSQLTEST_VARDIR/tmp/mtrchecksum.log;
|
|
--remove_file $MYSQLTEST_VARDIR/tmp/mtrchecksum.log
|
|
|
|
--echo # Recheck the a.ibd created file having crc32 checksum with the --strict-check=innodb for innochecksum tool.
|
|
--exec $INNOCHECKSUM --log="$MYSQLTEST_VARDIR/tmp/mtrchecksum.log" --strict-check=innodb $MYSQLTEST_VARDIR/tmp/a.ibd
|
|
|
|
perl;
|
|
use strict;
|
|
use warnings;
|
|
use File::Copy;
|
|
my $dir = $ENV{'MYSQLTEST_VARDIR'};
|
|
my $file= 'mtrchecksum.log';
|
|
# open file in write mode
|
|
open IN_FILE,"<", "$dir/tmp/$file" or die $!;
|
|
open OUT_FILE, ">", "$dir/tmp/tmpfile" or die $!;
|
|
while(<IN_FILE>) {
|
|
# Replace all intergers to #
|
|
$_=~ s/\d+/#/g;
|
|
$_=~ s/crc#/crc32/g;
|
|
$_=~ s/Filename =.+/Filename = a.ibd/g;
|
|
$_=~ s/file .+ =/file t1.ibd =/g;
|
|
print OUT_FILE $_;
|
|
}
|
|
close(IN_FILE);
|
|
close(OUT_FILE);
|
|
# move the new content from tmp file to the orginal file.
|
|
move ("$dir/tmp/tmpfile", "$dir/tmp/$file");
|
|
EOF
|
|
|
|
# Print the information for log option.
|
|
cat_file $MYSQLTEST_VARDIR/tmp/mtrchecksum.log;
|
|
--remove_file $MYSQLTEST_VARDIR/tmp/mtrchecksum.log
|
|
|
|
--echo # Replace the t.ibd with the newly created a.ibd having "innodb" checksum.
|
|
--remove_file $MYSQLD_DATADIR/test/t1.ibd
|
|
--copy_file $MYSQLTEST_VARDIR/tmp/a.ibd $MYSQLD_DATADIR/test/t1.ibd
|
|
--remove_file $MYSQLTEST_VARDIR/tmp/a.ibd
|
|
|
|
--echo # Start the server to validate the t1.ibd having "innodb" checksum.
|
|
--source include/start_mysqld.inc
|
|
|
|
select * from t1;
|
|
|
|
--echo # Test[4] End
|
|
--remove_file $MYSQLD_DATADIR/test/t1.ibd.backup
|
|
|
|
--echo # Test[5] for lock.
|
|
--echo # Test Scenario: As mysqld is running, & then start the innochecksum which must fail.
|
|
|
|
--error 1
|
|
--exec $INNOCHECKSUM $MYSQLD_DATADIR/test/t1.ibd 2> $SEARCH_FILE
|
|
--replace_result $MYSQLD_DATADIR MYSQLD_DATADIR
|
|
let SEARCH_PATTERN=Error: Unable to lock file:: $MYSQLD_DATADIR/test/t1.ibd;
|
|
--source include/search_pattern.inc
|
|
|
|
let SEARCH_PATTERN=fcntl: Resource temporarily unavailable;
|
|
--source include/search_pattern.inc
|
|
--remove_file $SEARCH_FILE
|
|
|
|
--echo # Test[5] end
|
|
# cleanup
|
|
DROP TABLE t1;
|