Commit c0fb7b45 authored by Oleksandr Byelkin's avatar Oleksandr Byelkin

MDEV-10555: Server crashes in mysql_admin_table upon killing ANALYZE

Take into acount result of open table operation in mysql_admin_table.
parent eded6243
SET @save_use_stat_tables= @@use_stat_tables;
SET use_stat_tables= PREFERABLY;
CREATE TABLE t1 (a int);
insert into t1 values (1),(2),(3);
SET STATEMENT debug_dbug="d,fail_2call_open_only_one_table" for
ANALYZE TABLE t1;
Table Op Msg_type Msg_text
test.t1 analyze status Operation failed
drop table t1;
SET use_stat_tables= @save_use_stat_tables;
--source include/have_debug.inc
SET @save_use_stat_tables= @@use_stat_tables;
SET use_stat_tables= PREFERABLY;
CREATE TABLE t1 (a int);
insert into t1 values (1),(2),(3);
SET STATEMENT debug_dbug="d,fail_2call_open_only_one_table" for
ANALYZE TABLE t1;
drop table t1;
SET use_stat_tables= @save_use_stat_tables;
...@@ -295,6 +295,10 @@ static inline bool table_not_corrupt_error(uint sql_errno) ...@@ -295,6 +295,10 @@ static inline bool table_not_corrupt_error(uint sql_errno)
sql_errno == ER_WRONG_OBJECT); sql_errno == ER_WRONG_OBJECT);
} }
#ifndef DBUG_OFF
// It is counter for debugging fail on second call of open_only_one_table
static int debug_fail_counter= 0;
#endif
static bool open_only_one_table(THD* thd, TABLE_LIST* table, static bool open_only_one_table(THD* thd, TABLE_LIST* table,
bool repair_table_use_frm, bool repair_table_use_frm,
...@@ -319,6 +323,16 @@ static bool open_only_one_table(THD* thd, TABLE_LIST* table, ...@@ -319,6 +323,16 @@ static bool open_only_one_table(THD* thd, TABLE_LIST* table,
lex->query_tables_last= &table->next_global; lex->query_tables_last= &table->next_global;
lex->query_tables_own_last= 0; lex->query_tables_own_last= 0;
DBUG_EXECUTE_IF("fail_2call_open_only_one_table", {
if (debug_fail_counter)
{
open_error= TRUE;
goto dbug_err;
}
else
debug_fail_counter++;
});
/* /*
CHECK TABLE command is allowed for views as well. Check on alter flags CHECK TABLE command is allowed for views as well. Check on alter flags
to differentiate from ALTER TABLE...CHECK PARTITION on which view is not to differentiate from ALTER TABLE...CHECK PARTITION on which view is not
...@@ -378,6 +392,9 @@ static bool open_only_one_table(THD* thd, TABLE_LIST* table, ...@@ -378,6 +392,9 @@ static bool open_only_one_table(THD* thd, TABLE_LIST* table,
open_error= (thd->open_temporary_tables(table) || open_error= (thd->open_temporary_tables(table) ||
open_and_lock_tables(thd, table, TRUE, 0)); open_and_lock_tables(thd, table, TRUE, 0));
} }
dbug_err:
thd->prepare_derived_at_open= FALSE; thd->prepare_derived_at_open= FALSE;
/* /*
...@@ -807,6 +824,8 @@ static bool mysql_admin_table(THD* thd, TABLE_LIST* tables, ...@@ -807,6 +824,8 @@ static bool mysql_admin_table(THD* thd, TABLE_LIST* tables,
repair_table_use_frm, FALSE); repair_table_use_frm, FALSE);
thd->open_options&= ~extra_open_options; thd->open_options&= ~extra_open_options;
if (!open_error)
{
TABLE *tab= table->table; TABLE *tab= table->table;
Field **field_ptr= tab->field; Field **field_ptr= tab->field;
if (!lex->column_list) if (!lex->column_list)
...@@ -854,12 +873,15 @@ static bool mysql_admin_table(THD* thd, TABLE_LIST* tables, ...@@ -854,12 +873,15 @@ static bool mysql_admin_table(THD* thd, TABLE_LIST* tables,
} }
tab->file->column_bitmaps_signal(); tab->file->column_bitmaps_signal();
} }
if (!open_error && if (!(compl_result_code=
!(compl_result_code=
alloc_statistics_for_table(thd, table->table)) && alloc_statistics_for_table(thd, table->table)) &&
!(compl_result_code= !(compl_result_code=
collect_statistics_for_table(thd, table->table))) collect_statistics_for_table(thd, table->table)))
compl_result_code= update_statistics_for_table(thd, table->table); compl_result_code= update_statistics_for_table(thd, table->table);
}
else
compl_result_code= HA_ADMIN_FAILED;
if (compl_result_code) if (compl_result_code)
result_code= HA_ADMIN_FAILED; result_code= HA_ADMIN_FAILED;
else else
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment