From cb0cad8156f5c7de3777e465a6b8f64bc440b278 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marko=20M=C3=A4kel=C3=A4?= Date: Mon, 14 Jun 2021 10:06:27 +0300 Subject: [PATCH] MDEV-25907: Assertion failed in dict_table_schema_check() dict_table_schema_check(): Simply remove the debug assertion. We will still return a failure. --- .../innodb/r/innodb_stats_create_on_corrupted.result | 9 +++++++++ .../innodb/t/innodb_stats_create_on_corrupted.test | 11 +++++++++++ storage/innobase/dict/dict0stats.cc | 1 - 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/mysql-test/suite/innodb/r/innodb_stats_create_on_corrupted.result b/mysql-test/suite/innodb/r/innodb_stats_create_on_corrupted.result index 66ef5ed269637..3c3996e0bbae5 100644 --- a/mysql-test/suite/innodb/r/innodb_stats_create_on_corrupted.result +++ b/mysql-test/suite/innodb/r/innodb_stats_create_on_corrupted.result @@ -1,5 +1,7 @@ call mtr.add_suppression("InnoDB: Table .*innodb_index_stats.* not found"); call mtr.add_suppression("InnoDB: Fetch of persistent statistics requested for table .*"); +call mtr.add_suppression("InnoDB: Table mysql\\.innodb_index_stats has length mismatch in the column name stat_description\\. Please run mariadb-upgrade"); +call mtr.add_suppression("InnoDB: Column stat_description in table mysql\\.innodb_index_stats is VARCHAR"); ALTER TABLE mysql.innodb_index_stats RENAME TO mysql.innodb_index_stats_; CREATE TABLE test_ps_create_on_corrupted (a INT, PRIMARY KEY (a)) @@ -17,6 +19,13 @@ avg_row_length 0 max_data_length 0 index_length 0 ALTER TABLE mysql.innodb_index_stats_ RENAME TO mysql.innodb_index_stats; +SET old_mode=''; +ALTER TABLE mysql.innodb_index_stats +MODIFY stat_description VARCHAR(1024) COLLATE utf8_bin; +CREATE TABLE t (a INT) ENGINE=InnoDB STATS_PERSISTENT=1; +ALTER TABLE mysql.innodb_index_stats +MODIFY stat_description VARCHAR(1024) COLLATE utf8mb3_bin NOT NULL; +DROP TABLE t; # restart SELECT seq_in_index, column_name, cardinality FROM information_schema.statistics WHERE table_name = 'test_ps_create_on_corrupted' diff --git a/mysql-test/suite/innodb/t/innodb_stats_create_on_corrupted.test b/mysql-test/suite/innodb/t/innodb_stats_create_on_corrupted.test index 5d36cfdcbb900..2ca5ee9fe310c 100644 --- a/mysql-test/suite/innodb/t/innodb_stats_create_on_corrupted.test +++ b/mysql-test/suite/innodb/t/innodb_stats_create_on_corrupted.test @@ -12,6 +12,8 @@ call mtr.add_suppression("InnoDB: Table .*innodb_index_stats.* not found"); call mtr.add_suppression("InnoDB: Fetch of persistent statistics requested for table .*"); +call mtr.add_suppression("InnoDB: Table mysql\\.innodb_index_stats has length mismatch in the column name stat_description\\. Please run mariadb-upgrade"); +call mtr.add_suppression("InnoDB: Column stat_description in table mysql\\.innodb_index_stats is VARCHAR"); -- vertical_results @@ -34,6 +36,15 @@ FROM information_schema.tables WHERE table_name = 'test_ps_create_on_corrupted'; # restore the persistent storage ALTER TABLE mysql.innodb_index_stats_ RENAME TO mysql.innodb_index_stats; +SET old_mode=''; +ALTER TABLE mysql.innodb_index_stats +MODIFY stat_description VARCHAR(1024) COLLATE utf8_bin; +CREATE TABLE t (a INT) ENGINE=InnoDB STATS_PERSISTENT=1; +ALTER TABLE mysql.innodb_index_stats +MODIFY stat_description VARCHAR(1024) COLLATE utf8mb3_bin NOT NULL; + +DROP TABLE t; + --source include/restart_mysqld.inc -- vertical_results diff --git a/storage/innobase/dict/dict0stats.cc b/storage/innobase/dict/dict0stats.cc index 3bc9ed79318c3..d8ae7106cdc08 100644 --- a/storage/innobase/dict/dict0stats.cc +++ b/storage/innobase/dict/dict0stats.cc @@ -405,7 +405,6 @@ dict_table_schema_check( /* check length for exact match */ if (req_schema->columns[i].len != table->cols[j].len) { - ut_ad(table->cols[j].len < req_schema->columns[i].len); sql_print_warning("InnoDB: Table %s has" " length mismatch in the" " column name %s."