Skip to content
Permalink
Browse files
MDEV-29978 Corruption errors upon CHECK on temporary InnoDB table
row_check_index(): Treat secondary indexes of temporary tables as if
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
is in effect. That is, only consider the delete-mark and nothing else.
  • Loading branch information
dr-m committed Nov 14, 2022
1 parent 704c74c commit c82f3f1
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 10 deletions.
@@ -789,4 +789,16 @@ CHECK TABLE t EXTENDED;
Table Op Msg_type Msg_text
test.t check status OK
DROP TEMPORARY TABLE t;
#
# MDEV-29978 Corruption errors upon CHECK on temporary InnoDB table
#
CREATE TEMPORARY TABLE t (f INT UNIQUE) ENGINE=InnoDB;
INSERT INTO t (f) VALUES (1),(2);
CHECK TABLE t;
Table Op Msg_type Msg_text
test.t check status OK
CHECK TABLE t EXTENDED;
Table Op Msg_type Msg_text
test.t check status OK
DROP TEMPORARY TABLE t;
# End of 10.6 tests
@@ -624,4 +624,15 @@ UPDATE t SET a=2;
CHECK TABLE t;
CHECK TABLE t EXTENDED;
DROP TEMPORARY TABLE t;

--echo #
--echo # MDEV-29978 Corruption errors upon CHECK on temporary InnoDB table
--echo #

CREATE TEMPORARY TABLE t (f INT UNIQUE) ENGINE=InnoDB;
INSERT INTO t (f) VALUES (1),(2);
CHECK TABLE t;
CHECK TABLE t EXTENDED;
DROP TEMPORARY TABLE t;

--echo # End of 10.6 tests
@@ -6300,14 +6300,16 @@ dberr_t row_check_index(row_prebuilt_t *prebuilt, ulint *n_rows)
goto next_rec;
}

if (index->is_clust())
if (prebuilt->table->is_temporary())
{
if (prebuilt->trx->isolation_level == TRX_ISO_READ_UNCOMMITTED)
{
if (!rec_deleted)
goto count_row;
count_or_not:
if (rec_deleted)
goto next_rec;
}
}
else if (index->is_clust())
{
if (prebuilt->trx->isolation_level == TRX_ISO_READ_UNCOMMITTED)
goto count_or_not;

trx_id_t rec_trx_id= row_get_rec_trx_id(rec, index, offsets);

@@ -6371,10 +6373,7 @@ dberr_t row_check_index(row_prebuilt_t *prebuilt, ulint *n_rows)
ER_NOT_KEYFILE, "InnoDB: %s", w.m_oss.str().c_str());
}

if (!rec_deleted)
goto count_row;

goto next_rec;
goto count_or_not;
}
else if (const trx_id_t page_trx_id= page_get_max_trx_id(page_align(rec)))
{

0 comments on commit c82f3f1

Please sign in to comment.