Commit 1e2a4ed7 authored by Teemu Ollakka's avatar Teemu Ollakka Committed by Jan Lindström

MDEV-21718 Assertion in wsrep::client_state::before_command().

An assertion

  `server_state_.rollback_mode() == wsrep::server_state::rm_async`

fired in before_command() when
- thread-handling was set to pool-of-threads and
- a BF abort happened between client session calls to
  wait_rollback_complete_and_acquire_ownership() and before_command().

This commit introduces a test case to reproduce the crash and
updates wsrep-lib submodule to fixed version.
parent 134a6a8d
connection node_2;
connection node_1;
CREATE TABLE t1 (f1 INT PRIMARY KEY) ENGINE=InnoDB;
connection node_1;
START TRANSACTION;
INSERT INTO t1 VALUES (1);
SET DEBUG_SYNC = "wsrep_before_before_command SIGNAL reached WAIT_FOR continue";
COMMIT;
connection node_1_ctrl;
SET DEBUG_SYNC = "now WAIT_FOR reached";
connection node_2;
INSERT INTO t1 VALUES (1);
connection node_1;
ERROR 40001: Deadlock found when trying to get lock; try restarting transaction
DROP TABLE t1;
SET DEBUG_SYNC = "RESET";
!include ../galera_2nodes.cnf
[mysqld]
thread-handling=pool-of-threads
#
# MDEV-21718 Reproduce a case where BF abort after
# client session acquires the ownership but before calls
# before_command() causes an assertion in wsrep-lib.
#
--source include/galera_cluster.inc
--source include/have_innodb.inc
CREATE TABLE t1 (f1 INT PRIMARY KEY) ENGINE=InnoDB;
--let $galera_connection_name = node_1_ctrl
--let $galera_server_number = 1
--source include/galera_connect.inc
--connection node_1
START TRANSACTION;
INSERT INTO t1 VALUES (1);
SET DEBUG_SYNC = "wsrep_before_before_command SIGNAL reached WAIT_FOR continue";
--send COMMIT
--connection node_1_ctrl
SET DEBUG_SYNC = "now WAIT_FOR reached";
--connection node_2
INSERT INTO t1 VALUES (1);
# BF abort wakes up node_1 from sync wait.
--connection node_1
--error ER_LOCK_DEADLOCK
--reap
DROP TABLE t1;
SET DEBUG_SYNC = "RESET";
......@@ -1280,6 +1280,7 @@ bool do_command(THD *thd)
command= fetch_command(thd, packet);
#ifdef WITH_WSREP
DEBUG_SYNC(thd, "wsrep_before_before_command");
/*
Aborted by background rollbacker thread.
Handle error here and jump straight to out
......
Subproject commit 8ba574f7bf19bdc0de18e2225068c5a3f2dcdea4
Subproject commit 3e5a28df32c85c7768dd84d1731ad4661bf90022
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