Commit 0a1d31c8 authored by Jan Lindström's avatar Jan Lindström

Merge branch 'codership-10.4-MDEV-20793' into 10.4

parents 59d4f2a3 ad0eed87
connection node_2;
connection node_1;
CREATE TABLE t1 (f1 INT PRIMARY KEY, f2 INT);
INSERT INTO t1 VALUES (1, 0), (5, 0);
connection node_1_ctrl;
SET SESSION wsrep_sync_wait = 0;
SET GLOBAL wsrep_slave_threads = 2;
connection node_1;
SET SESSION wsrep_retry_autocommit = 0;
START TRANSACTION;
UPDATE t1 SET f2 = 1;
SET SESSION debug_sync = "wsrep_before_replay SIGNAL reached WAIT_FOR continue";
connection node_1_ctrl;
SET GLOBAL wsrep_provider_options = 'dbug=d,apply_monitor_slave_enter_sync';
connection node_2;
INSERT INTO t1 VALUES (2, 2);
connection node_1_ctrl;
SET SESSION wsrep_on = 0;
SET SESSION wsrep_on = 1;
SET GLOBAL wsrep_provider_options = 'dbug=';
SET GLOBAL wsrep_provider_options = 'dbug=d,local_monitor_slave_enter_sync';
connection node_2;
UPDATE t1 SET f2 = 2 WHERE f1 = 5;
connection node_1_ctrl;
SET SESSION wsrep_on = 0;
SET SESSION wsrep_on = 1;
connection node_1;
COMMIT;
connection node_1_ctrl;
SET GLOBAL wsrep_provider_options = 'signal=apply_monitor_slave_enter_sync';
SET SESSION debug_sync = "now WAIT_FOR reached";
SET GLOBAL wsrep_provider_options = 'signal=local_monitor_slave_enter_sync';
SET GLOBAL wsrep_provider_options = 'dbug=';
SET SESSION debug_sync = "now SIGNAL continue";
connection node_1;
ERROR 40001: Deadlock found when trying to get lock; try restarting transaction
SET debug_sync = "RESET";
DROP TABLE t1;
SET GLOBAL wsrep_slave_threads = 1;
#
# MDEV-20793 Assertion after certification failure during replay.
#
# The test outline:
# In order to produce certification failure three transactions
# are needed. One transaction is executing on node_1 and two others
# on node_2. The first transaction from node_2 BF aborts the transaction
# on node_1, but does not cause certification conflict. The second
# transaction from node_2 will cause conflict and the transaction on
# node_1 fails in certification during replay.
#
--source include/galera_cluster.inc
CREATE TABLE t1 (f1 INT PRIMARY KEY, f2 INT);
INSERT INTO t1 VALUES (1, 0), (5, 0);
--let galera_connection_name = node_1_ctrl
--let galera_server_number = 1
--source include/galera_connect.inc
--connection node_1_ctrl
SET SESSION wsrep_sync_wait = 0;
SET GLOBAL wsrep_slave_threads = 2;
--connection node_1
# Start transaction which takes gap lock 1 - 5
SET SESSION wsrep_retry_autocommit = 0;
START TRANSACTION;
UPDATE t1 SET f2 = 1;
SET SESSION debug_sync = "wsrep_before_replay SIGNAL reached WAIT_FOR continue";
--connection node_1_ctrl
--let $galera_sync_point = apply_monitor_slave_enter_sync
--source include/galera_set_sync_point.inc
--connection node_2
# Insert into gap from other node. This generates BF abort but does not
# conflict with update.
INSERT INTO t1 VALUES (2, 2);
--connection node_1_ctrl
--source include/galera_wait_sync_point.inc
--source include/galera_clear_sync_point.inc
--let $galera_sync_point = local_monitor_slave_enter_sync
--source include/galera_set_sync_point.inc
# Make an update which will conflict with update on node_1
--connection node_2
UPDATE t1 SET f2 = 2 WHERE f1 = 5;
--connection node_1_ctrl
--let $galera_sync_point = apply_monitor_slave_enter_sync local_monitor_slave_enter_sync
--source include/galera_wait_sync_point.inc
--connection node_1
--send COMMIT
--connection node_1_ctrl
--let $galera_sync_point = apply_monitor_slave_enter_sync
--source include/galera_signal_sync_point.inc
SET SESSION debug_sync = "now WAIT_FOR reached";
--let $galera_sync_point = local_monitor_slave_enter_sync
--source include/galera_signal_sync_point.inc
--source include/galera_clear_sync_point.inc
SET SESSION debug_sync = "now SIGNAL continue";
--connection node_1
--error ER_LOCK_DEADLOCK
--reap
SET debug_sync = "RESET";
DROP TABLE t1;
SET GLOBAL wsrep_slave_threads = 1;
......@@ -598,9 +598,7 @@ Wsrep_replayer_service::~Wsrep_replayer_service()
THD* replayer_thd= m_thd;
THD* orig_thd= m_orig_thd;
/* Store replay result/state to original thread wsrep client
state and switch execution context back to original. */
orig_thd->wsrep_cs().after_replay(replayer_thd->wsrep_trx());
/* Switch execution context back to original. */
wsrep_after_apply(replayer_thd);
wsrep_after_command_ignore_result(replayer_thd);
wsrep_close(replayer_thd);
......
Subproject commit 90157ed1b0f8b3f0d1eb3d60ac93ce6d8da7ad77
Subproject commit 76f7249b8df209a2a3cefd7d4bbf31f6c72812f1
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