1
0
mirror of https://github.com/MariaDB/server.git synced 2025-07-29 05:21:33 +03:00

MDEV-31660 : Assertion `client_state.transaction().active() in wsrep_append_key

At the moment we cannot support
wsrep_forced_binlog_format=[MIXED|STATEMENT]
during CREATE TABLE AS SELECT.
Statement will use ROW instead and give
a warning.

Signed-off-by: Julius Goryavsky <julius.goryavsky@mariadb.com>
This commit is contained in:
Jan Lindström
2023-08-04 07:59:37 +03:00
committed by Julius Goryavsky
parent 04b7b3a0ca
commit f57deb314f
13 changed files with 476 additions and 39 deletions

View File

@ -4255,7 +4255,7 @@ public:
tests fail and so force them to propagate the
lex->binlog_row_based_if_mixed upwards to the caller.
*/
if ((wsrep_binlog_format() == BINLOG_FORMAT_MIXED) && (in_sub_stmt == 0))
if ((wsrep_binlog_format(variables.binlog_format) == BINLOG_FORMAT_MIXED) && (in_sub_stmt == 0))
set_current_stmt_binlog_format_row();
DBUG_VOID_RETURN;
@ -4311,7 +4311,7 @@ public:
show_system_thread(system_thread)));
if (in_sub_stmt == 0)
{
if (wsrep_binlog_format() == BINLOG_FORMAT_ROW)
if (wsrep_binlog_format(variables.binlog_format) == BINLOG_FORMAT_ROW)
set_current_stmt_binlog_format_row();
else if (!has_temporary_tables())
set_current_stmt_binlog_format_stmt();
@ -4958,9 +4958,18 @@ public:
*/
bool is_awaiting_semisync_ack;
inline ulong wsrep_binlog_format() const
inline ulong wsrep_binlog_format(ulong binlog_format) const
{
return WSREP_BINLOG_FORMAT(variables.binlog_format);
#ifdef WITH_WSREP
// During CTAS we force ROW format
if (wsrep_ctas)
return BINLOG_FORMAT_ROW;
else
return ((wsrep_forced_binlog_format != BINLOG_FORMAT_UNSPEC) ?
wsrep_forced_binlog_format : binlog_format);
#else
return (binlog_format);
#endif
}
#ifdef WITH_WSREP
@ -5003,11 +5012,9 @@ public:
void *wsrep_apply_format;
uchar* wsrep_rbr_buf;
wsrep_gtid_t wsrep_sync_wait_gtid;
// wsrep_gtid_t wsrep_last_written_gtid;
ulong wsrep_affected_rows;
bool wsrep_has_ignored_error;
bool wsrep_replicate_GTID;
/*
When enabled, do not replicate/binlog updates from the current table that's
being processed. At the moment, it is used to keep mysql.gtid_slave_pos
@ -5027,7 +5034,8 @@ public:
/* true if BF abort is observed in do_command() right after reading
client's packet, and if the client has sent PS execute command. */
bool wsrep_delayed_BF_abort;
// true if this transaction is CREATE TABLE AS SELECT (CTAS)
bool wsrep_ctas;
/*
Transaction id:
* m_wsrep_next_trx_id is assigned on the first query after