mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
MDEV-31804 Assertion `thd->m_transaction_psi == __null' fails
... upon replicating online ALTER When an online event is applied and slave_exec_mode is idempotent, Write_rows_log_event::do_before_row_operations had reset thd->lex->sql_command to SQLCOM_REPLACE. This led to that a statement was detected as a row-type during binlogging, and was logged as not standalone. So the corresponding Gtid_log_event, when applied on replica, did not exit early and created a new PSI transaction. Hence the difference with non-online ALTER.
This commit is contained in:
committed by
Sergei Golubchik
parent
c373e6c3d6
commit
a1af525588
@ -12116,6 +12116,7 @@ copy_data_between_tables(THD *thd, TABLE *from, TABLE *to,
|
||||
MEM_UNDEFINED(from->record[0], from->s->rec_buff_length * 2);
|
||||
MEM_UNDEFINED(to->record[0], to->s->rec_buff_length * 2);
|
||||
thd_progress_next_stage(thd);
|
||||
enum_sql_command saved_sql_command= thd->lex->sql_command;
|
||||
Table_map_log_event table_event(thd, from, from->s->table_map_id,
|
||||
from->file->has_transactions());
|
||||
Relay_log_info rli(false);
|
||||
@ -12171,6 +12172,8 @@ copy_data_between_tables(THD *thd, TABLE *from, TABLE *to,
|
||||
if (error)
|
||||
from->s->tdc->flush_unused(1); // to free the binlog
|
||||
to->pos_in_table_list= NULL; // Safety
|
||||
DBUG_ASSERT(thd->lex->sql_command == saved_sql_command);
|
||||
thd->lex->sql_command= saved_sql_command; // Just in case
|
||||
}
|
||||
else if (online) // error was on copy stage
|
||||
{
|
||||
|
Reference in New Issue
Block a user