diff options
author | Jan Lindström <jan.lindstrom@mariadb.com> | 2017-08-04 13:11:05 +0300 |
---|---|---|
committer | Jan Lindström <jan.lindstrom@mariadb.com> | 2017-08-07 12:39:38 +0300 |
commit | 2ef7a5a13a988842450cbeeaceaf0ea1a78a3c27 (patch) | |
tree | f829131f9dbc4afbda264ec977a1c50dfe336ebf /mysql-test/suite/innodb | |
parent | 19f2b3d02f1ae8028bcc388e9fd161737056f1fe (diff) | |
download | mariadb-git-2ef7a5a13a988842450cbeeaceaf0ea1a78a3c27.tar.gz |
MDEV-13443: Port innochecksum tests from 10.2 innodb_zip suite to 10.1
This is basically port of WL6045:Improve Innochecksum with some
code refactoring on innochecksum.
Added page0size.h include from 10.2 to make 10.1 vrs 10.2 innochecksum
as identical as possible.
Added page 0 checksum checking and if that fails whole test fails.
Diffstat (limited to 'mysql-test/suite/innodb')
10 files changed, 1273 insertions, 0 deletions
diff --git a/mysql-test/suite/innodb/include/innodb-wl6045.inc b/mysql-test/suite/innodb/include/innodb-wl6045.inc new file mode 100644 index 00000000000..33a2ecd731f --- /dev/null +++ b/mysql-test/suite/innodb/include/innodb-wl6045.inc @@ -0,0 +1,22 @@ +--echo ===> Testing size=$size +--disable_warnings +--eval CREATE TABLE t1(id INT AUTO_INCREMENT PRIMARY KEY, msg VARCHAR(255)) ENGINE=INNODB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=$size +--enable_warnings + +insert into t1 values(1,"I"); +insert into t1 values(2,"AM"); +insert into t1 values(3,"COMPRESSED"); + +--source include/shutdown_mysqld.inc + +#STOP; + +--exec $INNOCHECKSUM $MYSQLD_DATADIR/test/t1.ibd +--exec $INNOCHECKSUM --write=crc32 $MYSQLD_DATADIR/test/t1.ibd +--exec $INNOCHECKSUM --strict-check=crc32 $MYSQLD_DATADIR/test/t1.ibd +--exec $INNOCHECKSUM --write=none $MYSQLD_DATADIR/test/t1.ibd +--exec $INNOCHECKSUM --strict-check=none $MYSQLD_DATADIR/test/t1.ibd + +--source include/start_mysqld.inc +select * from t1; +drop table t1; diff --git a/mysql-test/suite/innodb/r/innodb_zip_innochecksum.result b/mysql-test/suite/innodb/r/innodb_zip_innochecksum.result new file mode 100644 index 00000000000..ff1bccfb60c --- /dev/null +++ b/mysql-test/suite/innodb/r/innodb_zip_innochecksum.result @@ -0,0 +1,91 @@ +# Set the environmental variables +call mtr.add_suppression("InnoDB: Unable to read tablespace .* page no .* into the buffer pool after 100 attempts"); +call mtr.add_suppression("InnoDB: Warning: database page corruption or a failed"); +CREATE TABLE tab1(c1 INT PRIMARY KEY,c2 VARCHAR(20)) ENGINE=InnoDB; +CREATE INDEX idx1 ON tab1(c2(10)); +INSERT INTO tab1 VALUES(1, 'Innochecksum InnoDB1'); +CREATE TABLE t1(id INT AUTO_INCREMENT PRIMARY KEY, msg VARCHAR(255)) ENGINE=INNODB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=4; +insert into t1 values(1,"i"); +insert into t1 values(2,"am"); +insert into t1 values(3,"compressed table"); +# Shutdown the Server +# Server Default checksum = innodb +[1b]: check the innochecksum without --strict-check +[2]: check the innochecksum with full form --strict-check=crc32 +[3]: check the innochecksum with short form -C crc32 +[4]: check the innochecksum with --no-check ignores algorithm check, warning is expected +FOUND /Error: --no-check must be associated with --write option./ in my_restart.err +[5]: check the innochecksum with short form --no-check ignores algorithm check, warning is expected +FOUND /Error: --no-check must be associated with --write option./ in my_restart.err +[6]: check the innochecksum with full form strict-check & no-check , an error is expected +FOUND /Error: --strict-check option cannot be used together with --no-check option./ in my_restart.err +[7]: check the innochecksum with short form strict-check & no-check , an error is expected +FOUND /Error: --strict-check option cannot be used together with --no-check option./ in my_restart.err +[8]: check the innochecksum with short & full form combination +# strict-check & no-check, an error is expected +FOUND /Error: --strict-check option cannot be used together with --no-check option./ in my_restart.err +[9]: check the innochecksum with full form --strict-check=innodb +[10]: check the innochecksum with full form --strict-check=none +# when server Default checksum=crc32 +[11]: check the innochecksum with short form -C innodb +# when server Default checksum=crc32 +[12]: check the innochecksum with short form -C none +# when server Default checksum=crc32 +[13]: check strict-check with invalid values +FOUND /Error while setting value \'strict_innodb\' to \'strict-check\'/ in my_restart.err +FOUND /Error while setting value \'strict_innodb\' to \'strict-check\'/ in my_restart.err +FOUND /Error while setting value \'strict_crc32\' to \'strict-check\'/ in my_restart.err +FOUND /Error while setting value \'strict_crc32\' to \'strict-check\'/ in my_restart.err +FOUND /Error while setting value \'strict_none\' to \'strict-check\'/ in my_restart.err +FOUND /Error while setting value \'strict_none\' to \'strict-check\'/ in my_restart.err +FOUND /Error while setting value \'InnoBD\' to \'strict-check\'/ in my_restart.err +FOUND /Error while setting value \'InnoBD\' to \'strict-check\'/ in my_restart.err +FOUND /Error while setting value \'crc\' to \'strict-check\'/ in my_restart.err +FOUND /Error while setting value \'no\' to \'strict-check\'/ in my_restart.err +[14a]: when server default checksum=crc32 rewrite new checksum=crc32 with innochecksum +# Also check the long form of write option. +[14b]: when server default checksum=crc32 rewrite new checksum=innodb with innochecksum +# Also check the long form of write option. +# start the server with innodb_checksum_algorithm=InnoDB +INSERT INTO tab1 VALUES(2, 'Innochecksum CRC32'); +SELECT c1,c2 FROM tab1 order by c1,c2; +c1 c2 +1 Innochecksum InnoDB1 +2 Innochecksum CRC32 +# Stop the server +[15]: when server default checksum=crc32 rewrite new checksum=none with innochecksum +# Also check the short form of write option. +# Start the server with checksum algorithm=none +INSERT INTO tab1 VALUES(3, 'Innochecksum None'); +SELECT c1,c2 FROM tab1 order by c1,c2; +c1 c2 +1 Innochecksum InnoDB1 +2 Innochecksum CRC32 +3 Innochecksum None +DROP TABLE t1; +# Stop the server +[16]: rewrite into new checksum=crc32 with innochecksum +# Restart the DB server with innodb_checksum_algorithm=crc32 +SELECT * FROM tab1; +c1 c2 +1 Innochecksum InnoDB1 +2 Innochecksum CRC32 +3 Innochecksum None +DELETE FROM tab1 where c1=3; +SELECT c1,c2 FROM tab1 order by c1,c2; +c1 c2 +1 Innochecksum InnoDB1 +2 Innochecksum CRC32 +# Stop server +[17]: rewrite into new checksum=InnoDB +# Restart the DB server with innodb_checksum_algorithm=InnoDB +DELETE FROM tab1 where c1=2; +SELECT * FROM tab1; +c1 c2 +1 Innochecksum InnoDB1 +# Stop server +[18]:check Innochecksum with invalid write options +FOUND /Error while setting value \'strict_crc32\' to \'write\'/ in my_restart.err +FOUND /Error while setting value \'strict_innodb\' to \'write\'/ in my_restart.err +FOUND /Error while setting value \'crc23\' to \'write\'/ in my_restart.err +DROP TABLE tab1; diff --git a/mysql-test/suite/innodb/r/innodb_zip_innochecksum2.result b/mysql-test/suite/innodb/r/innodb_zip_innochecksum2.result new file mode 100644 index 00000000000..582bb42f0cb --- /dev/null +++ b/mysql-test/suite/innodb/r/innodb_zip_innochecksum2.result @@ -0,0 +1,160 @@ +SET GLOBAL innodb_compression_level=0; +SELECT @@innodb_compression_level; +@@innodb_compression_level +0 +CREATE TABLE t1 (j LONGBLOB) ENGINE = InnoDB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=1; +INSERT INTO t1 VALUES (repeat('abcdefghijklmnopqrstuvwxyz',200)); +INSERT INTO t1 SELECT * from t1; +INSERT INTO t1 SELECT * from t1; +INSERT INTO t1 SELECT * from t1; +INSERT INTO t1 SELECT * from t1; +INSERT INTO t1 SELECT * from t1; +INSERT INTO t1 SELECT * from t1; +INSERT INTO t1 SELECT * from t1; +INSERT INTO t1 SELECT * from t1; +INSERT INTO t1 SELECT * from t1; +INSERT INTO t1 SELECT * from t1; +# stop the server + +Variables (--variable-name=value) +and boolean options {FALSE|TRUE} Value (after reading options) +--------------------------------- ---------------------------------------- +verbose TRUE +debug FALSE +count FALSE +start-page 0 +end-page 0 +page 0 +strict-check crc32 +no-check FALSE +allow-mismatches 0 +write crc32 +page-type-summary FALSE +page-type-dump MYSQLTEST_VARDIR/tmp/dump.txt +per-page-details FALSE +log (No default value) +leaf FALSE +merge 0 +[1]:# check the both short and long options for "help" +[2]:# Run the innochecksum when file isn't provided. +# It will print the innochecksum usage similar to --help option. +innochecksum Ver #.#.# +Copyright (c) YEAR, YEAR , Oracle, MariaDB Corporation Ab and others. + +InnoDB offline file checksum utility. +Usage: innochecksum [-c] [-s <start page>] [-e <end page>] [-p <page>] [-i] [-v] [-a <allow mismatches>] [-n] [-C <strict-check>] [-w <write>] [-S] [-D <page type dump>] [-l <log>] [-l] [-m <merge pages>] <filename or [-]> + -?, --help Displays this help and exits. + -I, --info Synonym for --help. + -V, --version Displays version information and exits. + -v, --verbose Verbose (prints progress every 5 seconds). + -c, --count Print the count of pages in the file and exits. + -s, --start-page=# Start on this page number (0 based). + -e, --end-page=# End at this page number (0 based). + -p, --page=# Check only this page (0 based). + -C, --strict-check=name + Specify the strict checksum algorithm by the user.. One + of: crc32, crc32, innodb, innodb, none, none + -n, --no-check Ignore the checksum verification. + -a, --allow-mismatches=# + Maximum checksum mismatch allowed. + -w, --write=name Rewrite the checksum algorithm by the user.. One of: + crc32, crc32, innodb, innodb, none, none + -S, --page-type-summary + Display a count of each page type in a tablespace. + -D, --page-type-dump=name + Dump the page type info for each page in a tablespace. + -i, --per-page-details + Print out per-page detail information. + -l, --log=name log output. + -f, --leaf Examine leaf index pages + -m, --merge=# leaf page count if merge given number of consecutive + pages + +Variables (--variable-name=value) +and boolean options {FALSE|TRUE} Value (after reading options) +--------------------------------- ---------------------------------------- +verbose FALSE +count FALSE +start-page 0 +end-page 0 +page 0 +strict-check crc32 +no-check FALSE +allow-mismatches 0 +write crc32 +page-type-summary FALSE +page-type-dump (No default value) +per-page-details FALSE +log (No default value) +leaf FALSE +merge 0 +[3]:# check the both short and long options for "count" and exit +Number of pages:# +Number of pages:# +[4]:# Print the version of innochecksum and exit +innochecksum Ver #.#.## Restart the DB server +DROP TABLE t1; +[5]:# Check the innochecksum for compressed table t1 with different key_block_size +# Test for KEY_BLOCK_SIZE=1 +===> Testing size=1 +CREATE TABLE t1(id INT AUTO_INCREMENT PRIMARY KEY, msg VARCHAR(255)) ENGINE=INNODB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=1; +insert into t1 values(1,"I"); +insert into t1 values(2,"AM"); +insert into t1 values(3,"COMPRESSED"); +select * from t1; +id msg +1 I +2 AM +3 COMPRESSED +drop table t1; +# Test for KEY_BLOCK_SIZE=2 +===> Testing size=2 +CREATE TABLE t1(id INT AUTO_INCREMENT PRIMARY KEY, msg VARCHAR(255)) ENGINE=INNODB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=2; +insert into t1 values(1,"I"); +insert into t1 values(2,"AM"); +insert into t1 values(3,"COMPRESSED"); +select * from t1; +id msg +1 I +2 AM +3 COMPRESSED +drop table t1; +# Test for for KEY_BLOCK_SIZE=4 +===> Testing size=4 +CREATE TABLE t1(id INT AUTO_INCREMENT PRIMARY KEY, msg VARCHAR(255)) ENGINE=INNODB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=4; +insert into t1 values(1,"I"); +insert into t1 values(2,"AM"); +insert into t1 values(3,"COMPRESSED"); +select * from t1; +id msg +1 I +2 AM +3 COMPRESSED +drop table t1; +set innodb_strict_mode=off; +# Test for for KEY_BLOCK_SIZE=8 +===> Testing size=8 +CREATE TABLE t1(id INT AUTO_INCREMENT PRIMARY KEY, msg VARCHAR(255)) ENGINE=INNODB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8; +insert into t1 values(1,"I"); +insert into t1 values(2,"AM"); +insert into t1 values(3,"COMPRESSED"); +select * from t1; +id msg +1 I +2 AM +3 COMPRESSED +drop table t1; +set innodb_strict_mode=off; +# Test for KEY_BLOCK_SIZE=16 +===> Testing size=16 +CREATE TABLE t1(id INT AUTO_INCREMENT PRIMARY KEY, msg VARCHAR(255)) ENGINE=INNODB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=16; +insert into t1 values(1,"I"); +insert into t1 values(2,"AM"); +insert into t1 values(3,"COMPRESSED"); +select * from t1; +id msg +1 I +2 AM +3 COMPRESSED +drop table t1; +# Test[5] completed diff --git a/mysql-test/suite/innodb/r/innodb_zip_innochecksum3.result b/mysql-test/suite/innodb/r/innodb_zip_innochecksum3.result new file mode 100644 index 00000000000..03e8b5df75f --- /dev/null +++ b/mysql-test/suite/innodb/r/innodb_zip_innochecksum3.result @@ -0,0 +1,227 @@ +# Set the environmental variables +call mtr.add_suppression("InnoDB: Unable to read tablespace .* page no .* into the buffer pool after 100 attempts"); +call mtr.add_suppression("InnoDB: innodb_checksum_algorithm is set to.*"); +[1]: Further Test are for rewrite checksum (innodb|crc32|none) for all ibd file & start the server. +CREATE TABLE tab1 (pk INTEGER NOT NULL PRIMARY KEY, +linestring_key GEOMETRY NOT NULL, +linestring_nokey GEOMETRY NOT NULL) +ENGINE=InnoDB ; +INSERT INTO tab1 (pk, linestring_key, linestring_nokey) +VALUES (1, ST_GeomFromText('POINT(10 10) '), ST_GeomFromText('POINT(10 10) ')); +CREATE INDEX linestring_index ON tab1(linestring_nokey(5)); +ALTER TABLE tab1 ADD KEY (linestring_key(5)); +# create a compressed table +CREATE TABLE tab2(col_1 CHAR (255) , +col_2 VARCHAR (255), col_3 longtext, +col_4 longtext,col_5 longtext, +col_6 longtext , col_7 int ) +engine = innodb row_format=compressed key_block_size=4; +CREATE INDEX idx1 ON tab2(col_3(10)); +CREATE INDEX idx2 ON tab2(col_4(10)); +CREATE INDEX idx3 ON tab2(col_5(10)); +SET @col_1 = repeat('a', 5); +SET @col_2 = repeat('b', 20); +SET @col_3 = repeat('c', 100); +SET @col_4 = repeat('d', 100); +SET @col_5 = repeat('e', 100); +SET @col_6 = repeat('f', 100); +INSERT INTO tab2(col_1,col_2,col_3,col_4,col_5,col_6,col_7) +VALUES (@col_1,@col_2,@col_3,@col_4,@cl_5,@col_6,5); +INSERT INTO tab2(col_1,col_2,col_3,col_4,col_5,col_6,col_7) +VALUES (@col_1,@col_2,@col_3,@col_4,@cl_5,@col_6,4); +INSERT INTO tab2(col_1,col_2,col_3,col_4,col_5,col_6,col_7) +VALUES (@col_1,@col_2,@col_3,@col_4,@cl_5,@col_6,3); +INSERT INTO tab2(col_1,col_2,col_3,col_4,col_5,col_6,col_7) +VALUES (@col_1,@col_2,@col_3,@col_4,@cl_5,@col_6,2); +INSERT INTO tab2(col_1,col_2,col_3,col_4,col_5,col_6,col_7) +VALUES (@col_1,@col_2,@col_3,@col_4,@cl_5,@col_6,1); +SELECT * FROM tab2 ORDER BY col_7; +# stop the server +[1(a)]: Rewrite into new checksum=InnoDB for all *.ibd file and ibdata1 +: start the server with innodb_checksum_algorithm=strict_innodb +INSERT INTO tab1 (pk, linestring_key, linestring_nokey) +VALUES (2, ST_GeomFromText('LINESTRING(10 10,20 20,30 30)'), ST_GeomFromText('LINESTRING(10 10,20 20,30 30)')); +SET @col_1 = repeat('a', 5); +SET @col_2 = repeat('b', 20); +SET @col_3 = repeat('c', 100); +SET @col_4 = repeat('d', 100); +SET @col_5 = repeat('e', 100); +SET @col_6 = repeat('f', 100); +INSERT INTO tab2(col_1,col_2,col_3,col_4,col_5,col_6,col_7) +VALUES (@col_1,@col_2,@col_3,@col_4,@cl_5,@col_6,6); +SELECT pk,ST_AsText(linestring_key),ST_AsText(linestring_nokey) +FROM tab1 ORDER BY pk; +SELECT * FROM tab2 ORDER BY col_7; +# stop the server +[1(b)]: Rewrite into new checksum=crc32 for all *.ibd file and ibdata1 +# start the server with innodb_checksum_algorithm=strict_crc32 +INSERT INTO tab1 (pk, linestring_key, linestring_nokey) +VALUES (3, ST_GeomFromText('POLYGON((0 0,5 5,10 10,15 15,0 0),(10 10,20 20,30 30,40 40,10 10))'), +ST_GeomFromText('POLYGON((0 0,5 5,10 10,15 15,0 0),(10 10,20 20,30 30,40 40,10 10))')); +SET @col_1 = repeat('g', 5); +SET @col_2 = repeat('h', 20); +SET @col_3 = repeat('i', 100); +SET @col_4 = repeat('j', 100); +SET @col_5 = repeat('k', 100); +SET @col_6 = repeat('l', 100); +INSERT INTO tab2(col_1,col_2,col_3,col_4,col_5,col_6,col_7) +VALUES (@col_1,@col_2,@col_3,@col_4,@cl_5,@col_6,7); +SELECT pk,ST_AsText(linestring_key),ST_AsText(linestring_nokey) +FROM tab1 ORDER BY pk; +SELECT * FROM tab2 ORDER BY col_7; +# stop the server +[1(c)]: Rewrite into new checksum=none for all *.ibd file and ibdata1 +INSERT INTO tab1 (pk, linestring_key, linestring_nokey) +VALUES (4, ST_GeomFromText('MULTIPOINT(0 0,5 5,10 10,20 20) '), ST_GeomFromText('MULTIPOINT(0 0,5 5,10 10,20 20) ')); +SET @col_1 = repeat('m', 5); +SET @col_2 = repeat('n', 20); +SET @col_3 = repeat('o', 100); +SET @col_4 = repeat('p', 100); +SET @col_5 = repeat('q', 100); +SET @col_6 = repeat('r', 100); +INSERT INTO tab2(col_1,col_2,col_3,col_4,col_5,col_6,col_7) +VALUES (@col_1,@col_2,@col_3,@col_4,@cl_5,@col_6,8); +SELECT pk,ST_AsText(linestring_key),ST_AsText(linestring_nokey) +FROM tab1 ORDER BY pk; +SELECT * FROM tab2 ORDER BY col_7; +# stop the server +[2]: Check the page type summary with shortform for tab1.ibd + +File::tab#.ibd +================PAGE TYPE SUMMARY============== +#PAGE_COUNT PAGE_TYPE +=============================================== + # Index page + # Undo log page + # Inode page + # Insert buffer free list page + # Freshly allocated page + # Insert buffer bitmap + # System page + # Transaction system page + # File Space Header + # Extent descriptor page + # BLOB page + # Compressed BLOB page + # Page compressed page + # Page compressed encrypted page + # Other type of page + +=============================================== +Additional information: +Undo page type: # insert, # update, # other +Undo page state: # active, # cached, # to_free, # to_purge, # prepared, # other +index_id #pages #leaf_pages #recs_per_page #bytes_per_page +# # # # # +# # # # # +# # # # # + +index_id page_data_bytes_histgram(empty,...,oversized) +# # # # # # # # # # # # # +# # # # # # # # # # # # # +# # # # # # # # # # # # # +[3]: Check the page type summary with longform for tab1.ibd + +File::tab#.ibd +================PAGE TYPE SUMMARY============== +#PAGE_COUNT PAGE_TYPE +=============================================== + # Index page + # Undo log page + # Inode page + # Insert buffer free list page + # Freshly allocated page + # Insert buffer bitmap + # System page + # Transaction system page + # File Space Header + # Extent descriptor page + # BLOB page + # Compressed BLOB page + # Page compressed page + # Page compressed encrypted page + # Other type of page + +=============================================== +Additional information: +Undo page type: # insert, # update, # other +Undo page state: # active, # cached, # to_free, # to_purge, # prepared, # other +index_id #pages #leaf_pages #recs_per_page #bytes_per_page +# # # # # +# # # # # +# # # # # + +index_id page_data_bytes_histgram(empty,...,oversized) +# # # # # # # # # # # # # +# # # # # # # # # # # # # +# # # # # # # # # # # # # +[4]: Page type dump for with longform for tab1.ibd +# Print the contents stored in dump.txt + + +Filename::tab#.ibd +============================================================================== + PAGE_NO | PAGE_TYPE | EXTRA INFO +============================================================================== +#::# | File Space Header | - +#::# | Insert Buffer Bitmap | - +#::# | Inode page | - +#::# | Index page | index id=#, page level=#, No. of records=#, garbage=#, - +#::# | Index page | index id=#, page level=#, No. of records=#, garbage=#, - +#::# | Index page | index id=#, page level=#, No. of records=#, garbage=#, - +#::# | Freshly allocated page | - +#::# | Freshly allocated page | - +# Variables used by page type dump for ibdata1 + +Variables (--variable-name=value) +and boolean options {FALSE|TRUE} Value (after reading options) +--------------------------------- ---------------------------------------- +verbose TRUE +count FALSE +start-page 0 +end-page 0 +page 0 +strict-check crc32 +no-check FALSE +allow-mismatches 0 +write crc32 +page-type-summary FALSE +page-type-dump MYSQLTEST_VARDIR/tmp/dump.txt +per-page-details FALSE +log (No default value) +leaf FALSE +merge 0 +[5]: Page type dump for with shortform for tab1.ibd + + +Filename::tab#.ibd +============================================================================== + PAGE_NO | PAGE_TYPE | EXTRA INFO +============================================================================== +#::# | File Space Header | - +#::# | Insert Buffer Bitmap | - +#::# | Inode page | - +#::# | Index page | index id=#, page level=#, No. of records=#, garbage=#, - +#::# | Index page | index id=#, page level=#, No. of records=#, garbage=#, - +#::# | Index page | index id=#, page level=#, No. of records=#, garbage=#, - +#::# | Freshly allocated page | - +#::# | Freshly allocated page | - +[6]: check the valid lower bound values for option +# allow-mismatches,page,start-page,end-page +[9]: check the both short and long options "page" and "start-page" when +# seek value is larger than file size. +FOUND /Error: Unable to seek to necessary offset: Invalid argument/ in my_restart.err +FOUND /Error: Unable to seek to necessary offset: Invalid argument/ in my_restart.err +FOUND /Error: Unable to seek to necessary offset: Invalid argument/ in my_restart.err +FOUND /Error: Unable to seek to necessary offset: Invalid argument/ in my_restart.err +[34]: check the invalid upper bound values for options, allow-mismatches, end-page, start-page and page. +# innochecksum will fail with error code: 1 +NOT FOUND /Incorrect unsigned integer value: '18446744073709551616'/ in my_restart.err +NOT FOUND /Incorrect unsigned integer value: '18446744073709551616'/ in my_restart.err +NOT FOUND /Incorrect unsigned integer value: '18446744073709551616'/ in my_restart.err +NOT FOUND /Incorrect unsigned integer value: '18446744073709551616'/ in my_restart.err +NOT FOUND /Incorrect unsigned integer value: '18446744073709551616'/ in my_restart.err +NOT FOUND /Incorrect unsigned integer value: '18446744073709551616'/ in my_restart.err +NOT FOUND /Incorrect unsigned integer value: '18446744073709551616'/ in my_restart.err +NOT FOUND /Incorrect unsigned integer value: '18446744073709551616'/ in my_restart.err +DROP TABLE tab1,tab2; diff --git a/mysql-test/suite/innodb/t/innodb_zip_innochecksum.opt b/mysql-test/suite/innodb/t/innodb_zip_innochecksum.opt new file mode 100644 index 00000000000..f8c8c9d247d --- /dev/null +++ b/mysql-test/suite/innodb/t/innodb_zip_innochecksum.opt @@ -0,0 +1,4 @@ +--skip-innodb-doublewrite +--innodb-file-per-table +--innodb-file-format=Barracuda + diff --git a/mysql-test/suite/innodb/t/innodb_zip_innochecksum.test b/mysql-test/suite/innodb/t/innodb_zip_innochecksum.test new file mode 100644 index 00000000000..63a4b418677 --- /dev/null +++ b/mysql-test/suite/innodb/t/innodb_zip_innochecksum.test @@ -0,0 +1,239 @@ +#************************************************************ +# WL6045:Improve Innochecksum +#************************************************************ +--source include/innodb_page_size_small.inc +--source include/no_valgrind_without_big.inc +# Embedded server does not support crashing. +--source include/not_embedded.inc + +# Avoid CrashReporter popup on Mac. +--source include/not_crashrep.inc + +--echo # Set the environmental variables +let MYSQLD_BASEDIR= `SELECT @@basedir`; +let MYSQLD_DATADIR= `SELECT @@datadir`; +let SEARCH_FILE= $MYSQLTEST_VARDIR/log/my_restart.err; +call mtr.add_suppression("InnoDB: Unable to read tablespace .* page no .* into the buffer pool after 100 attempts"); +call mtr.add_suppression("InnoDB: Warning: database page corruption or a failed"); + +CREATE TABLE tab1(c1 INT PRIMARY KEY,c2 VARCHAR(20)) ENGINE=InnoDB; +CREATE INDEX idx1 ON tab1(c2(10)); +INSERT INTO tab1 VALUES(1, 'Innochecksum InnoDB1'); +CREATE TABLE t1(id INT AUTO_INCREMENT PRIMARY KEY, msg VARCHAR(255)) ENGINE=INNODB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=4; +insert into t1 values(1,"i"); +insert into t1 values(2,"am"); +insert into t1 values(3,"compressed table"); + +--echo # Shutdown the Server +--source include/shutdown_mysqld.inc +--echo # Server Default checksum = innodb + +# +# Not repeatable with --parallel= >1 +# +#--echo [1a]: check the innochecksum when file doesn't exists +#--error 1 +#--exec $INNOCHECKSUM $MYSQLD_DATADIR/test/aa.ibd 2> $SEARCH_FILE +#let SEARCH_PATTERN= Error: $MYSQLD_DATADIR/test/aa.ibd cannot be found; +#--source include/search_pattern_in_file.inc + +--echo [1b]: check the innochecksum without --strict-check +--exec $INNOCHECKSUM $MYSQLD_DATADIR/test/tab1.ibd + +--echo [2]: check the innochecksum with full form --strict-check=crc32 +--exec $INNOCHECKSUM --strict-check=crc32 $MYSQLD_DATADIR/test/tab1.ibd + +--echo [3]: check the innochecksum with short form -C crc32 +--exec $INNOCHECKSUM -C crc32 $MYSQLD_DATADIR/test/tab1.ibd + +--echo [4]: check the innochecksum with --no-check ignores algorithm check, warning is expected +--error 1 +--exec $INNOCHECKSUM --no-check $MYSQLD_DATADIR/test/tab1.ibd 2> $SEARCH_FILE +let SEARCH_PATTERN= Error: --no-check must be associated with --write option.; +--source include/search_pattern_in_file.inc + +--echo [5]: check the innochecksum with short form --no-check ignores algorithm check, warning is expected +--error 1 +--exec $INNOCHECKSUM -n $MYSQLD_DATADIR/test/tab1.ibd 2> $SEARCH_FILE +let SEARCH_PATTERN= Error: --no-check must be associated with --write option.; +--source include/search_pattern_in_file.inc + +--echo [6]: check the innochecksum with full form strict-check & no-check , an error is expected +--error 1 +--exec $INNOCHECKSUM --strict-check=innodb --no-check $MYSQLD_DATADIR/test/tab1.ibd 2> $SEARCH_FILE +let SEARCH_PATTERN= Error: --strict-check option cannot be used together with --no-check option.; +--source include/search_pattern_in_file.inc + +--echo [7]: check the innochecksum with short form strict-check & no-check , an error is expected +--error 1 +--exec $INNOCHECKSUM -C innodb -n $MYSQLD_DATADIR/test/tab1.ibd 2> $SEARCH_FILE +let SEARCH_PATTERN= Error: --strict-check option cannot be used together with --no-check option.; +--source include/search_pattern_in_file.inc + +--echo [8]: check the innochecksum with short & full form combination +--echo # strict-check & no-check, an error is expected +--error 1 +--exec $INNOCHECKSUM --strict-check=innodb -n $MYSQLD_DATADIR/test/tab1.ibd 2> $SEARCH_FILE +let SEARCH_PATTERN= Error: --strict-check option cannot be used together with --no-check option.; +--source include/search_pattern_in_file.inc + +--echo [9]: check the innochecksum with full form --strict-check=innodb +# Server Default checksum = crc32 +--exec $INNOCHECKSUM --strict-check=innodb $MYSQLD_DATADIR/test/tab1.ibd 2> $SEARCH_FILE + +--echo [10]: check the innochecksum with full form --strict-check=none +--echo # when server Default checksum=crc32 +--exec $INNOCHECKSUM --strict-check=none $MYSQLD_DATADIR/test/tab1.ibd 2> $SEARCH_FILE + +--echo [11]: check the innochecksum with short form -C innodb +--echo # when server Default checksum=crc32 +--exec $INNOCHECKSUM -C innodb $MYSQLD_DATADIR/test/tab1.ibd 2> $SEARCH_FILE + +--echo [12]: check the innochecksum with short form -C none +--echo # when server Default checksum=crc32 +--exec $INNOCHECKSUM -C none $MYSQLD_DATADIR/test/tab1.ibd 2> $SEARCH_FILE + +--echo [13]: check strict-check with invalid values +--error 1 +--exec $INNOCHECKSUM --strict-check=strict_innodb $MYSQLD_DATADIR/test/tab1.ibd 2> $SEARCH_FILE +let SEARCH_PATTERN= Error while setting value \'strict_innodb\' to \'strict-check\'; +--source include/search_pattern_in_file.inc + +--error 1 +--exec $INNOCHECKSUM -C strict_innodb $MYSQLD_DATADIR/test/tab1.ibd 2> $SEARCH_FILE +let SEARCH_PATTERN= Error while setting value \'strict_innodb\' to \'strict-check\'; +--source include/search_pattern_in_file.inc + +--error 1 +--exec $INNOCHECKSUM --strict-check=strict_crc32 $MYSQLD_DATADIR/test/tab1.ibd 2> $SEARCH_FILE +let SEARCH_PATTERN= Error while setting value \'strict_crc32\' to \'strict-check\'; +--source include/search_pattern_in_file.inc + +--error 1 +--exec $INNOCHECKSUM -C strict_crc32 $MYSQLD_DATADIR/test/tab1.ibd 2> $SEARCH_FILE +let SEARCH_PATTERN= Error while setting value \'strict_crc32\' to \'strict-check\'; +--source include/search_pattern_in_file.inc + +--error 1 +--exec $INNOCHECKSUM --strict-check=strict_none $MYSQLD_DATADIR/test/tab1.ibd 2> $SEARCH_FILE +let SEARCH_PATTERN= Error while setting value \'strict_none\' to \'strict-check\'; +--source include/search_pattern_in_file.inc + +--error 1 +--exec $INNOCHECKSUM -C strict_none $MYSQLD_DATADIR/test/tab1.ibd 2> $SEARCH_FILE +let SEARCH_PATTERN= Error while setting value \'strict_none\' to \'strict-check\'; +--source include/search_pattern_in_file.inc + +--error 1 +--exec $INNOCHECKSUM --strict-check=InnoBD $MYSQLD_DATADIR/test/tab1.ibd 2> $SEARCH_FILE +let SEARCH_PATTERN= Error while setting value \'InnoBD\' to \'strict-check\'; +--source include/search_pattern_in_file.inc + +--error 1 +--exec $INNOCHECKSUM -C InnoBD $MYSQLD_DATADIR/test/tab1.ibd 2>$SEARCH_FILE +let SEARCH_PATTERN= Error while setting value \'InnoBD\' to \'strict-check\'; +--source include/search_pattern_in_file.inc + +--error 1 +--exec $INNOCHECKSUM --strict-check=crc $MYSQLD_DATADIR/test/tab1.ibd 2> $SEARCH_FILE +let SEARCH_PATTERN= Error while setting value \'crc\' to \'strict-check\'; +--source include/search_pattern_in_file.inc + +--error 1 +--exec $INNOCHECKSUM --strict-check=no $MYSQLD_DATADIR/test/tab1.ibd 2> $SEARCH_FILE +let SEARCH_PATTERN= Error while setting value \'no\' to \'strict-check\'; +--source include/search_pattern_in_file.inc + +--echo [14a]: when server default checksum=crc32 rewrite new checksum=crc32 with innochecksum +--echo # Also check the long form of write option. +--exec $INNOCHECKSUM --strict-check=crc32 --write=crc32 $MYSQLD_DATADIR/test/tab1.ibd +--exec $INNOCHECKSUM --strict-check=crc32 --write=crc32 $MYSQLD_DATADIR/test/t1.ibd +# Rewrite done, verify with --strict-check=crc32 +--exec $INNOCHECKSUM --strict-check=crc32 $MYSQLD_DATADIR/test/tab1.ibd +--exec $INNOCHECKSUM --strict-check=crc32 $MYSQLD_DATADIR/test/t1.ibd + +--echo [14b]: when server default checksum=crc32 rewrite new checksum=innodb with innochecksum +--echo # Also check the long form of write option. +--exec $INNOCHECKSUM --no-check --write=innodb $MYSQLD_DATADIR/test/tab1.ibd +--exec $INNOCHECKSUM --strict-check=crc32 --write=innodb $MYSQLD_DATADIR/test/t1.ibd +# Rewrite done, verify with --strict-check=innodb +--exec $INNOCHECKSUM --strict-check=innodb $MYSQLD_DATADIR/test/tab1.ibd + +--echo # start the server with innodb_checksum_algorithm=InnoDB +--let $restart_parameters= --innodb_checksum_algorithm=innodb +--source include/start_mysqld.inc + +INSERT INTO tab1 VALUES(2, 'Innochecksum CRC32'); +SELECT c1,c2 FROM tab1 order by c1,c2; + +--echo # Stop the server +--source include/shutdown_mysqld.inc + +--echo [15]: when server default checksum=crc32 rewrite new checksum=none with innochecksum +--echo # Also check the short form of write option. +--exec $INNOCHECKSUM --no-check -w none $MYSQLD_DATADIR/test/tab1.ibd +--exec $INNOCHECKSUM --no-check -w none $MYSQLD_DATADIR/test/t1.ibd +# Rewrite done, verify with --strict-check=none +--exec $INNOCHECKSUM --strict-check=none $MYSQLD_DATADIR/test/tab1.ibd +--exec $INNOCHECKSUM --strict-check=none $MYSQLD_DATADIR/test/t1.ibd + +--echo # Start the server with checksum algorithm=none +--let $restart_parameters= --innodb_checksum_algorithm=none +--source include/start_mysqld.inc + +INSERT INTO tab1 VALUES(3, 'Innochecksum None'); +SELECT c1,c2 FROM tab1 order by c1,c2; +DROP TABLE t1; + +--echo # Stop the server +--source include/shutdown_mysqld.inc + +--echo [16]: rewrite into new checksum=crc32 with innochecksum +--exec $INNOCHECKSUM --no-check --write=crc32 $MYSQLD_DATADIR/test/tab1.ibd + +--echo # Restart the DB server with innodb_checksum_algorithm=crc32 +--let $restart_parameters= --innodb_checksum_algorithm=crc32 +--source include/start_mysqld.inc + +SELECT * FROM tab1; +DELETE FROM tab1 where c1=3; +SELECT c1,c2 FROM tab1 order by c1,c2; + +--echo # Stop server +--source include/shutdown_mysqld.inc + +--echo [17]: rewrite into new checksum=InnoDB +--exec $INNOCHECKSUM --no-check --write=InnoDB $MYSQLD_DATADIR/test/tab1.ibd + +--echo # Restart the DB server with innodb_checksum_algorithm=InnoDB +--let $restart_parameters= --innodb_checksum_algorithm=innodb +--source include/start_mysqld.inc + +DELETE FROM tab1 where c1=2; +SELECT * FROM tab1; + +--echo # Stop server +--source include/shutdown_mysqld.inc + +--echo [18]:check Innochecksum with invalid write options +--error 1 +--exec $INNOCHECKSUM --no-check --write=strict_crc32 $MYSQLD_DATADIR/test/tab1.ibd 2> $SEARCH_FILE +let SEARCH_PATTERN=Error while setting value \'strict_crc32\' to \'write\'; +--source include/search_pattern_in_file.inc + +--error 1 +--exec $INNOCHECKSUM --no-check --write=strict_innodb $MYSQLD_DATADIR/test/tab1.ibd 2> $SEARCH_FILE +let SEARCH_PATTERN=Error while setting value \'strict_innodb\' to \'write\'; +--source include/search_pattern_in_file.inc + +--error 1 +--exec $INNOCHECKSUM --no-check --write=crc23 $MYSQLD_DATADIR/test/tab1.ibd 2> $SEARCH_FILE +let SEARCH_PATTERN=Error while setting value \'crc23\' to \'write\'; +--source include/search_pattern_in_file.inc +--remove_file $SEARCH_FILE + +# Cleanup +--let $restart_parameters= +--source include/start_mysqld.inc + +DROP TABLE tab1; diff --git a/mysql-test/suite/innodb/t/innodb_zip_innochecksum2.opt b/mysql-test/suite/innodb/t/innodb_zip_innochecksum2.opt new file mode 100644 index 00000000000..39d5c6d577c --- /dev/null +++ b/mysql-test/suite/innodb/t/innodb_zip_innochecksum2.opt @@ -0,0 +1,4 @@ +--skip-innodb-doublewrite +--innodb-file-per-table +--innodb-file-format=Barracuda +--innodb-change-buffering=none diff --git a/mysql-test/suite/innodb/t/innodb_zip_innochecksum2.test b/mysql-test/suite/innodb/t/innodb_zip_innochecksum2.test new file mode 100644 index 00000000000..330bb81ba75 --- /dev/null +++ b/mysql-test/suite/innodb/t/innodb_zip_innochecksum2.test @@ -0,0 +1,118 @@ +#************************************************************ +# WL6045:Improve Innochecksum +#************************************************************ +--source include/innodb_page_size_small.inc +--source include/have_debug.inc +--source include/no_valgrind_without_big.inc +# Avoid CrashReporter popup on Mac. +--source include/not_crashrep.inc + +--source include/not_embedded.inc +-- source include/big_test.inc + +--disable_query_log +# This warning occurs due to small buffer pool size(i.e. 8MB). It doesn't occur +# with --mysqld=--innodb_buffer_pool_size=10MB +call mtr.add_suppression("\\[Warning\\] InnoDB: Difficult to find free blocks in the buffer pool.*"); +--enable_query_log +let MYSQLD_BASEDIR= `SELECT @@basedir`; +let MYSQLD_DATADIR= `SELECT @@datadir`; +let SEARCH_FILE= $MYSQLTEST_VARDIR/log/my_restart.err; + +SET GLOBAL innodb_compression_level=0; +SELECT @@innodb_compression_level; + +CREATE TABLE t1 (j LONGBLOB) ENGINE = InnoDB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=1; +INSERT INTO t1 VALUES (repeat('abcdefghijklmnopqrstuvwxyz',200)); +let $i=10; +while ($i > 0) { + INSERT INTO t1 SELECT * from t1; + dec $i; +} + +--echo # stop the server +--source include/shutdown_mysqld.inc + +# Page_type_dump for t1 +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +--exec $INNOCHECKSUM -v --page-type-dump $MYSQLTEST_VARDIR/tmp/dump.txt $MYSQLD_DATADIR/test/t1.ibd +--file_exists $MYSQLTEST_VARDIR/tmp/dump.txt +--remove_file $MYSQLTEST_VARDIR/tmp/dump.txt + +--echo [1]:# check the both short and long options for "help" +--exec $INNOCHECKSUM --help $MYSQLD_DATADIR/test/t1.ibd > $MYSQLTEST_VARDIR/tmp/help_output_long.txt +--exec $INNOCHECKSUM -I $MYSQLD_DATADIR/test/t1.ibd > $MYSQLTEST_VARDIR/tmp/help_output_short.txt +--diff_files $MYSQLTEST_VARDIR/tmp/help_output_long.txt $MYSQLTEST_VARDIR/tmp/help_output_short.txt + +--echo [2]:# Run the innochecksum when file isn't provided. +--echo # It will print the innochecksum usage similar to --help option. +--error 1 +--exec $INNOCHECKSUM > $MYSQLTEST_VARDIR/tmp/usage.txt +--diff_files $MYSQLTEST_VARDIR/tmp/help_output_long.txt $MYSQLTEST_VARDIR/tmp/usage.txt +--remove_file $MYSQLTEST_VARDIR/tmp/usage.txt + +perl; +use strict; +use warnings; +use File::Copy; +my $dir = $ENV{'MYSQLTEST_VARDIR'}; +my $file= 'help_output_long.txt'; +# 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.*$/ || $_=~ /\-#, \-\-debug.*$/ || $_=~ /http:.*html/) { + $_=~ s/^\S*innochecksum.+Ver.+[0-9]*\.[0-9]*\.[0-9]*.+$/innochecksum Ver #.#.#/g; + $_=~ s/(Copyright\s\(c\))\s([0-9]*),\s([0-9]*)(.*)/$1 YEAR, YEAR $4/g; + $_=~ s/Usage:.*\[-c/Usage: innochecksum [-c/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 + +--cat_file $MYSQLTEST_VARDIR/tmp/help_output_long.txt +--remove_file $MYSQLTEST_VARDIR/tmp/help_output_long.txt +--remove_file $MYSQLTEST_VARDIR/tmp/help_output_short.txt + +--echo [3]:# check the both short and long options for "count" and exit +--replace_regex /[0-9]+/#/ +--exec $INNOCHECKSUM --count $MYSQLD_DATADIR/test/t1.ibd +--replace_regex /[0-9]+/#/ +--exec $INNOCHECKSUM -c $MYSQLD_DATADIR/test/t1.ibd + +--echo [4]:# Print the version of innochecksum and exit +--replace_regex /.*innochecksum.*Ver.*[0-9]*.[0-9]*.[0-9]*.*/innochecksum Ver #.#.#/ +--exec $INNOCHECKSUM -V $MYSQLD_DATADIR/test/t1.ibd + +--echo # Restart the DB server +--source include/start_mysqld.inc + +DROP TABLE t1; + +--echo [5]:# Check the innochecksum for compressed table t1 with different key_block_size +--echo # Test for KEY_BLOCK_SIZE=1 +--let $size=1 +--source ../include/innodb-wl6045.inc + +--echo # Test for KEY_BLOCK_SIZE=2 +--let $size=2 +--source ../include/innodb-wl6045.inc + +--echo # Test for for KEY_BLOCK_SIZE=4 +--let $size=4 +--source ../include/innodb-wl6045.inc + +set innodb_strict_mode=off; +--echo # Test for for KEY_BLOCK_SIZE=8 +--let $size=8 +--source ../include/innodb-wl6045.inc + +set innodb_strict_mode=off; +--echo # Test for KEY_BLOCK_SIZE=16 +--let $size=16 +--source ../include/innodb-wl6045.inc +--echo # Test[5] completed diff --git a/mysql-test/suite/innodb/t/innodb_zip_innochecksum3.opt b/mysql-test/suite/innodb/t/innodb_zip_innochecksum3.opt new file mode 100644 index 00000000000..828a7cd67c8 --- /dev/null +++ b/mysql-test/suite/innodb/t/innodb_zip_innochecksum3.opt @@ -0,0 +1,2 @@ +--innodb-file-per-table +--innodb-file-format=Barracuda diff --git a/mysql-test/suite/innodb/t/innodb_zip_innochecksum3.test b/mysql-test/suite/innodb/t/innodb_zip_innochecksum3.test new file mode 100644 index 00000000000..dab10dcc997 --- /dev/null +++ b/mysql-test/suite/innodb/t/innodb_zip_innochecksum3.test @@ -0,0 +1,406 @@ +#************************************************************ +# WL6045:Improve Innochecksum +#************************************************************ +--source include/innodb_page_size_small.inc + +--source include/no_valgrind_without_big.inc + +# Embedded server does not support crashing. +--source include/not_embedded.inc + +# Avoid CrashReporter popup on Mac. +--source include/not_crashrep.inc + +--echo # Set the environmental variables +let MYSQLD_BASEDIR= `SELECT @@basedir`; +let MYSQLD_DATADIR= `SELECT @@datadir`; +let SEARCH_FILE= $MYSQLTEST_VARDIR/log/my_restart.err; + +call mtr.add_suppression("InnoDB: Unable to read tablespace .* page no .* into the buffer pool after 100 attempts"); +call mtr.add_suppression("InnoDB: innodb_checksum_algorithm is set to.*"); + +--echo [1]: Further Test are for rewrite checksum (innodb|crc32|none) for all ibd file & start the server. + +CREATE TABLE tab1 (pk INTEGER NOT NULL PRIMARY KEY, +linestring_key GEOMETRY NOT NULL, +linestring_nokey GEOMETRY NOT NULL) +ENGINE=InnoDB ; + +INSERT INTO tab1 (pk, linestring_key, linestring_nokey) +VALUES (1, ST_GeomFromText('POINT(10 10) '), ST_GeomFromText('POINT(10 10) ')); + +CREATE INDEX linestring_index ON tab1(linestring_nokey(5)); +ALTER TABLE tab1 ADD KEY (linestring_key(5)); + +--echo # create a compressed table +CREATE TABLE tab2(col_1 CHAR (255) , +col_2 VARCHAR (255), col_3 longtext, +col_4 longtext,col_5 longtext, +col_6 longtext , col_7 int ) +engine = innodb row_format=compressed key_block_size=4; + +CREATE INDEX idx1 ON tab2(col_3(10)); +CREATE INDEX idx2 ON tab2(col_4(10)); +CREATE INDEX idx3 ON tab2(col_5(10)); + +# load the with repeat function +SET @col_1 = repeat('a', 5); +SET @col_2 = repeat('b', 20); +SET @col_3 = repeat('c', 100); +SET @col_4 = repeat('d', 100); +SET @col_5 = repeat('e', 100); +SET @col_6 = repeat('f', 100); + +# insert 5 records +let $i = 5; +while ($i) { + eval INSERT INTO tab2(col_1,col_2,col_3,col_4,col_5,col_6,col_7) + VALUES (@col_1,@col_2,@col_3,@col_4,@cl_5,@col_6,$i); + dec $i; +} + +--disable_result_log +SELECT * FROM tab2 ORDER BY col_7; + +--echo # stop the server +--source include/shutdown_mysqld.inc + +--echo [1(a)]: Rewrite into new checksum=InnoDB for all *.ibd file and ibdata1 +--exec $INNOCHECKSUM --write=InnoDB $MYSQLD_DATADIR/test/tab1.ibd +--exec $INNOCHECKSUM --write=InnoDB $MYSQLD_DATADIR/test/tab2.ibd +--exec $INNOCHECKSUM --write=InnoDB $MYSQLD_DATADIR/ibdata1 +perl; +foreach (glob("$ENV{MYSQLD_DATADIR}/*/*.ibd")) { + system("$ENV{INNOCHECKSUM} --no-check --write=InnoDB $_") +} +EOF + +--echo : start the server with innodb_checksum_algorithm=strict_innodb +--let $restart_parameters= --innodb_checksum_algorithm=strict_innodb +--source include/start_mysqld.inc + +INSERT INTO tab1 (pk, linestring_key, linestring_nokey) +VALUES (2, ST_GeomFromText('LINESTRING(10 10,20 20,30 30)'), ST_GeomFromText('LINESTRING(10 10,20 20,30 30)')); + +# load the with repeat function +SET @col_1 = repeat('a', 5); +SET @col_2 = repeat('b', 20); +SET @col_3 = repeat('c', 100); +SET @col_4 = repeat('d', 100); +SET @col_5 = repeat('e', 100); +SET @col_6 = repeat('f', 100); + +# check the table status is GOOD with DML +let $i = 6; +eval INSERT INTO tab2(col_1,col_2,col_3,col_4,col_5,col_6,col_7) +VALUES (@col_1,@col_2,@col_3,@col_4,@cl_5,@col_6,$i); + +-- disable_result_log +SELECT pk,ST_AsText(linestring_key),ST_AsText(linestring_nokey) +FROM tab1 ORDER BY pk; + +-- disable_result_log +SELECT * FROM tab2 ORDER BY col_7; + +--echo # stop the server +--source include/shutdown_mysqld.inc + +--echo [1(b)]: Rewrite into new checksum=crc32 for all *.ibd file and ibdata1 +--exec $INNOCHECKSUM --write=CRC32 $MYSQLD_DATADIR/test/tab1.ibd +--exec $INNOCHECKSUM --write=CRC32 $MYSQLD_DATADIR/test/tab2.ibd +--exec $INNOCHECKSUM --write=CRC32 $MYSQLD_DATADIR/ibdata1 +perl; +foreach (glob("$ENV{MYSQLD_DATADIR}/*/*.ibd")) { + system("$ENV{INNOCHECKSUM} --no-check --write=crc32 $_") +} +EOF + +--echo # start the server with innodb_checksum_algorithm=strict_crc32 +--let $restart_parameters= --innodb_checksum_algorithm=strict_crc32 +--source include/start_mysqld.inc + +# check the table status is GOOD with DML +INSERT INTO tab1 (pk, linestring_key, linestring_nokey) +VALUES (3, ST_GeomFromText('POLYGON((0 0,5 5,10 10,15 15,0 0),(10 10,20 20,30 30,40 40,10 10))'), +ST_GeomFromText('POLYGON((0 0,5 5,10 10,15 15,0 0),(10 10,20 20,30 30,40 40,10 10))')); + +# load the with repeat function +SET @col_1 = repeat('g', 5); +SET @col_2 = repeat('h', 20); +SET @col_3 = repeat('i', 100); +SET @col_4 = repeat('j', 100); +SET @col_5 = repeat('k', 100); +SET @col_6 = repeat('l', 100); + +# check the table status is GOOD with DML +let $i = 7; +eval INSERT INTO tab2(col_1,col_2,col_3,col_4,col_5,col_6,col_7) +VALUES (@col_1,@col_2,@col_3,@col_4,@cl_5,@col_6,$i); + +# check the records from table +-- disable_result_log +SELECT pk,ST_AsText(linestring_key),ST_AsText(linestring_nokey) +FROM tab1 ORDER BY pk; + +-- disable_result_log +SELECT * FROM tab2 ORDER BY col_7; + +--echo # stop the server +--source include/shutdown_mysqld.inc + +--echo [1(c)]: Rewrite into new checksum=none for all *.ibd file and ibdata1 +--exec $INNOCHECKSUM --write=none $MYSQLD_DATADIR/test/tab1.ibd +--exec $INNOCHECKSUM --write=none $MYSQLD_DATADIR/test/tab2.ibd +--exec $INNOCHECKSUM --write=none $MYSQLD_DATADIR/ibdata1 +perl; +foreach (glob("$ENV{MYSQLD_DATADIR}/undo*")) { + system("$ENV{INNOCHECKSUM} --no-check --write=NONE $_") +} +foreach (glob("$ENV{MYSQLD_DATADIR}/*/*.ibd")) { + system("$ENV{INNOCHECKSUM} --no-check --write=NONE $_") +} +EOF + +--let $restart_parameters= --innodb_checksum_algorithm=strict_none +--source include/start_mysqld.inc +--let $restart_parameters= +# check the table status is GOOD with DML +INSERT INTO tab1 (pk, linestring_key, linestring_nokey) +VALUES (4, ST_GeomFromText('MULTIPOINT(0 0,5 5,10 10,20 20) '), ST_GeomFromText('MULTIPOINT(0 0,5 5,10 10,20 20) ')); + +# load the with repeat function +SET @col_1 = repeat('m', 5); +SET @col_2 = repeat('n', 20); +SET @col_3 = repeat('o', 100); +SET @col_4 = repeat('p', 100); +SET @col_5 = repeat('q', 100); +SET @col_6 = repeat('r', 100); + +# check the table status is GOOD with DML +let $i = 8; +eval INSERT INTO tab2(col_1,col_2,col_3,col_4,col_5,col_6,col_7) +VALUES (@col_1,@col_2,@col_3,@col_4,@cl_5,@col_6,$i); + +# check the records from table +-- disable_result_log +SELECT pk,ST_AsText(linestring_key),ST_AsText(linestring_nokey) +FROM tab1 ORDER BY pk; + +--disable_result_log +SELECT * FROM tab2 ORDER BY col_7; +--enable_result_log + +--echo # stop the server +--source include/shutdown_mysqld.inc + +--echo [2]: Check the page type summary with shortform for tab1.ibd +--replace_regex /File.*.ibd/File::tab1.ibd/ /[0-9]+/#/ +--exec $INNOCHECKSUM -S $MYSQLD_DATADIR/test/tab1.ibd 2>$MYSQLTEST_VARDIR/tmp/page_summary_short.txt + +--echo [3]: Check the page type summary with longform for tab1.ibd +--replace_regex /File.*.ibd/File::tab1.ibd/ /[0-9]+/#/ +--exec $INNOCHECKSUM --page-type-summary $MYSQLD_DATADIR/test/tab1.ibd 2>$MYSQLTEST_VARDIR/tmp/page_summary_long.txt + +--remove_file $MYSQLTEST_VARDIR/tmp/page_summary_short.txt +--remove_file $MYSQLTEST_VARDIR/tmp/page_summary_long.txt +--echo [4]: Page type dump for with longform for tab1.ibd +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +--exec $INNOCHECKSUM --page-type-dump $MYSQLTEST_VARDIR/tmp/dump.txt $MYSQLD_DATADIR/test/tab1.ibd + +perl; +use strict; +use warnings; +use File::Copy; +my $dir = $ENV{'MYSQLTEST_VARDIR'}; +opendir(DIR, $dir) or die $!; +my $file= 'dump.txt'; +# open file in write mode +open IN_FILE,"<", "$dir/tmp/$file" or die $!; +open OUT_FILE, ">", "$dir/tmp/innochecksum_3_tempfile" or die $!; +while(<IN_FILE>) +{ + # Replace the intergers to # and complete file path to file name only. + $_=~ s/Filename.+/Filename::tab1.ibd/g; + $_=~ s/\d+/#/g; + print OUT_FILE $_; +} +close(IN_FILE); +close(OUT_FILE); +# move the new content from tmp file to the orginal file. +move ("$dir/tmp/innochecksum_3_tempfile", "$dir/tmp/$file"); +closedir(DIR); +EOF + +--echo # Print the contents stored in dump.txt +cat_file $MYSQLTEST_VARDIR/tmp/dump.txt; +--remove_file $MYSQLTEST_VARDIR/tmp/dump.txt + +--echo # Variables used by page type dump for ibdata1 +--exec $INNOCHECKSUM -v --page-type-dump $MYSQLTEST_VARDIR/tmp/dump.txt $MYSQLD_DATADIR/ibdata1 > $MYSQLTEST_VARDIR/tmp/page_verbose_summary.txt + +--file_exists $MYSQLTEST_VARDIR/tmp/dump.txt +--remove_file $MYSQLTEST_VARDIR/tmp/dump.txt + +perl; +use strict; +use warnings; +use File::Copy; +my $dir = $ENV{'MYSQLTEST_VARDIR'}; +opendir(DIR, $dir) or die $!; +my $file= 'page_verbose_summary.txt'; +# open file in write mode +open IN_FILE,"<", "$dir/tmp/$file" or die $!; +open OUT_FILE, ">", "$dir/tmp/innochecksum_3_tempfile" or die $!; +while(<IN_FILE>) +{ + # Replace complete file path to file name only. + $_=~ s/$dir/MYSQLTEST_VARDIR/; + # Remove debug option, which is not in all builds + next if (/debug/); + print OUT_FILE $_; +} +close(IN_FILE); +close(OUT_FILE); +# move the new content from tmp file to the orginal file. +move ("$dir/tmp/innochecksum_3_tempfile", "$dir/tmp/$file"); +closedir(DIR); +EOF + +cat_file $MYSQLTEST_VARDIR/tmp/page_verbose_summary.txt; +--remove_file $MYSQLTEST_VARDIR/tmp/page_verbose_summary.txt + +--echo [5]: Page type dump for with shortform for tab1.ibd +--exec $INNOCHECKSUM -D $MYSQLTEST_VARDIR/tmp/dump.txt $MYSQLD_DATADIR/test/tab1.ibd + +perl; +use strict; +use warnings; +use File::Copy; +my $dir = $ENV{'MYSQLTEST_VARDIR'}; +opendir(DIR, $dir) or die $!; +my $file= 'dump.txt'; +# open file in write mode +open IN_FILE,"<", "$dir/tmp/$file" or die $!; +open OUT_FILE, ">", "$dir/tmp/innochecksum_3_tempfile" or die $!; +while(<IN_FILE>) +{ + # Replace the intergers to # and complete file path to file name only. + $_=~ s/Filename.+/Filename::tab1.ibd/g; + $_=~ s/\d+/#/g; + print OUT_FILE $_; +} +close(IN_FILE); +close(OUT_FILE); +# move the new content from tmp file to the orginal file. +move ("$dir/tmp/innochecksum_3_tempfile", "$dir/tmp/$file"); +closedir(DIR); +EOF + +# Print the contents stored in dump.txt +cat_file $MYSQLTEST_VARDIR/tmp/dump.txt; +--remove_file $MYSQLTEST_VARDIR/tmp/dump.txt + +--echo [6]: check the valid lower bound values for option +--echo # allow-mismatches,page,start-page,end-page +--exec $INNOCHECKSUM --allow-mismatches=0 $MYSQLD_DATADIR/test/tab1.ibd +--exec $INNOCHECKSUM -a 0 $MYSQLD_DATADIR/test/tab1.ibd +--exec $INNOCHECKSUM --page=0 $MYSQLD_DATADIR/test/tab1.ibd +--exec $INNOCHECKSUM -p 0 $MYSQLD_DATADIR/test/tab1.ibd +--exec $INNOCHECKSUM --start-page=0 $MYSQLD_DATADIR/test/tab1.ibd +--exec $INNOCHECKSUM -s 0 $MYSQLD_DATADIR/test/tab1.ibd +--exec $INNOCHECKSUM --end-page=0 $MYSQLD_DATADIR/test/tab1.ibd +--exec $INNOCHECKSUM -e 0 $MYSQLD_DATADIR/test/tab1.ibd + +# +# These produce now errors +# +#--echo [7]: check the negative values for option +#--echo # allow-mismatches,page,start-page,end-page. +#--echo # They will reset to zero for negative values. +#--echo # check the invalid lower bound values +#--exec $INNOCHECKSUM --allow-mismatches=-1 $MYSQLD_DATADIR/test/tab1.ibd +#--exec $INNOCHECKSUM -a -1 $MYSQLD_DATADIR/test/tab1.ibd +#--exec $INNOCHECKSUM --page=-1 $MYSQLD_DATADIR/test/tab1.ibd +#--exec $INNOCHECKSUM -p -1 $MYSQLD_DATADIR/test/tab1.ibd +#--exec $INNOCHECKSUM --start-page=-1 $MYSQLD_DATADIR/test/tab1.ibd +#--exec $INNOCHECKSUM -s -1 $MYSQLD_DATADIR/test/tab1.ibd +#--exec $INNOCHECKSUM --end-page=-1 $MYSQLD_DATADIR/test/tab1.ibd +#--exec $INNOCHECKSUM -e -1 $MYSQLD_DATADIR/test/tab1.ibd +# +#--echo [8]: check the valid upper bound values for +#--echo # both short and long options "allow-mismatches" and "end-page" +# +#--exec $INNOCHECKSUM --allow-mismatches=18446744073709551615 $MYSQLD_DATADIR/test/tab1.ibd +#--exec $INNOCHECKSUM -a 18446744073709551615 $MYSQLD_DATADIR/test/tab1.ibd +#--exec $INNOCHECKSUM --end-page=18446744073709551615 $MYSQLD_DATADIR/test/tab1.ibd +#--exec $INNOCHECKSUM -e 18446744073709551615 $MYSQLD_DATADIR/test/tab1.ibd + +--echo [9]: check the both short and long options "page" and "start-page" when +--echo # seek value is larger than file size. +--error 1 +--exec $INNOCHECKSUM --page=18446744073709551615 $MYSQLD_DATADIR/test/tab1.ibd 2> $SEARCH_FILE +let SEARCH_PATTERN= Error: Unable to seek to necessary offset: Invalid argument; +--source include/search_pattern_in_file.inc + +--error 1 +--exec $INNOCHECKSUM -p 18446744073709551615 $MYSQLD_DATADIR/test/tab1.ibd 2> $SEARCH_FILE +let SEARCH_PATTERN= Error: Unable to seek to necessary offset: Invalid argument; +--source include/search_pattern_in_file.inc + +--error 1 +--exec $INNOCHECKSUM --start-page=18446744073709551615 $MYSQLD_DATADIR/test/tab1.ibd 2> $SEARCH_FILE +let SEARCH_PATTERN= Error: Unable to seek to necessary offset: Invalid argument; +--source include/search_pattern_in_file.inc + +--error 1 +--exec $INNOCHECKSUM -s 18446744073709551615 $MYSQLD_DATADIR/test/tab1.ibd 2> $SEARCH_FILE +let SEARCH_PATTERN= Error: Unable to seek to necessary offset: Invalid argument; +--source include/search_pattern_in_file.inc + +--echo [34]: check the invalid upper bound values for options, allow-mismatches, end-page, start-page and page. +--echo # innochecksum will fail with error code: 1 +--error 1 +--exec $INNOCHECKSUM --allow-mismatches=18446744073709551616 $MYSQLD_DATADIR/test/tab1.ibd 2> $SEARCH_FILE +let SEARCH_PATTERN= Incorrect unsigned integer value: '18446744073709551616'; +--source include/search_pattern_in_file.inc + +--error 1 +--exec $INNOCHECKSUM -a 18446744073709551616 $MYSQLD_DATADIR/test/tab1.ibd 2> $SEARCH_FILE +let SEARCH_PATTERN= Incorrect unsigned integer value: '18446744073709551616'; +--source include/search_pattern_in_file.inc + +--error 1 +--exec $INNOCHECKSUM --end-page=18446744073709551616 $MYSQLD_DATADIR/test/tab1.ibd 2> $SEARCH_FILE +let SEARCH_PATTERN= Incorrect unsigned integer value: '18446744073709551616'; +--source include/search_pattern_in_file.inc + +--error 1 +--exec $INNOCHECKSUM -e 18446744073709551616 $MYSQLD_DATADIR/test/tab1.ibd 2> $SEARCH_FILE +let SEARCH_PATTERN= Incorrect unsigned integer value: '18446744073709551616'; +--source include/search_pattern_in_file.inc + +--error 1 +--exec $INNOCHECKSUM --page=18446744073709551616 $MYSQLD_DATADIR/test/tab1.ibd 2> $SEARCH_FILE +let SEARCH_PATTERN= Incorrect unsigned integer value: '18446744073709551616'; +--source include/search_pattern_in_file.inc + +--error 1 +--exec $INNOCHECKSUM -p 18446744073709551616 $MYSQLD_DATADIR/test/tab1.ibd 2> $SEARCH_FILE +let SEARCH_PATTERN= Incorrect unsigned integer value: '18446744073709551616'; +--source include/search_pattern_in_file.inc + +--error 1 +--exec $INNOCHECKSUM --start-page=18446744073709551616 $MYSQLD_DATADIR/test/tab1.ibd 2> $SEARCH_FILE +let SEARCH_PATTERN= Incorrect unsigned integer value: '18446744073709551616'; +--source include/search_pattern_in_file.inc + +--error 1 +--exec $INNOCHECKSUM -s 18446744073709551616 $MYSQLD_DATADIR/test/tab1.ibd 2> $SEARCH_FILE +let SEARCH_PATTERN= Incorrect unsigned integer value: '18446744073709551616'; +--source include/search_pattern_in_file.inc +--remove_file $SEARCH_FILE + +# Cleanup +--source include/start_mysqld.inc + +DROP TABLE tab1,tab2; |