MDEV-22708 Assertion `!mysql_bin_log.is_open() || thd.is_current_stmt_binlog_format_row()' failed in Delayed_insert::handle_inserts and in Diagnostics_area::set_eof_status

Variable wsrep_forced_binlog_format has higher priority than
binlog_format. In situation where STATEMENT is used and DELAYED INSERT
is executing we should fall back to non-delay INSERT.

Reviewed-by: Jan Lindström <jan.lindstrom@mariadb.com>
This commit is contained in:
mkaruza 2021-09-22 14:30:03 +02:00 committed by Jan Lindström
parent 2f5ae0da71
commit 86a2e2ba90
4 changed files with 30 additions and 1 deletions

View file

@ -0,0 +1,11 @@
connection node_2;
connection node_1;
SET @wsrep_forced_binlog_format_saved = @@GLOBAL.wsrep_forced_binlog_format;
SET @@GLOBAL.wsrep_forced_binlog_format = STATEMENT;
CREATE TABLE t1(c INT PRIMARY KEY) ENGINE = MyISAM;
INSERT DELAYED INTO t1 VALUES (1),(2),(3);
SELECT SLEEP(1);
SLEEP(1)
0
DROP TABLE t1;
SET @@GLOBAL.wsrep_forced_binlog_format = @wsrep_forced_binlog_format_saved;

View file

@ -0,0 +1,4 @@
!include ../galera_2nodes.cnf
[mysqld]
log-bin

View file

@ -0,0 +1,14 @@
--source include/galera_cluster.inc
--source include/have_innodb.inc
SET @wsrep_forced_binlog_format_saved = @@GLOBAL.wsrep_forced_binlog_format;
SET @@GLOBAL.wsrep_forced_binlog_format = STATEMENT;
CREATE TABLE t1(c INT PRIMARY KEY) ENGINE = MyISAM;
INSERT DELAYED INTO t1 VALUES (1),(2),(3);
SELECT SLEEP(1);
DROP TABLE t1;
SET @@GLOBAL.wsrep_forced_binlog_format = @wsrep_forced_binlog_format_saved;

View file

@ -474,7 +474,7 @@ void upgrade_lock_type(THD *thd, thr_lock_type *lock_type,
} }
bool log_on= (thd->variables.option_bits & OPTION_BIN_LOG); bool log_on= (thd->variables.option_bits & OPTION_BIN_LOG);
if (global_system_variables.binlog_format == BINLOG_FORMAT_STMT && if (thd->wsrep_binlog_format() == BINLOG_FORMAT_STMT &&
log_on && mysql_bin_log.is_open()) log_on && mysql_bin_log.is_open())
{ {
/* /*