diff options
Diffstat (limited to 'mysql-test/suite/innodb/t/alter_kill.test')
-rw-r--r-- | mysql-test/suite/innodb/t/alter_kill.test | 36 |
1 files changed, 27 insertions, 9 deletions
diff --git a/mysql-test/suite/innodb/t/alter_kill.test b/mysql-test/suite/innodb/t/alter_kill.test index daaac4bc0ee..2313d63db69 100644 --- a/mysql-test/suite/innodb/t/alter_kill.test +++ b/mysql-test/suite/innodb/t/alter_kill.test @@ -2,6 +2,7 @@ # The embedded server does not support restarting in mysql-test-run. -- source include/not_embedded.inc -- source include/no_valgrind_without_big.inc +-- source include/innodb_checksum_algorithm.inc let MYSQLD_DATADIR=`select @@datadir`; let PAGE_SIZE=`select @@innodb_page_size`; @@ -51,20 +52,29 @@ open(FILE, "+<$file") || die "Unable to open $file"; binmode FILE; my $ps= $ENV{PAGE_SIZE}; my $page; +die "Unable to read $file" unless sysread(FILE, $page, $ps) == $ps; +my $full_crc32 = unpack("N",substr($page,54,4)) & 0x10; # FIL_SPACE_FLAGS sysseek(FILE, 3*$ps, 0) || die "Unable to seek $file\n"; die "Unable to read $file" unless sysread(FILE, $page, $ps) == $ps; substr($page,4,4)=pack("N",0xc001cafe); my $polynomial = 0x82f63b78; # CRC-32C -my $ck= pack("N",mycrc32(substr($page, 4, 22), 0, $polynomial) ^ +if ($full_crc32) +{ + my $ck = mycrc32(substr($page, 0, $ps-4), 0, $polynomial); + substr($page, $ps-4, 4) = pack("N", $ck); +} +else +{ + my $ck= pack("N",mycrc32(substr($page, 4, 22), 0, $polynomial) ^ mycrc32(substr($page, 38, $ps - 38 - 8), 0, $polynomial)); -substr($page,0,4)=$ck; -substr($page,$ps-8,4)=$ck; + substr($page,0,4)=$ck; + substr($page,$ps-8,4)=$ck; +} sysseek(FILE, 3*$ps, 0) || die "Unable to rewind $file\n"; syswrite(FILE, $page, $ps)==$ps || die "Unable to write $file\n"; close(FILE) || die "Unable to close $file"; EOF --- echo # Restart mysqld -- source include/start_mysqld.inc --error ER_NO_SUCH_TABLE_IN_ENGINE @@ -84,21 +94,29 @@ open(FILE, "+<$file") || die "Unable to open $file"; binmode FILE; my $ps= $ENV{PAGE_SIZE}; my $page; +die "Unable to read $file" unless sysread(FILE, $page, $ps) == $ps; +my $full_crc32 = unpack("N",substr($page,54,4)) & 0x10; # FIL_SPACE_FLAGS sysseek(FILE, 3*$ps, 0) || die "Unable to seek $file\n"; die "Unable to read $file" unless sysread(FILE, $page, $ps) == $ps; substr($page,4,4)=pack("N",3); my $polynomial = 0x82f63b78; # CRC-32C -my $ck= pack("N",mycrc32(substr($page, 4, 22), 0, $polynomial) ^ +if ($full_crc32) +{ + my $ck = mycrc32(substr($page, 0, $ps-4), 0, $polynomial); + substr($page, $ps-4, 4) = pack("N", $ck); +} +else +{ + my $ck= pack("N",mycrc32(substr($page, 4, 22), 0, $polynomial) ^ mycrc32(substr($page, 38, $ps - 38 - 8), 0, $polynomial)); -substr($page,0,4)=$ck; -substr($page,$ps-8,4)=$ck; + substr($page,0,4)=$ck; + substr($page,$ps-8,4)=$ck; +} sysseek(FILE, 3*$ps, 0) || die "Unable to rewind $file\n"; syswrite(FILE, $page, $ps)==$ps || die "Unable to write $file\n"; close(FILE) || die "Unable to close $file"; EOF --- echo # Restart the server after uncorrupting the file. - -- source include/start_mysqld.inc INSERT INTO bug16720368 VALUES(9,1); |