MDEV-10424 - Assertion `ticket == __null' failed in MDL_request::set_type
Reexecution of prepared "ANALYZE TABLE merge_table, table" may miss to reinitialize "table" for subsequent execution and trigger assertion failure. This happens because MERGE engine may adjust table->next_global chain, which gets cleared by close_thread_tables()/ha_myisammrg::detach_children() later. Since reinitilization iterates next_global chain, it won't see tables following merge table. Fixed by appending saved next_global chain after merge children.
This commit is contained in:
parent
09cb64682b
commit
723488bba1
@ -3832,4 +3832,21 @@ test.m1 repair error Corrupt
|
||||
# Clean-up.
|
||||
drop tables m1, t1, t4;
|
||||
drop view t3;
|
||||
#
|
||||
# MDEV-10424 - Assertion `ticket == __null' failed in
|
||||
# MDL_request::set_type
|
||||
#
|
||||
CREATE TABLE t1 (f1 INT) ENGINE=MyISAM;
|
||||
CREATE TABLE tmerge (f1 INT) ENGINE=MERGE UNION=(t1);
|
||||
PREPARE stmt FROM "ANALYZE TABLE tmerge, t1";
|
||||
EXECUTE stmt;
|
||||
Table Op Msg_type Msg_text
|
||||
test.tmerge analyze note The storage engine for the table doesn't support analyze
|
||||
test.t1 analyze status Table is already up to date
|
||||
EXECUTE stmt;
|
||||
Table Op Msg_type Msg_text
|
||||
test.tmerge analyze note The storage engine for the table doesn't support analyze
|
||||
test.t1 analyze status Table is already up to date
|
||||
DEALLOCATE PREPARE stmt;
|
||||
DROP TABLE t1, tmerge;
|
||||
End of 5.5 tests
|
||||
|
@ -2880,6 +2880,19 @@ drop tables m1, t1, t4;
|
||||
drop view t3;
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-10424 - Assertion `ticket == __null' failed in
|
||||
--echo # MDL_request::set_type
|
||||
--echo #
|
||||
CREATE TABLE t1 (f1 INT) ENGINE=MyISAM;
|
||||
CREATE TABLE tmerge (f1 INT) ENGINE=MERGE UNION=(t1);
|
||||
PREPARE stmt FROM "ANALYZE TABLE tmerge, t1";
|
||||
EXECUTE stmt;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
DROP TABLE t1, tmerge;
|
||||
|
||||
|
||||
--echo End of 5.5 tests
|
||||
|
||||
--disable_result_log
|
||||
|
@ -441,7 +441,19 @@ static bool mysql_admin_table(THD* thd, TABLE_LIST* tables,
|
||||
}
|
||||
thd->prepare_derived_at_open= FALSE;
|
||||
|
||||
table->next_global= save_next_global;
|
||||
/*
|
||||
MERGE engine may adjust table->next_global chain, thus we have to
|
||||
append save_next_global after merge children.
|
||||
*/
|
||||
if (save_next_global)
|
||||
{
|
||||
TABLE_LIST *table_list_iterator= table;
|
||||
while (table_list_iterator->next_global)
|
||||
table_list_iterator= table_list_iterator->next_global;
|
||||
table_list_iterator->next_global= save_next_global;
|
||||
save_next_global->prev_global= &table_list_iterator->next_global;
|
||||
}
|
||||
|
||||
table->next_local= save_next_local;
|
||||
thd->open_options&= ~extra_open_options;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user