Skip to content

Commit

Permalink
MDEV-26148 SEGV or Assertion `!page_is_comp(page) == !(index->table)-…
Browse files Browse the repository at this point in the history
…>not_redundant()'

FetchIndexRootPages::operator(): handle REDUNDANT vs DYNAMIC case specifically.
Other combinations seems fine as is.
  • Loading branch information
kevgs committed Jul 27, 2021
1 parent 2173f38 commit e785511
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 0 deletions.
12 changes: 12 additions & 0 deletions mysql-test/suite/innodb/r/import_bugs.result
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
call mtr.add_suppression("Index for table 'imp_t1' is corrupt; try to repair it");
SET @save_innodb_checksum_algorithm=@@GLOBAL.innodb_checksum_algorithm;
SET GLOBAL innodb_checksum_algorithm=full_crc32;
CREATE TABLE t1 (a INT PRIMARY KEY) ENGINE=InnoDB ROW_FORMAT=REDUNDANT;
CREATE TABLE imp_t1 (a INT PRIMARY KEY) ENGINE=InnoDB ROW_FORMAT=DYNAMIC;
ALTER TABLE imp_t1 DISCARD TABLESPACE ;
FLUSH TABLES t1 FOR EXPORT;
UNLOCK TABLES;
ALTER TABLE imp_t1 IMPORT TABLESPACE;
ERROR HY000: Schema mismatch (ROW_FORMAT mismatch)
DROP TABLE imp_t1, t1;
SET GLOBAL innodb_checksum_algorithm=@save_innodb_checksum_algorithm;
19 changes: 19 additions & 0 deletions mysql-test/suite/innodb/t/import_bugs.test
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
--source include/have_innodb.inc

call mtr.add_suppression("Index for table 'imp_t1' is corrupt; try to repair it");

SET @save_innodb_checksum_algorithm=@@GLOBAL.innodb_checksum_algorithm;
SET GLOBAL innodb_checksum_algorithm=full_crc32;

CREATE TABLE t1 (a INT PRIMARY KEY) ENGINE=InnoDB ROW_FORMAT=REDUNDANT;
CREATE TABLE imp_t1 (a INT PRIMARY KEY) ENGINE=InnoDB ROW_FORMAT=DYNAMIC;
ALTER TABLE imp_t1 DISCARD TABLESPACE ;
FLUSH TABLES t1 FOR EXPORT;
let $datadir=`select @@datadir`;
--copy_file $datadir/test/t1.ibd $datadir/test/imp_t1.ibd
UNLOCK TABLES;
--error ER_TABLE_SCHEMA_MISMATCH
ALTER TABLE imp_t1 IMPORT TABLESPACE;
DROP TABLE imp_t1, t1;

SET GLOBAL innodb_checksum_algorithm=@save_innodb_checksum_algorithm;
8 changes: 8 additions & 0 deletions storage/innobase/row/row0import.cc
Original file line number Diff line number Diff line change
Expand Up @@ -680,6 +680,14 @@ dberr_t FetchIndexRootPages::operator()(buf_block_t* block) UNIV_NOTHROW
return(DB_CORRUPTION);
}
}

if (!page_is_comp(block->frame) !=
!dict_table_is_comp(m_table)) {
ib_errf(m_trx->mysql_thd, IB_LOG_LEVEL_ERROR,
ER_TABLE_SCHEMA_MISMATCH,
"ROW_FORMAT mismatch");
return DB_CORRUPTION;
}
}

return DB_SUCCESS;
Expand Down

0 comments on commit e785511

Please sign in to comment.