[Commits] d160e603595: After review fixes and new test case for different checksum

jan jan.lindstrom at mariadb.com
Thu Jun 1 14:05:11 EEST 2017


revision-id: d160e6035952b6465e9e6ce98b9cccbe63945c0e (mariadb-10.1.23-57-gd160e603595)
parent(s): b6fbcea316c8c1736a898e85c578d10d8e066a54
author: Jan Lindström
committer: Jan Lindström
timestamp: 2017-06-01 14:03:53 +0300
message:

After review fixes and new test case for different checksum

algorithms.

---
 .../encryption/r/innodb-checksum-algorithm.result  | 741 +++++++++++++++++++++
 .../encryption/r/innodb-compressed-blob.result     |   4 +-
 .../encryption/t/innodb-checksum-algorithm.opt     |   4 +
 .../encryption/t/innodb-checksum-algorithm.test    | 652 ++++++++++++++++++
 .../suite/encryption/t/innodb-compressed-blob.test |   4 +-
 storage/innobase/buf/buf0buf.cc                    |  21 +-
 storage/innobase/fil/fil0fil.cc                    |  12 +-
 storage/xtradb/buf/buf0buf.cc                      |  21 +-
 storage/xtradb/fil/fil0fil.cc                      |  12 +-
 9 files changed, 1441 insertions(+), 30 deletions(-)

diff --git a/mysql-test/suite/encryption/r/innodb-checksum-algorithm.result b/mysql-test/suite/encryption/r/innodb-checksum-algorithm.result
new file mode 100644
index 00000000000..09a61af2a2f
--- /dev/null
+++ b/mysql-test/suite/encryption/r/innodb-checksum-algorithm.result
@@ -0,0 +1,741 @@
+SET GLOBAL innodb_file_format = `Barracuda`;
+SET GLOBAL innodb_file_per_table = ON;
+call mtr.add_suppression("InnoDB: innodb_checksum_algorithm is set to \"strict_crc32\" but the page \\[page id: space=[0-9]+, page number=[0-9]+\\] contains a valid checksum \"innodb\". Accepting the page as valid. Change innodb_checksum_algorithm to \"crc32\" to silently accept such pages or rewrite all pages so that they contain \"crc32\" checksum.");
+call mtr.add_suppression("InnoDB: innodb_checksum_algorithm is set to \"strict_none\" but the page \\[page id: space=[0-9]+, page number=[0-9]+\\] contains a valid checksum \"innodb\". Accepting the page as valid. Change innodb_checksum_algorithm to \"none\" to silently accept such pages or rewrite all pages so that they contain \"none\" checksum.");
+call mtr.add_suppression("InnoDB: innodb_checksum_algorithm is set to \"strict_crc32\" but the page \\[page id: space=[0-9]+, page number=[0-9]+\\] contains a valid checksum \"none\". Accepting the page as valid. Change innodb_checksum_algorithm to \"crc32\" to silently accept such pages or rewrite all pages so that they contain \"crc32\" checksum.");
+call mtr.add_suppression("InnoDB: innodb_checksum_algorithm is set to \"strict_innodb\" but the page \\[page id: space=[0-9]+, page number=[0-9]+\\] contains a valid checksum \"none\". Accepting the page as valid. Change innodb_checksum_algorithm to \"innodb\" to silently accept such pages or rewrite all pages so that they contain \"innodb\" checksum.");
+call mtr.add_suppression("InnoDB: innodb_checksum_algorithm is set to \"strict_innodb\" but the page \\[page id: space=[0-9]+, page number=[0-9]+\\] contains a valid checksum \"crc32\". Accepting the page as valid. Change innodb_checksum_algorithm to \"innodb\" to silently accept such pages or rewrite all pages so that they contain \"innodb\" checksum.");
+call mtr.add_suppression("InnoDB: innodb_checksum_algorithm is set to \"strict_none\" but the page \\[page id: space=[0-9]+, page number=[0-9]+\\] contains a valid checksum \"crc32\". Accepting the page as valid. Change innodb_checksum_algorithm to \"none\" to silently accept such pages or rewrite all pages so that they contain \"none\" checksum.");
+set GLOBAL innodb_default_encryption_key_id=4;
+create table t1(a int not null auto_increment primary key, b blob, index(b(10))) engine=innodb row_format=compressed encrypted=yes;
+create table t2(a int not null auto_increment primary key, b blob, index(b(10))) engine=innodb encrypted=yes;
+create table t3(a int not null auto_increment primary key, b blob, index(b(10))) engine=innodb row_format=compressed encrypted=no;
+create table t4(a int not null auto_increment primary key, b blob, index(b(10))) engine=innodb encrypted=no;
+create table t5(a int not null auto_increment primary key, b blob, index(b(10))) engine=innodb encrypted=yes page_compressed=yes;
+begin;
+insert into t1(b) values (repeat('secret',20));
+insert into t1(b) select b from t1;
+insert into t1(b) select b from t1;
+insert into t1(b) select b from t1;
+insert into t1(b) select b from t1;
+insert into t1(b) select b from t1;
+insert into t2(b) select b from t1;
+insert into t3(b) select b from t1;
+insert into t4(b) select b from t1;
+insert into t5(b) select b from t1;
+commit;
+# 1 Restart mysqld --innodb-checksum-algorithm=crc32
+select count(*) from t1;
+count(*)
+32
+select count(*) from t2;
+count(*)
+32
+select count(*) from t3;
+count(*)
+32
+select count(*) from t4;
+count(*)
+32
+select count(*) from t5;
+count(*)
+32
+insert into t1(b) select b from t1;
+insert into t2(b) select b from t1;
+insert into t3(b) select b from t1;
+insert into t4(b) select b from t1;
+insert into t5(b) select b from t1;
+# 2 Restart mysqld --innodb-checksum-algorithm=innodb
+select count(*) from t1;
+count(*)
+64
+select count(*) from t2;
+count(*)
+96
+select count(*) from t3;
+count(*)
+96
+select count(*) from t4;
+count(*)
+96
+select count(*) from t5;
+count(*)
+96
+insert into t1(b) select b from t1 limit 100;
+insert into t2(b) select b from t1 limit 100;
+insert into t3(b) select b from t1 limit 100;
+insert into t4(b) select b from t1 limit 100;
+insert into t5(b) select b from t1 limit 100;
+# 3 Restart mysqld --innodb-checksum-algorithm=none
+select count(*) from t1;
+count(*)
+128
+select count(*) from t2;
+count(*)
+196
+select count(*) from t3;
+count(*)
+196
+select count(*) from t4;
+count(*)
+196
+select count(*) from t5;
+count(*)
+196
+insert into t1(b) select b from t1 limit 100;
+insert into t2(b) select b from t1 limit 100;
+insert into t3(b) select b from t1 limit 100;
+insert into t4(b) select b from t1 limit 100;
+insert into t5(b) select b from t1 limit 100;
+# 4 Restart mysqld --innodb-checksum-algorithm=innodb
+select count(*) from t1;
+count(*)
+228
+select count(*) from t2;
+count(*)
+296
+select count(*) from t3;
+count(*)
+296
+select count(*) from t4;
+count(*)
+296
+select count(*) from t5;
+count(*)
+296
+insert into t1(b) select b from t1 limit 100;
+insert into t2(b) select b from t1 limit 100;
+insert into t3(b) select b from t1 limit 100;
+insert into t4(b) select b from t1 limit 100;
+insert into t5(b) select b from t1 limit 100;
+# 5 Restart mysqld --innodb-checksum-algorithm=strict_innodb
+select count(*) from t1;
+count(*)
+328
+select count(*) from t2;
+count(*)
+396
+select count(*) from t3;
+count(*)
+396
+select count(*) from t4;
+count(*)
+396
+select count(*) from t5;
+count(*)
+396
+insert into t1(b) select b from t1 limit 100;
+insert into t2(b) select b from t1 limit 100;
+insert into t3(b) select b from t1 limit 100;
+insert into t4(b) select b from t1 limit 100;
+insert into t5(b) select b from t1 limit 100;
+# 6 Restart mysqld --innodb-checksum-algorithm=innodb
+select count(*) from t1;
+count(*)
+428
+select count(*) from t2;
+count(*)
+496
+select count(*) from t3;
+count(*)
+496
+select count(*) from t4;
+count(*)
+496
+select count(*) from t5;
+count(*)
+496
+insert into t1(b) select b from t1 limit 100;
+insert into t2(b) select b from t1 limit 100;
+insert into t3(b) select b from t1 limit 100;
+insert into t4(b) select b from t1 limit 100;
+insert into t5(b) select b from t1 limit 100;
+# 7 Restart mysqld --innodb-checksum-algorithm=strict_none
+select count(*) from t1;
+count(*)
+528
+select count(*) from t2;
+count(*)
+596
+select count(*) from t3;
+count(*)
+596
+select count(*) from t4;
+count(*)
+596
+select count(*) from t5;
+count(*)
+596
+insert into t1(b) select b from t1 limit 100;
+insert into t2(b) select b from t1 limit 100;
+insert into t3(b) select b from t1 limit 100;
+insert into t4(b) select b from t1 limit 100;
+insert into t5(b) select b from t1 limit 100;
+# 8 Restart mysqld --innodb-checksum-algorithm=innodb
+select count(*) from t1;
+count(*)
+628
+select count(*) from t2;
+count(*)
+696
+select count(*) from t3;
+count(*)
+696
+select count(*) from t4;
+count(*)
+696
+select count(*) from t5;
+count(*)
+696
+insert into t1(b) select b from t1 limit 100;
+insert into t2(b) select b from t1 limit 100;
+insert into t3(b) select b from t1 limit 100;
+insert into t4(b) select b from t1 limit 100;
+insert into t5(b) select b from t1 limit 100;
+# 9 Restart mysqld --innodb-checksum-algorithm=strict_crc32
+select count(*) from t1;
+count(*)
+728
+select count(*) from t2;
+count(*)
+796
+select count(*) from t3;
+count(*)
+796
+select count(*) from t4;
+count(*)
+796
+select count(*) from t5;
+count(*)
+796
+insert into t1(b) select b from t1 limit 100;
+insert into t2(b) select b from t1 limit 100;
+insert into t3(b) select b from t1 limit 100;
+insert into t4(b) select b from t1 limit 100;
+insert into t5(b) select b from t1 limit 100;
+# 10 Restart mysqld --innodb-checksum-algorithm=innodb
+select count(*) from t1;
+count(*)
+828
+select count(*) from t2;
+count(*)
+896
+select count(*) from t3;
+count(*)
+896
+select count(*) from t4;
+count(*)
+896
+select count(*) from t5;
+count(*)
+896
+insert into t1(b) select b from t1 limit 100;
+insert into t2(b) select b from t1 limit 100;
+insert into t3(b) select b from t1 limit 100;
+insert into t4(b) select b from t1 limit 100;
+insert into t5(b) select b from t1 limit 100;
+# Restart mysqld --innodb-checksum-algorithm=crc32
+select count(*) from t1;
+count(*)
+928
+select count(*) from t2;
+count(*)
+996
+select count(*) from t3;
+count(*)
+996
+select count(*) from t4;
+count(*)
+996
+select count(*) from t5;
+count(*)
+996
+insert into t1(b) select b from t1 limit 100;
+insert into t2(b) select b from t1 limit 100;
+insert into t3(b) select b from t1 limit 100;
+insert into t4(b) select b from t1 limit 100;
+insert into t5(b) select b from t1 limit 100;
+# 11 Restart mysqld --innodb-checksum-algorithm=strict_crc32
+select count(*) from t1;
+count(*)
+1028
+select count(*) from t2;
+count(*)
+1096
+select count(*) from t3;
+count(*)
+1096
+select count(*) from t4;
+count(*)
+1096
+select count(*) from t5;
+count(*)
+1096
+insert into t1(b) select b from t1 limit 100;
+insert into t2(b) select b from t1 limit 100;
+insert into t3(b) select b from t1 limit 100;
+insert into t4(b) select b from t1 limit 100;
+insert into t5(b) select b from t1 limit 100;
+# 12 Restart mysqld --innodb-checksum-algorithm=crc32
+select count(*) from t1;
+count(*)
+1128
+select count(*) from t2;
+count(*)
+1196
+select count(*) from t3;
+count(*)
+1196
+select count(*) from t4;
+count(*)
+1196
+select count(*) from t5;
+count(*)
+1196
+insert into t1(b) select b from t1 limit 100;
+insert into t2(b) select b from t1 limit 100;
+insert into t3(b) select b from t1 limit 100;
+insert into t4(b) select b from t1 limit 100;
+insert into t5(b) select b from t1 limit 100;
+# 13 Restart mysqld --innodb-checksum-algorithm=strict_none
+select count(*) from t1;
+count(*)
+1228
+select count(*) from t2;
+count(*)
+1296
+select count(*) from t3;
+count(*)
+1296
+select count(*) from t4;
+count(*)
+1296
+select count(*) from t5;
+count(*)
+1296
+insert into t1(b) select b from t1 limit 100;
+insert into t2(b) select b from t1 limit 100;
+insert into t3(b) select b from t1 limit 100;
+insert into t4(b) select b from t1 limit 100;
+insert into t5(b) select b from t1 limit 100;
+# 14 Restart mysqld --innodb-checksum-algorithm=crc32
+select count(*) from t1;
+count(*)
+1328
+select count(*) from t2;
+count(*)
+1396
+select count(*) from t3;
+count(*)
+1396
+select count(*) from t4;
+count(*)
+1396
+select count(*) from t5;
+count(*)
+1396
+insert into t1(b) select b from t1 limit 100;
+insert into t2(b) select b from t1 limit 100;
+insert into t3(b) select b from t1 limit 100;
+insert into t4(b) select b from t1 limit 100;
+insert into t5(b) select b from t1 limit 100;
+# 15 Restart mysqld --innodb-checksum-algorithm=strict_innodb
+select count(*) from t1;
+count(*)
+1428
+select count(*) from t2;
+count(*)
+1496
+select count(*) from t3;
+count(*)
+1496
+select count(*) from t4;
+count(*)
+1496
+select count(*) from t5;
+count(*)
+1496
+insert into t1(b) select b from t1 limit 100;
+insert into t2(b) select b from t1 limit 100;
+insert into t3(b) select b from t1 limit 100;
+insert into t4(b) select b from t1 limit 100;
+insert into t5(b) select b from t1 limit 100;
+# 16 Restart mysqld --innodb-checksum-algorithm=crc32
+select count(*) from t1;
+count(*)
+1528
+select count(*) from t2;
+count(*)
+1596
+select count(*) from t3;
+count(*)
+1596
+select count(*) from t4;
+count(*)
+1596
+select count(*) from t5;
+count(*)
+1596
+insert into t1(b) select b from t1 limit 100;
+insert into t2(b) select b from t1 limit 100;
+insert into t3(b) select b from t1 limit 100;
+insert into t4(b) select b from t1 limit 100;
+insert into t5(b) select b from t1 limit 100;
+# 17 Restart mysqld --innodb-checksum-algorithm=none
+select count(*) from t1;
+count(*)
+1628
+select count(*) from t2;
+count(*)
+1696
+select count(*) from t3;
+count(*)
+1696
+select count(*) from t4;
+count(*)
+1696
+select count(*) from t5;
+count(*)
+1696
+insert into t1(b) select b from t1 limit 100;
+insert into t2(b) select b from t1 limit 100;
+insert into t3(b) select b from t1 limit 100;
+insert into t4(b) select b from t1 limit 100;
+insert into t5(b) select b from t1 limit 100;
+# 18 Restart mysqld --innodb-checksum-algorithm=crc32
+select count(*) from t1;
+count(*)
+1728
+select count(*) from t2;
+count(*)
+1796
+select count(*) from t3;
+count(*)
+1796
+select count(*) from t4;
+count(*)
+1796
+select count(*) from t5;
+count(*)
+1796
+insert into t1(b) select b from t1 limit 100;
+insert into t2(b) select b from t1 limit 100;
+insert into t3(b) select b from t1 limit 100;
+insert into t4(b) select b from t1 limit 100;
+insert into t5(b) select b from t1 limit 100;
+# Restart mysqld --innodb-checksum-algorithm=strict_crc32
+select count(*) from t1;
+count(*)
+1828
+select count(*) from t2;
+count(*)
+1896
+select count(*) from t3;
+count(*)
+1896
+select count(*) from t4;
+count(*)
+1896
+select count(*) from t5;
+count(*)
+1896
+insert into t1(b) select b from t1 limit 100;
+insert into t2(b) select b from t1 limit 100;
+insert into t3(b) select b from t1 limit 100;
+insert into t4(b) select b from t1 limit 100;
+insert into t5(b) select b from t1 limit 100;
+# 19 Restart mysqld --innodb-checksum-algorithm=strict_none
+select count(*) from t1;
+count(*)
+1928
+select count(*) from t2;
+count(*)
+1996
+select count(*) from t3;
+count(*)
+1996
+select count(*) from t4;
+count(*)
+1996
+select count(*) from t5;
+count(*)
+1996
+insert into t1(b) select b from t1 limit 100;
+insert into t2(b) select b from t1 limit 100;
+insert into t3(b) select b from t1 limit 100;
+insert into t4(b) select b from t1 limit 100;
+insert into t5(b) select b from t1 limit 100;
+# 20 Restart mysqld --innodb-checksum-algorithm=strict_crc32
+select count(*) from t1;
+count(*)
+2028
+select count(*) from t2;
+count(*)
+2096
+select count(*) from t3;
+count(*)
+2096
+select count(*) from t4;
+count(*)
+2096
+select count(*) from t5;
+count(*)
+2096
+insert into t1(b) select b from t1 limit 100;
+insert into t2(b) select b from t1 limit 100;
+insert into t3(b) select b from t1 limit 100;
+insert into t4(b) select b from t1 limit 100;
+insert into t5(b) select b from t1 limit 100;
+# 21 Restart mysqld --innodb-checksum-algorithm=strict_innodb
+select count(*) from t1;
+count(*)
+2128
+select count(*) from t2;
+count(*)
+2196
+select count(*) from t3;
+count(*)
+2196
+select count(*) from t4;
+count(*)
+2196
+select count(*) from t5;
+count(*)
+2196
+insert into t1(b) select b from t1 limit 100;
+insert into t2(b) select b from t1 limit 100;
+insert into t3(b) select b from t1 limit 100;
+insert into t4(b) select b from t1 limit 100;
+insert into t5(b) select b from t1 limit 100;
+# 22 Restart mysqld --innodb-checksum-algorithm=strict_crc32
+select count(*) from t1;
+count(*)
+2228
+select count(*) from t2;
+count(*)
+2296
+select count(*) from t3;
+count(*)
+2296
+select count(*) from t4;
+count(*)
+2296
+select count(*) from t5;
+count(*)
+2296
+insert into t1(b) select b from t1 limit 100;
+insert into t2(b) select b from t1 limit 100;
+insert into t3(b) select b from t1 limit 100;
+insert into t4(b) select b from t1 limit 100;
+insert into t5(b) select b from t1 limit 100;
+# 23 Restart mysqld --innodb-checksum-algorithm=none
+select count(*) from t1;
+count(*)
+2328
+select count(*) from t2;
+count(*)
+2396
+select count(*) from t3;
+count(*)
+2396
+select count(*) from t4;
+count(*)
+2396
+select count(*) from t5;
+count(*)
+2396
+insert into t1(b) select b from t1 limit 100;
+insert into t2(b) select b from t1 limit 100;
+insert into t3(b) select b from t1 limit 100;
+insert into t4(b) select b from t1 limit 100;
+insert into t5(b) select b from t1 limit 100;
+# 24 Restart mysqld --innodb-checksum-algorithm=strict_crc32
+select count(*) from t1;
+count(*)
+2428
+select count(*) from t2;
+count(*)
+2496
+select count(*) from t3;
+count(*)
+2496
+select count(*) from t4;
+count(*)
+2496
+select count(*) from t5;
+count(*)
+2496
+insert into t1(b) select b from t1 limit 100;
+insert into t2(b) select b from t1 limit 100;
+insert into t3(b) select b from t1 limit 100;
+insert into t4(b) select b from t1 limit 100;
+insert into t5(b) select b from t1 limit 100;
+# Restart mysqld --innodb-checksum-algorithm=strict_none
+select count(*) from t1;
+count(*)
+2528
+select count(*) from t2;
+count(*)
+2596
+select count(*) from t3;
+count(*)
+2596
+select count(*) from t4;
+count(*)
+2596
+select count(*) from t5;
+count(*)
+2596
+insert into t1(b) select b from t1 limit 100;
+insert into t2(b) select b from t1 limit 100;
+insert into t3(b) select b from t1 limit 100;
+insert into t4(b) select b from t1 limit 100;
+insert into t5(b) select b from t1 limit 100;
+# 25 Restart mysqld --innodb-checksum-algorithm=none
+select count(*) from t1;
+count(*)
+2628
+select count(*) from t2;
+count(*)
+2696
+select count(*) from t3;
+count(*)
+2696
+select count(*) from t4;
+count(*)
+2696
+select count(*) from t5;
+count(*)
+2696
+insert into t1(b) select b from t1 limit 100;
+insert into t2(b) select b from t1 limit 100;
+insert into t3(b) select b from t1 limit 100;
+insert into t4(b) select b from t1 limit 100;
+insert into t5(b) select b from t1 limit 100;
+# 26 Restart mysqld --innodb-checksum-algorithm=strict_none
+select count(*) from t1;
+count(*)
+2728
+select count(*) from t2;
+count(*)
+2796
+select count(*) from t3;
+count(*)
+2796
+select count(*) from t4;
+count(*)
+2796
+select count(*) from t5;
+count(*)
+2796
+insert into t1(b) select b from t1 limit 100;
+insert into t2(b) select b from t1 limit 100;
+insert into t3(b) select b from t1 limit 100;
+insert into t4(b) select b from t1 limit 100;
+insert into t5(b) select b from t1 limit 100;
+# 27 Restart mysqld --innodb-checksum-algorithm=strict_innodb
+select count(*) from t1;
+count(*)
+2828
+select count(*) from t2;
+count(*)
+2896
+select count(*) from t3;
+count(*)
+2896
+select count(*) from t4;
+count(*)
+2896
+select count(*) from t5;
+count(*)
+2896
+insert into t1(b) select b from t1 limit 100;
+insert into t2(b) select b from t1 limit 100;
+insert into t3(b) select b from t1 limit 100;
+insert into t4(b) select b from t1 limit 100;
+insert into t5(b) select b from t1 limit 100;
+# 28 Restart mysqld --innodb-checksum-algorithm=strict_none
+select count(*) from t1;
+count(*)
+2928
+select count(*) from t2;
+count(*)
+2996
+select count(*) from t3;
+count(*)
+2996
+select count(*) from t4;
+count(*)
+2996
+select count(*) from t5;
+count(*)
+2996
+insert into t1(b) select b from t1 limit 100;
+insert into t2(b) select b from t1 limit 100;
+insert into t3(b) select b from t1 limit 100;
+insert into t4(b) select b from t1 limit 100;
+insert into t5(b) select b from t1 limit 100;
+# Restart mysqld --innodb-checksum-algorithm=none
+select count(*) from t1;
+count(*)
+3028
+select count(*) from t2;
+count(*)
+3096
+select count(*) from t3;
+count(*)
+3096
+select count(*) from t4;
+count(*)
+3096
+select count(*) from t5;
+count(*)
+3096
+insert into t1(b) select b from t1 limit 100;
+insert into t2(b) select b from t1 limit 100;
+insert into t3(b) select b from t1 limit 100;
+insert into t4(b) select b from t1 limit 100;
+insert into t5(b) select b from t1 limit 100;
+# 29 Restart mysqld --innodb-checksum-algorithm=strict_innodb
+select count(*) from t1;
+count(*)
+3128
+select count(*) from t2;
+count(*)
+3196
+select count(*) from t3;
+count(*)
+3196
+select count(*) from t4;
+count(*)
+3196
+select count(*) from t5;
+count(*)
+3196
+insert into t1(b) select b from t1 limit 100;
+insert into t2(b) select b from t1 limit 100;
+insert into t3(b) select b from t1 limit 100;
+insert into t4(b) select b from t1 limit 100;
+insert into t5(b) select b from t1 limit 100;
+# 30 Restart mysqld --innodb-checksum-algorithm=none
+select count(*) from t1;
+count(*)
+3228
+select count(*) from t2;
+count(*)
+3296
+select count(*) from t3;
+count(*)
+3296
+select count(*) from t4;
+count(*)
+3296
+select count(*) from t5;
+count(*)
+3296
+insert into t1(b) select b from t1 limit 100;
+insert into t2(b) select b from t1 limit 100;
+insert into t3(b) select b from t1 limit 100;
+insert into t4(b) select b from t1 limit 100;
+insert into t5(b) select b from t1 limit 100;
+drop table t1,t2,t3,t4,t5;
diff --git a/mysql-test/suite/encryption/r/innodb-compressed-blob.result b/mysql-test/suite/encryption/r/innodb-compressed-blob.result
index d1959f28213..15c2a410948 100644
--- a/mysql-test/suite/encryption/r/innodb-compressed-blob.result
+++ b/mysql-test/suite/encryption/r/innodb-compressed-blob.result
@@ -1,6 +1,6 @@
 call mtr.add_suppression("InnoDB: However key management plugin or used key_version .*");
-call mtr.add_suppression("InnoDB: The page \[page id: space=[0-9]+, page number=[0-9]+\] in file test/t[0-9] cannot be decrypted.");
-call mtr.add_suppression("Unable to decompress space test/t[0-9] \[[0-9]+:[0-9]+\]");
+call mtr.add_suppression("InnoDB: The page \\[page id: space=[1-9][0-9]*, page number=[0-9]+\\] in file test/t[1-3] cannot be decrypted.");
+call mtr.add_suppression("Unable to decompress space ..test.t[1-3].ibd \\[[1-9][0-9]*:[0-9]+\\]");
 # Restart mysqld --file-key-management-filename=keys2.txt
 SET GLOBAL innodb_file_format = `Barracuda`;
 SET GLOBAL innodb_file_per_table = ON;
diff --git a/mysql-test/suite/encryption/t/innodb-checksum-algorithm.opt b/mysql-test/suite/encryption/t/innodb-checksum-algorithm.opt
new file mode 100644
index 00000000000..8a13b909879
--- /dev/null
+++ b/mysql-test/suite/encryption/t/innodb-checksum-algorithm.opt
@@ -0,0 +1,4 @@
+--innodb_checksum_algorithm=innodb
+--innodb-tablespaces-encryption
+--innodb-encrypt-tables=on
+--innodb-encryption-threads=4
diff --git a/mysql-test/suite/encryption/t/innodb-checksum-algorithm.test b/mysql-test/suite/encryption/t/innodb-checksum-algorithm.test
new file mode 100644
index 00000000000..baea1b8a3eb
--- /dev/null
+++ b/mysql-test/suite/encryption/t/innodb-checksum-algorithm.test
@@ -0,0 +1,652 @@
+-- source include/have_innodb.inc
+-- source include/have_file_key_management_plugin.inc
+
+# embedded does not support restart
+-- source include/not_embedded.inc
+
+#
+# Tests:
+#
+# innodb
+# 1) innodb => crc32
+# 2) crc32  => innodb
+# 3) innodb => none
+# 4) none   => innodb
+# 5) innodb => strict_innodb
+# 6) strict_innodb => innodb
+# 7) innodb => strict_none
+# 8) strict_none => innodb
+# 9) innodb => strict_crc32
+# 10) strict_crc32 => innodb
+#
+# crc32
+# 11) crc32 => strict_crc32
+# 12) strict_crc32 => crc32
+# 13) crc32 => strict_none
+# 14) strict_none => crc32
+# 15) crc32 => strict_innodb
+# 16) strict_innodb => crc32
+# 17) crc32 => none
+# 18) none => crc32
+# (note that innodb is handled on 1 and 2)
+#
+# strict_crc32
+# 19) strict_crc32 => strict_none
+# 20) strict_none => strict_crc32
+# 21) strict_crc32 => strict_innodb
+# 22) strict_innodb => strict_crc32
+# 23) strict_crc32 => none
+# 24) none => strict_crc32
+# (note that innodb is handled on 9 and 10)
+# (note that crc32 is handled on 11 and 12)
+#
+# strict_none
+# 25) strict_none => none
+# 26) none => strict_none
+# 27) strict_none = strict_innodb
+# 28) strict_innodb => strict_none
+# (note that innodb is handled on 7 and 8)
+# (note that crc32 is handled on 13 and 14)
+# (note that strict_crc32 is handled 19 and 20)
+#
+# none
+# 29) none => strict_innodb
+# 30) strict_innodb => none
+# (note that innodb is handled on 3 and 4)
+# (note that crc32 is handled on 17 and 18)
+# (note that strict_crc32 is handled on 23 and 24)
+# (note that strict_none is handled on 25 and 26)
+#
+# strict_innodb
+# (note that innodb is handled on 5 and 6)
+# (note that crc32 is handled on 15 and 16)
+# (note that strict_crc32 is handled on 21 and 22)
+# (note that strict_none is handled on 27 and 28)
+# (note that none is handled on 29 and 30)
+#
+--disable_warnings
+SET GLOBAL innodb_file_format = `Barracuda`;
+SET GLOBAL innodb_file_per_table = ON;
+
+call mtr.add_suppression("InnoDB: innodb_checksum_algorithm is set to \"strict_crc32\" but the page \\[page id: space=[0-9]+, page number=[0-9]+\\] contains a valid checksum \"innodb\". Accepting the page as valid. Change innodb_checksum_algorithm to \"crc32\" to silently accept such pages or rewrite all pages so that they contain \"crc32\" checksum.");
+
+call mtr.add_suppression("InnoDB: innodb_checksum_algorithm is set to \"strict_none\" but the page \\[page id: space=[0-9]+, page number=[0-9]+\\] contains a valid checksum \"innodb\". Accepting the page as valid. Change innodb_checksum_algorithm to \"none\" to silently accept such pages or rewrite all pages so that they contain \"none\" checksum.");
+
+call mtr.add_suppression("InnoDB: innodb_checksum_algorithm is set to \"strict_crc32\" but the page \\[page id: space=[0-9]+, page number=[0-9]+\\] contains a valid checksum \"none\". Accepting the page as valid. Change innodb_checksum_algorithm to \"crc32\" to silently accept such pages or rewrite all pages so that they contain \"crc32\" checksum.");
+
+call mtr.add_suppression("InnoDB: innodb_checksum_algorithm is set to \"strict_innodb\" but the page \\[page id: space=[0-9]+, page number=[0-9]+\\] contains a valid checksum \"none\". Accepting the page as valid. Change innodb_checksum_algorithm to \"innodb\" to silently accept such pages or rewrite all pages so that they contain \"innodb\" checksum.");
+
+call mtr.add_suppression("InnoDB: innodb_checksum_algorithm is set to \"strict_innodb\" but the page \\[page id: space=[0-9]+, page number=[0-9]+\\] contains a valid checksum \"crc32\". Accepting the page as valid. Change innodb_checksum_algorithm to \"innodb\" to silently accept such pages or rewrite all pages so that they contain \"innodb\" checksum.");
+
+call mtr.add_suppression("InnoDB: innodb_checksum_algorithm is set to \"strict_none\" but the page \\[page id: space=[0-9]+, page number=[0-9]+\\] contains a valid checksum \"crc32\". Accepting the page as valid. Change innodb_checksum_algorithm to \"none\" to silently accept such pages or rewrite all pages so that they contain \"none\" checksum.");
+
+--enable_warnings
+
+set GLOBAL innodb_default_encryption_key_id=4;
+create table t1(a int not null auto_increment primary key, b blob, index(b(10))) engine=innodb row_format=compressed encrypted=yes;
+create table t2(a int not null auto_increment primary key, b blob, index(b(10))) engine=innodb encrypted=yes;
+create table t3(a int not null auto_increment primary key, b blob, index(b(10))) engine=innodb row_format=compressed encrypted=no;
+create table t4(a int not null auto_increment primary key, b blob, index(b(10))) engine=innodb encrypted=no;
+create table t5(a int not null auto_increment primary key, b blob, index(b(10))) engine=innodb encrypted=yes page_compressed=yes;
+
+begin;
+insert into t1(b) values (repeat('secret',20));
+insert into t1(b) select b from t1;
+insert into t1(b) select b from t1;
+insert into t1(b) select b from t1;
+insert into t1(b) select b from t1;
+insert into t1(b) select b from t1;
+insert into t2(b) select b from t1;
+insert into t3(b) select b from t1;
+insert into t4(b) select b from t1;
+insert into t5(b) select b from t1;
+commit;
+
+--echo # 1 Restart mysqld --innodb-checksum-algorithm=crc32
+-- let $restart_parameters=--innodb-checksum-algorithm=crc32
+-- source include/restart_mysqld.inc
+
+select count(*) from t1;
+select count(*) from t2;
+select count(*) from t3;
+select count(*) from t4;
+select count(*) from t5;
+
+insert into t1(b) select b from t1;
+insert into t2(b) select b from t1;
+insert into t3(b) select b from t1;
+insert into t4(b) select b from t1;
+insert into t5(b) select b from t1;
+
+--echo # 2 Restart mysqld --innodb-checksum-algorithm=innodb
+-- let $restart_parameters=--innodb-checksum-algorithm=innodb
+-- source include/restart_mysqld.inc
+
+select count(*) from t1;
+select count(*) from t2;
+select count(*) from t3;
+select count(*) from t4;
+select count(*) from t5;
+
+insert into t1(b) select b from t1 limit 100;
+insert into t2(b) select b from t1 limit 100;
+insert into t3(b) select b from t1 limit 100;
+insert into t4(b) select b from t1 limit 100;
+insert into t5(b) select b from t1 limit 100;
+
+--echo # 3 Restart mysqld --innodb-checksum-algorithm=none
+-- let $restart_parameters=--innodb-checksum-algorithm=none
+-- source include/restart_mysqld.inc
+
+select count(*) from t1;
+select count(*) from t2;
+select count(*) from t3;
+select count(*) from t4;
+select count(*) from t5;
+
+insert into t1(b) select b from t1 limit 100;
+insert into t2(b) select b from t1 limit 100;
+insert into t3(b) select b from t1 limit 100;
+insert into t4(b) select b from t1 limit 100;
+insert into t5(b) select b from t1 limit 100;
+
+--echo # 4 Restart mysqld --innodb-checksum-algorithm=innodb
+-- let $restart_parameters=--innodb-checksum-algorithm=innodb
+-- source include/restart_mysqld.inc
+
+select count(*) from t1;
+select count(*) from t2;
+select count(*) from t3;
+select count(*) from t4;
+select count(*) from t5;
+
+insert into t1(b) select b from t1 limit 100;
+insert into t2(b) select b from t1 limit 100;
+insert into t3(b) select b from t1 limit 100;
+insert into t4(b) select b from t1 limit 100;
+insert into t5(b) select b from t1 limit 100;
+
+--echo # 5 Restart mysqld --innodb-checksum-algorithm=strict_innodb
+-- let $restart_parameters=--innodb-checksum-algorithm=strict_innodb
+-- source include/restart_mysqld.inc
+
+select count(*) from t1;
+select count(*) from t2;
+select count(*) from t3;
+select count(*) from t4;
+select count(*) from t5;
+
+insert into t1(b) select b from t1 limit 100;
+insert into t2(b) select b from t1 limit 100;
+insert into t3(b) select b from t1 limit 100;
+insert into t4(b) select b from t1 limit 100;
+insert into t5(b) select b from t1 limit 100;
+
+--echo # 6 Restart mysqld --innodb-checksum-algorithm=innodb
+-- let $restart_parameters=--innodb-checksum-algorithm=innodb
+-- source include/restart_mysqld.inc
+
+select count(*) from t1;
+select count(*) from t2;
+select count(*) from t3;
+select count(*) from t4;
+select count(*) from t5;
+
+insert into t1(b) select b from t1 limit 100;
+insert into t2(b) select b from t1 limit 100;
+insert into t3(b) select b from t1 limit 100;
+insert into t4(b) select b from t1 limit 100;
+insert into t5(b) select b from t1 limit 100;
+
+--echo # 7 Restart mysqld --innodb-checksum-algorithm=strict_none
+-- let $restart_parameters=--innodb-checksum-algorithm=strict_none
+-- source include/restart_mysqld.inc
+
+select count(*) from t1;
+select count(*) from t2;
+select count(*) from t3;
+select count(*) from t4;
+select count(*) from t5;
+
+insert into t1(b) select b from t1 limit 100;
+insert into t2(b) select b from t1 limit 100;
+insert into t3(b) select b from t1 limit 100;
+insert into t4(b) select b from t1 limit 100;
+insert into t5(b) select b from t1 limit 100;
+
+--echo # 8 Restart mysqld --innodb-checksum-algorithm=innodb
+-- let $restart_parameters=--innodb-checksum-algorithm=innodb
+-- source include/restart_mysqld.inc
+
+select count(*) from t1;
+select count(*) from t2;
+select count(*) from t3;
+select count(*) from t4;
+select count(*) from t5;
+
+insert into t1(b) select b from t1 limit 100;
+insert into t2(b) select b from t1 limit 100;
+insert into t3(b) select b from t1 limit 100;
+insert into t4(b) select b from t1 limit 100;
+insert into t5(b) select b from t1 limit 100;
+
+--echo # 9 Restart mysqld --innodb-checksum-algorithm=strict_crc32
+-- let $restart_parameters=--innodb-checksum-algorithm=strict_crc32
+-- source include/restart_mysqld.inc
+
+select count(*) from t1;
+select count(*) from t2;
+select count(*) from t3;
+select count(*) from t4;
+select count(*) from t5;
+
+insert into t1(b) select b from t1 limit 100;
+insert into t2(b) select b from t1 limit 100;
+insert into t3(b) select b from t1 limit 100;
+insert into t4(b) select b from t1 limit 100;
+insert into t5(b) select b from t1 limit 100;
+
+--echo # 10 Restart mysqld --innodb-checksum-algorithm=innodb
+-- let $restart_parameters=--innodb-checksum-algorithm=innodb
+-- source include/restart_mysqld.inc
+
+select count(*) from t1;
+select count(*) from t2;
+select count(*) from t3;
+select count(*) from t4;
+select count(*) from t5;
+
+insert into t1(b) select b from t1 limit 100;
+insert into t2(b) select b from t1 limit 100;
+insert into t3(b) select b from t1 limit 100;
+insert into t4(b) select b from t1 limit 100;
+insert into t5(b) select b from t1 limit 100;
+
+--echo # Restart mysqld --innodb-checksum-algorithm=crc32
+-- let $restart_parameters=--innodb-checksum-algorithm=crc32
+-- source include/restart_mysqld.inc
+
+select count(*) from t1;
+select count(*) from t2;
+select count(*) from t3;
+select count(*) from t4;
+select count(*) from t5;
+
+insert into t1(b) select b from t1 limit 100;
+insert into t2(b) select b from t1 limit 100;
+insert into t3(b) select b from t1 limit 100;
+insert into t4(b) select b from t1 limit 100;
+insert into t5(b) select b from t1 limit 100;
+
+--echo # 11 Restart mysqld --innodb-checksum-algorithm=strict_crc32
+-- let $restart_parameters=--innodb-checksum-algorithm=strict_crc32
+-- source include/restart_mysqld.inc
+
+select count(*) from t1;
+select count(*) from t2;
+select count(*) from t3;
+select count(*) from t4;
+select count(*) from t5;
+
+insert into t1(b) select b from t1 limit 100;
+insert into t2(b) select b from t1 limit 100;
+insert into t3(b) select b from t1 limit 100;
+insert into t4(b) select b from t1 limit 100;
+insert into t5(b) select b from t1 limit 100;
+
+--echo # 12 Restart mysqld --innodb-checksum-algorithm=crc32
+-- let $restart_parameters=--innodb-checksum-algorithm=crc32
+-- source include/restart_mysqld.inc
+
+select count(*) from t1;
+select count(*) from t2;
+select count(*) from t3;
+select count(*) from t4;
+select count(*) from t5;
+
+insert into t1(b) select b from t1 limit 100;
+insert into t2(b) select b from t1 limit 100;
+insert into t3(b) select b from t1 limit 100;
+insert into t4(b) select b from t1 limit 100;
+insert into t5(b) select b from t1 limit 100;
+
+--echo # 13 Restart mysqld --innodb-checksum-algorithm=strict_none
+-- let $restart_parameters=--innodb-checksum-algorithm=strict_none
+-- source include/restart_mysqld.inc
+
+select count(*) from t1;
+select count(*) from t2;
+select count(*) from t3;
+select count(*) from t4;
+select count(*) from t5;
+
+insert into t1(b) select b from t1 limit 100;
+insert into t2(b) select b from t1 limit 100;
+insert into t3(b) select b from t1 limit 100;
+insert into t4(b) select b from t1 limit 100;
+insert into t5(b) select b from t1 limit 100;
+
+--echo # 14 Restart mysqld --innodb-checksum-algorithm=crc32
+-- let $restart_parameters=--innodb-checksum-algorithm=crc32
+-- source include/restart_mysqld.inc
+
+select count(*) from t1;
+select count(*) from t2;
+select count(*) from t3;
+select count(*) from t4;
+select count(*) from t5;
+
+insert into t1(b) select b from t1 limit 100;
+insert into t2(b) select b from t1 limit 100;
+insert into t3(b) select b from t1 limit 100;
+insert into t4(b) select b from t1 limit 100;
+insert into t5(b) select b from t1 limit 100;
+
+--echo # 15 Restart mysqld --innodb-checksum-algorithm=strict_innodb
+-- let $restart_parameters=--innodb-checksum-algorithm=strict_innodb
+-- source include/restart_mysqld.inc
+
+select count(*) from t1;
+select count(*) from t2;
+select count(*) from t3;
+select count(*) from t4;
+select count(*) from t5;
+
+insert into t1(b) select b from t1 limit 100;
+insert into t2(b) select b from t1 limit 100;
+insert into t3(b) select b from t1 limit 100;
+insert into t4(b) select b from t1 limit 100;
+insert into t5(b) select b from t1 limit 100;
+
+--echo # 16 Restart mysqld --innodb-checksum-algorithm=crc32
+-- let $restart_parameters=--innodb-checksum-algorithm=crc32
+-- source include/restart_mysqld.inc
+
+select count(*) from t1;
+select count(*) from t2;
+select count(*) from t3;
+select count(*) from t4;
+select count(*) from t5;
+
+insert into t1(b) select b from t1 limit 100;
+insert into t2(b) select b from t1 limit 100;
+insert into t3(b) select b from t1 limit 100;
+insert into t4(b) select b from t1 limit 100;
+insert into t5(b) select b from t1 limit 100;
+
+--echo # 17 Restart mysqld --innodb-checksum-algorithm=none
+-- let $restart_parameters=--innodb-checksum-algorithm=none
+-- source include/restart_mysqld.inc
+
+select count(*) from t1;
+select count(*) from t2;
+select count(*) from t3;
+select count(*) from t4;
+select count(*) from t5;
+
+insert into t1(b) select b from t1 limit 100;
+insert into t2(b) select b from t1 limit 100;
+insert into t3(b) select b from t1 limit 100;
+insert into t4(b) select b from t1 limit 100;
+insert into t5(b) select b from t1 limit 100;
+
+--echo # 18 Restart mysqld --innodb-checksum-algorithm=crc32
+-- let $restart_parameters=--innodb-checksum-algorithm=crc32
+-- source include/restart_mysqld.inc
+
+select count(*) from t1;
+select count(*) from t2;
+select count(*) from t3;
+select count(*) from t4;
+select count(*) from t5;
+
+insert into t1(b) select b from t1 limit 100;
+insert into t2(b) select b from t1 limit 100;
+insert into t3(b) select b from t1 limit 100;
+insert into t4(b) select b from t1 limit 100;
+insert into t5(b) select b from t1 limit 100;
+
+--echo # Restart mysqld --innodb-checksum-algorithm=strict_crc32
+-- let $restart_parameters=--innodb-checksum-algorithm=strict_crc32
+-- source include/restart_mysqld.inc
+
+select count(*) from t1;
+select count(*) from t2;
+select count(*) from t3;
+select count(*) from t4;
+select count(*) from t5;
+
+insert into t1(b) select b from t1 limit 100;
+insert into t2(b) select b from t1 limit 100;
+insert into t3(b) select b from t1 limit 100;
+insert into t4(b) select b from t1 limit 100;
+insert into t5(b) select b from t1 limit 100;
+
+--echo # 19 Restart mysqld --innodb-checksum-algorithm=strict_none
+-- let $restart_parameters=--innodb-checksum-algorithm=strict_none
+-- source include/restart_mysqld.inc
+
+select count(*) from t1;
+select count(*) from t2;
+select count(*) from t3;
+select count(*) from t4;
+select count(*) from t5;
+
+insert into t1(b) select b from t1 limit 100;
+insert into t2(b) select b from t1 limit 100;
+insert into t3(b) select b from t1 limit 100;
+insert into t4(b) select b from t1 limit 100;
+insert into t5(b) select b from t1 limit 100;
+
+--echo # 20 Restart mysqld --innodb-checksum-algorithm=strict_crc32
+-- let $restart_parameters=--innodb-checksum-algorithm=strict_crc32
+-- source include/restart_mysqld.inc
+
+select count(*) from t1;
+select count(*) from t2;
+select count(*) from t3;
+select count(*) from t4;
+select count(*) from t5;
+
+insert into t1(b) select b from t1 limit 100;
+insert into t2(b) select b from t1 limit 100;
+insert into t3(b) select b from t1 limit 100;
+insert into t4(b) select b from t1 limit 100;
+insert into t5(b) select b from t1 limit 100;
+
+--echo # 21 Restart mysqld --innodb-checksum-algorithm=strict_innodb
+-- let $restart_parameters=--innodb-checksum-algorithm=strict_innodb
+-- source include/restart_mysqld.inc
+
+select count(*) from t1;
+select count(*) from t2;
+select count(*) from t3;
+select count(*) from t4;
+select count(*) from t5;
+
+insert into t1(b) select b from t1 limit 100;
+insert into t2(b) select b from t1 limit 100;
+insert into t3(b) select b from t1 limit 100;
+insert into t4(b) select b from t1 limit 100;
+insert into t5(b) select b from t1 limit 100;
+
+--echo # 22 Restart mysqld --innodb-checksum-algorithm=strict_crc32
+-- let $restart_parameters=--innodb-checksum-algorithm=strict_crc32
+-- source include/restart_mysqld.inc
+
+select count(*) from t1;
+select count(*) from t2;
+select count(*) from t3;
+select count(*) from t4;
+select count(*) from t5;
+
+insert into t1(b) select b from t1 limit 100;
+insert into t2(b) select b from t1 limit 100;
+insert into t3(b) select b from t1 limit 100;
+insert into t4(b) select b from t1 limit 100;
+insert into t5(b) select b from t1 limit 100;
+
+--echo # 23 Restart mysqld --innodb-checksum-algorithm=none
+-- let $restart_parameters=--innodb-checksum-algorithm=none
+-- source include/restart_mysqld.inc
+
+select count(*) from t1;
+select count(*) from t2;
+select count(*) from t3;
+select count(*) from t4;
+select count(*) from t5;
+
+insert into t1(b) select b from t1 limit 100;
+insert into t2(b) select b from t1 limit 100;
+insert into t3(b) select b from t1 limit 100;
+insert into t4(b) select b from t1 limit 100;
+insert into t5(b) select b from t1 limit 100;
+
+--echo # 24 Restart mysqld --innodb-checksum-algorithm=strict_crc32
+-- let $restart_parameters=--innodb-checksum-algorithm=strict_crc32
+-- source include/restart_mysqld.inc
+
+select count(*) from t1;
+select count(*) from t2;
+select count(*) from t3;
+select count(*) from t4;
+select count(*) from t5;
+
+insert into t1(b) select b from t1 limit 100;
+insert into t2(b) select b from t1 limit 100;
+insert into t3(b) select b from t1 limit 100;
+insert into t4(b) select b from t1 limit 100;
+insert into t5(b) select b from t1 limit 100;
+
+--echo # Restart mysqld --innodb-checksum-algorithm=strict_none
+-- let $restart_parameters=--innodb-checksum-algorithm=strict_none
+-- source include/restart_mysqld.inc
+
+select count(*) from t1;
+select count(*) from t2;
+select count(*) from t3;
+select count(*) from t4;
+select count(*) from t5;
+
+insert into t1(b) select b from t1 limit 100;
+insert into t2(b) select b from t1 limit 100;
+insert into t3(b) select b from t1 limit 100;
+insert into t4(b) select b from t1 limit 100;
+insert into t5(b) select b from t1 limit 100;
+
+--echo # 25 Restart mysqld --innodb-checksum-algorithm=none
+-- let $restart_parameters=--innodb-checksum-algorithm=none
+-- source include/restart_mysqld.inc
+
+select count(*) from t1;
+select count(*) from t2;
+select count(*) from t3;
+select count(*) from t4;
+select count(*) from t5;
+
+insert into t1(b) select b from t1 limit 100;
+insert into t2(b) select b from t1 limit 100;
+insert into t3(b) select b from t1 limit 100;
+insert into t4(b) select b from t1 limit 100;
+insert into t5(b) select b from t1 limit 100;
+
+--echo # 26 Restart mysqld --innodb-checksum-algorithm=strict_none
+-- let $restart_parameters=--innodb-checksum-algorithm=strict_none
+-- source include/restart_mysqld.inc
+
+select count(*) from t1;
+select count(*) from t2;
+select count(*) from t3;
+select count(*) from t4;
+select count(*) from t5;
+
+insert into t1(b) select b from t1 limit 100;
+insert into t2(b) select b from t1 limit 100;
+insert into t3(b) select b from t1 limit 100;
+insert into t4(b) select b from t1 limit 100;
+insert into t5(b) select b from t1 limit 100;
+
+--echo # 27 Restart mysqld --innodb-checksum-algorithm=strict_innodb
+-- let $restart_parameters=--innodb-checksum-algorithm=strict_innodb
+-- source include/restart_mysqld.inc
+
+select count(*) from t1;
+select count(*) from t2;
+select count(*) from t3;
+select count(*) from t4;
+select count(*) from t5;
+
+insert into t1(b) select b from t1 limit 100;
+insert into t2(b) select b from t1 limit 100;
+insert into t3(b) select b from t1 limit 100;
+insert into t4(b) select b from t1 limit 100;
+insert into t5(b) select b from t1 limit 100;
+
+--echo # 28 Restart mysqld --innodb-checksum-algorithm=strict_none
+-- let $restart_parameters=--innodb-checksum-algorithm=strict_none
+-- source include/restart_mysqld.inc
+
+select count(*) from t1;
+select count(*) from t2;
+select count(*) from t3;
+select count(*) from t4;
+select count(*) from t5;
+
+insert into t1(b) select b from t1 limit 100;
+insert into t2(b) select b from t1 limit 100;
+insert into t3(b) select b from t1 limit 100;
+insert into t4(b) select b from t1 limit 100;
+insert into t5(b) select b from t1 limit 100;
+
+--echo # Restart mysqld --innodb-checksum-algorithm=none
+-- let $restart_parameters=--innodb-checksum-algorithm=none
+-- source include/restart_mysqld.inc
+
+select count(*) from t1;
+select count(*) from t2;
+select count(*) from t3;
+select count(*) from t4;
+select count(*) from t5;
+
+insert into t1(b) select b from t1 limit 100;
+insert into t2(b) select b from t1 limit 100;
+insert into t3(b) select b from t1 limit 100;
+insert into t4(b) select b from t1 limit 100;
+insert into t5(b) select b from t1 limit 100;
+
+--echo # 29 Restart mysqld --innodb-checksum-algorithm=strict_innodb
+-- let $restart_parameters=--innodb-checksum-algorithm=strict_innodb
+-- source include/restart_mysqld.inc
+
+select count(*) from t1;
+select count(*) from t2;
+select count(*) from t3;
+select count(*) from t4;
+select count(*) from t5;
+
+insert into t1(b) select b from t1 limit 100;
+insert into t2(b) select b from t1 limit 100;
+insert into t3(b) select b from t1 limit 100;
+insert into t4(b) select b from t1 limit 100;
+insert into t5(b) select b from t1 limit 100;
+
+--echo # 30 Restart mysqld --innodb-checksum-algorithm=none
+-- let $restart_parameters=--innodb-checksum-algorithm=none
+-- source include/restart_mysqld.inc
+
+select count(*) from t1;
+select count(*) from t2;
+select count(*) from t3;
+select count(*) from t4;
+select count(*) from t5;
+
+insert into t1(b) select b from t1 limit 100;
+insert into t2(b) select b from t1 limit 100;
+insert into t3(b) select b from t1 limit 100;
+insert into t4(b) select b from t1 limit 100;
+insert into t5(b) select b from t1 limit 100;
+
+drop table t1,t2,t3,t4,t5;
+
+
+
diff --git a/mysql-test/suite/encryption/t/innodb-compressed-blob.test b/mysql-test/suite/encryption/t/innodb-compressed-blob.test
index 0febd5ff450..cb69f22f745 100644
--- a/mysql-test/suite/encryption/t/innodb-compressed-blob.test
+++ b/mysql-test/suite/encryption/t/innodb-compressed-blob.test
@@ -5,8 +5,8 @@
 -- source include/not_embedded.inc
 
 call mtr.add_suppression("InnoDB: However key management plugin or used key_version .*");
-call mtr.add_suppression("InnoDB: The page \[page id: space=[0-9]+, page number=[0-9]+\] in file test/t[0-9] cannot be decrypted.");
-call mtr.add_suppression("Unable to decompress space test/t[0-9] \[[0-9]+:[0-9]+\]");
+call mtr.add_suppression("InnoDB: The page \\[page id: space=[1-9][0-9]*, page number=[0-9]+\\] in file test/t[1-3] cannot be decrypted.");
+call mtr.add_suppression("Unable to decompress space ..test.t[1-3].ibd \\[[1-9][0-9]*:[0-9]+\\]");
 
 --echo # Restart mysqld --file-key-management-filename=keys2.txt
 -- let $restart_parameters=--file-key-management-filename=$MYSQL_TEST_DIR/std_data/keys2.txt
diff --git a/storage/innobase/buf/buf0buf.cc b/storage/innobase/buf/buf0buf.cc
index 6e47bca6673..9b9d0b37f13 100644
--- a/storage/innobase/buf/buf0buf.cc
+++ b/storage/innobase/buf/buf0buf.cc
@@ -2535,6 +2535,7 @@ buf_zip_decompress(
 {
 	const byte*	frame = block->page.zip.data;
 	ulint		size = page_zip_get_size(&block->page.zip);
+	/* Space is not found if this function is called during IMPORT */
 	fil_space_t* space = fil_space_acquire_for_io(block->page.space);
 	const unsigned key_version = mach_read_from_4(frame +
 			FIL_PAGE_FILE_FLUSH_LSN_OR_KEY_VERSION);
@@ -2553,7 +2554,7 @@ buf_zip_decompress(
 			"Compressed page checksum mismatch"
 			" for %s [%u:%u]: stored: " ULINTPF ", crc32: " ULINTPF
 			" innodb: " ULINTPF ", none: " ULINTPF ".",
-			space ? space->name : "N/A",
+			space ? space->chain.start->name : "N/A",
 			block->page.space, block->page.offset,
 			mach_read_from_4(frame + FIL_PAGE_SPACE_OR_CHKSUM),
 			page_zip_calc_checksum(frame, size,
@@ -2570,13 +2571,15 @@ buf_zip_decompress(
 
 		if (page_zip_decompress(&block->page.zip,
 					block->frame, TRUE)) {
-			fil_space_release_for_io(space);
+			if (space) {
+				fil_space_release_for_io(space);
+			}
 			return(TRUE);
 		}
 
 		ib_logf(IB_LOG_LEVEL_ERROR,
 			"Unable to decompress space %s [%u:%u]",
-			space ? space->name : "N/A",
+			space ? space->chain.start->name : "N/A",
 			block->page.space,
 			block->page.offset);
 
@@ -2592,14 +2595,18 @@ buf_zip_decompress(
 		/* Copy to uncompressed storage. */
 		memcpy(block->frame, frame,
 		       buf_block_get_zip_size(block));
-		fil_space_release_for_io(space);
+
+		if (space) {
+			fil_space_release_for_io(space);
+		}
+
 		return(TRUE);
 	}
 
 	ib_logf(IB_LOG_LEVEL_ERROR,
 		"Unknown compressed page in %s [%u:%u]"
 		" type %s [" ULINTPF "].",
-		space ? space->name : "N/A",
+		space ? space->chain.start->name : "N/A",
 		block->page.space, block->page.offset,
 		fil_get_page_type_name(fil_page_get_type(frame)), fil_page_get_type(frame));
 
@@ -2614,7 +2621,9 @@ buf_zip_decompress(
 		dict_set_corrupted_by_space(block->page.space);
 	}
 
-	fil_space_release_for_io(space);
+	if (space) {
+		fil_space_release_for_io(space);
+	}
 
 	return(FALSE);
 }
diff --git a/storage/innobase/fil/fil0fil.cc b/storage/innobase/fil/fil0fil.cc
index 5da1a18b62c..e19ef110b4f 100644
--- a/storage/innobase/fil/fil0fil.cc
+++ b/storage/innobase/fil/fil0fil.cc
@@ -7221,13 +7221,11 @@ UNIV_INTERN
 void
 fil_space_release_for_io(fil_space_t* space)
 {
-	if (space) {
-		mutex_enter(&fil_system->mutex);
-		ut_ad(space->magic_n == FIL_SPACE_MAGIC_N);
-		ut_ad(space->n_pending_ios > 0);
-		space->n_pending_ios--;
-		mutex_exit(&fil_system->mutex);
-	}
+	mutex_enter(&fil_system->mutex);
+	ut_ad(space->magic_n == FIL_SPACE_MAGIC_N);
+	ut_ad(space->n_pending_ios > 0);
+	space->n_pending_ios--;
+	mutex_exit(&fil_system->mutex);
 }
 
 /** Return the next fil_space_t.
diff --git a/storage/xtradb/buf/buf0buf.cc b/storage/xtradb/buf/buf0buf.cc
index b98d374f3c2..da4ab059d07 100644
--- a/storage/xtradb/buf/buf0buf.cc
+++ b/storage/xtradb/buf/buf0buf.cc
@@ -2547,6 +2547,7 @@ buf_zip_decompress(
 {
 	const byte*	frame = block->page.zip.data;
 	ulint		size = page_zip_get_size(&block->page.zip);
+	/* Space is not found if this function is called during IMPORT */
 	fil_space_t* space = fil_space_acquire_for_io(block->page.space);
 	const unsigned key_version = mach_read_from_4(frame +
 			FIL_PAGE_FILE_FLUSH_LSN_OR_KEY_VERSION);
@@ -2565,7 +2566,7 @@ buf_zip_decompress(
 			"Compressed page checksum mismatch"
 			" for %s [%u:%u]: stored: " ULINTPF ", crc32: " ULINTPF
 			" innodb: " ULINTPF ", none: " ULINTPF ".",
-			space ? space->name : "N/A",
+			space ? space->chain.start->name : "N/A",
 			block->page.space, block->page.offset,
 			mach_read_from_4(frame + FIL_PAGE_SPACE_OR_CHKSUM),
 			page_zip_calc_checksum(frame, size,
@@ -2582,13 +2583,15 @@ buf_zip_decompress(
 
 		if (page_zip_decompress(&block->page.zip,
 					block->frame, TRUE)) {
-			fil_space_release_for_io(space);
+			if (space) {
+				fil_space_release_for_io(space);
+			}
 			return(TRUE);
 		}
 
 		ib_logf(IB_LOG_LEVEL_ERROR,
 			"Unable to decompress space %s [%u:%u]",
-			space ? space->name : "N/A",
+			space ? space->chain.start->name : "N/A",
 			block->page.space,
 			block->page.offset);
 
@@ -2604,14 +2607,18 @@ buf_zip_decompress(
 		/* Copy to uncompressed storage. */
 		memcpy(block->frame, frame,
 		       buf_block_get_zip_size(block));
-		fil_space_release_for_io(space);
+
+		if (space) {
+			fil_space_release_for_io(space);
+		}
+
 		return(TRUE);
 	}
 
 	ib_logf(IB_LOG_LEVEL_ERROR,
 		"Unknown compressed page in %s [%u:%u]"
 		" type %s [" ULINTPF "].",
-		space ? space->name : "N/A",
+		space ? space->chain.start->name : "N/A",
 		block->page.space, block->page.offset,
 		fil_get_page_type_name(fil_page_get_type(frame)), fil_page_get_type(frame));
 
@@ -2626,7 +2633,9 @@ buf_zip_decompress(
 		dict_set_corrupted_by_space(block->page.space);
 	}
 
-	fil_space_release_for_io(space);
+	if (space) {
+		fil_space_release_for_io(space);
+	}
 
 	return(FALSE);
 }
diff --git a/storage/xtradb/fil/fil0fil.cc b/storage/xtradb/fil/fil0fil.cc
index f9572a730f4..b669d35ff15 100644
--- a/storage/xtradb/fil/fil0fil.cc
+++ b/storage/xtradb/fil/fil0fil.cc
@@ -7595,13 +7595,11 @@ UNIV_INTERN
 void
 fil_space_release_for_io(fil_space_t* space)
 {
-	if (space) {
-		mutex_enter(&fil_system->mutex);
-		ut_ad(space->magic_n == FIL_SPACE_MAGIC_N);
-		ut_ad(space->n_pending_ios > 0);
-		space->n_pending_ios--;
-		mutex_exit(&fil_system->mutex);
-	}
+	mutex_enter(&fil_system->mutex);
+	ut_ad(space->magic_n == FIL_SPACE_MAGIC_N);
+	ut_ad(space->n_pending_ios > 0);
+	space->n_pending_ios--;
+	mutex_exit(&fil_system->mutex);
 }
 
 /** Release a tablespace acquired with fil_space_acquire().


More information about the commits mailing list