Details
-
Bug
-
Status: Stalled (View Workflow)
-
Critical
-
Resolution: Unresolved
-
10.6
-
None
Description
Every applier thread in Galera should run with READ_COMMITTED transaction isolation level to prevent applying issues caused by InnoDB gap locks.
However, an applier thread performing IST process is left with REPEATABLE_READ isolation level. To reproduce, it's enough to run galera.galera_binlog_stmt_autoinc with the node 2 having wsrep-slave-threads=2 in the corresponding .cnf file.
The test fails, and the error message in the log is:
[ERROR] Slave SQL: Error 'Cannot execute statement: impossible to write to binary log since BINLOG_FORMAT = STATEMENT and at least one table uses a storage engine limited to row-based logging. InnoDB is limited to row-logging when transaction isolation level is READ COMMITTED or READ UNCOMMITTED.' on query. Default database: 'test'. Query: 'insert into t1(i) values(null)', Internal MariaDB error code: 1665
|
which means that the test passes only because there's a single applier thread, and after performing IST, it has REPEATABLE_READ isolation level, which allows it to execute events in binlog statement replication format.