summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Lindström <jan.lindstrom@mariadb.com>2023-01-15 12:01:50 +0200
committerJan Lindström <jan.lindstrom@mariadb.com>2023-01-15 12:01:50 +0200
commit0459a2f27c70b249aaa22c0d1c65ef002b2841ff (patch)
treee4c0772b53b84b08ec9cdcf795b916ce47b9de17
parent179c2833721292a918280b7d114d94d81020105b (diff)
downloadmariadb-git-bb-10.4-jan.tar.gz
Revert "Merge branch 10.4 into 10.5"bb-10.4-jan
This reverts commit 179c2833721292a918280b7d114d94d81020105b, reversing changes made to 981a6b704475176d032c13461baffcaf88802d34.
-rw-r--r--mysql-test/suite/galera/r/galera_MDEV-29512.result40
-rw-r--r--mysql-test/suite/galera/r/galera_savepoint_replay.result53
-rw-r--r--mysql-test/suite/galera/t/galera_MDEV-29512.cnf15
-rw-r--r--mysql-test/suite/galera/t/galera_MDEV-29512.test91
-rw-r--r--mysql-test/suite/galera/t/galera_savepoint_replay.test86
-rw-r--r--sql/service_wsrep.cc17
-rw-r--r--sql/sql_class.cc3
-rw-r--r--sql/wsrep_high_priority_service.cc35
-rw-r--r--sql/wsrep_thd.cc21
-rw-r--r--sql/wsrep_thd.h6
-rw-r--r--storage/innobase/handler/ha_innodb.cc10
-rw-r--r--storage/innobase/lock/lock0lock.cc53
12 files changed, 50 insertions, 380 deletions
diff --git a/mysql-test/suite/galera/r/galera_MDEV-29512.result b/mysql-test/suite/galera/r/galera_MDEV-29512.result
deleted file mode 100644
index aaf24df920e..00000000000
--- a/mysql-test/suite/galera/r/galera_MDEV-29512.result
+++ /dev/null
@@ -1,40 +0,0 @@
-connection node_2;
-connection node_1;
-CREATE TABLE t1 (f1 INTEGER PRIMARY KEY, f2 int, f3 varchar(2000));
-INSERT INTO t1 VALUES (1, 0, REPEAT('1234567890', 200));
-INSERT INTO t1 VALUES (3, 3, REPEAT('1234567890', 200));
-SET SESSION wsrep_sync_wait=0;
-SET GLOBAL DEBUG_DBUG = "d,sync.wsrep_apply_cb";
-connect node_1a, 127.0.0.1, root, , test, $NODE_MYPORT_1;
-connection node_1a;
-SET SESSION wsrep_sync_wait=0;
-connection node_1;
-begin;
-select f1,f2 from t1;
-f1 f2
-1 0
-3 3
-connection node_2;
-UPDATE t1 SET f2=2 WHERE f1=3;
-connection node_1a;
-SET SESSION DEBUG_SYNC = "now WAIT_FOR sync.wsrep_apply_cb_reached";
-connection node_1;
-UPDATE t1 SET f2=1 WHERE f1=3;
-SET GLOBAL wsrep_provider_options = 'dbug=d,commit_monitor_master_enter_sync';
-COMMIT;
-connection node_1a;
-SET SESSION wsrep_on = 0;
-SET SESSION wsrep_on = 1;
-SET GLOBAL wsrep_provider_options = 'dbug=';
-SET GLOBAL wsrep_provider_options = 'signal=commit_monitor_master_enter_sync';
-SET GLOBAL DEBUG_DBUG = "";
-SET DEBUG_SYNC = "now SIGNAL signal.wsrep_apply_cb";
-SET GLOBAL debug_dbug = NULL;
-SET debug_sync='RESET';
-connection node_1;
-ERROR 40001: Deadlock found when trying to get lock; try restarting transaction
-select f1,f2 from t1;
-f1 f2
-1 0
-3 2
-DROP TABLE t1;
diff --git a/mysql-test/suite/galera/r/galera_savepoint_replay.result b/mysql-test/suite/galera/r/galera_savepoint_replay.result
deleted file mode 100644
index afea5f82e3c..00000000000
--- a/mysql-test/suite/galera/r/galera_savepoint_replay.result
+++ /dev/null
@@ -1,53 +0,0 @@
-connection node_2;
-connection node_1;
-CREATE TABLE t1 (f1 INTEGER PRIMARY KEY, f2 CHAR(1));
-INSERT INTO t1 VALUES (1, 'a');
-INSERT INTO t1 VALUES (2, 'a');
-connection node_1;
-SET AUTOCOMMIT=ON;
-START TRANSACTION;
-UPDATE t1 SET f2 = 'b' WHERE f1 = 1;
-SELECT * FROM t1 WHERE f1 = 2 FOR UPDATE;
-f1 f2
-2 a
-SAVEPOINT my_sp;
-connect node_1a, 127.0.0.1, root, , test, $NODE_MYPORT_1;
-SET SESSION wsrep_sync_wait=0;
-SET GLOBAL wsrep_provider_options = 'dbug=d,apply_monitor_slave_enter_sync';
-connection node_2;
-UPDATE t1 SET f2 = 'c' WHERE f1 = 2;
-connection node_1a;
-SET SESSION wsrep_on = 0;
-SET SESSION wsrep_on = 1;
-SET GLOBAL wsrep_provider_options = 'dbug=';
-SET GLOBAL wsrep_provider_options = 'dbug=d,commit_monitor_master_enter_sync';
-connection node_1;
-COMMIT;
-connection node_1a;
-SET SESSION wsrep_on = 0;
-SET SESSION wsrep_on = 1;
-SET GLOBAL wsrep_provider_options = 'dbug=';
-SET GLOBAL wsrep_provider_options = 'dbug=d,abort_trx_end';
-SET GLOBAL wsrep_provider_options = 'signal=apply_monitor_slave_enter_sync';
-SET SESSION wsrep_on = 0;
-SET SESSION wsrep_on = 1;
-SET GLOBAL wsrep_provider_options = 'dbug=';
-SET GLOBAL wsrep_provider_options = 'signal=abort_trx_end';
-SET GLOBAL wsrep_provider_options = 'signal=commit_monitor_master_enter_sync';
-connection node_1;
-SELECT COUNT(*) = 1 FROM t1 WHERE f2 = 'b';
-COUNT(*) = 1
-1
-SELECT COUNT(*) = 1 FROM t1 WHERE f2 = 'c';
-COUNT(*) = 1
-1
-wsrep_local_replays
-1
-connection node_2;
-SELECT COUNT(*) = 1 FROM t1 WHERE f2 = 'b';
-COUNT(*) = 1
-1
-SELECT COUNT(*) = 1 FROM t1 WHERE f2 = 'c';
-COUNT(*) = 1
-1
-DROP TABLE t1;
diff --git a/mysql-test/suite/galera/t/galera_MDEV-29512.cnf b/mysql-test/suite/galera/t/galera_MDEV-29512.cnf
deleted file mode 100644
index bf8e0c37984..00000000000
--- a/mysql-test/suite/galera/t/galera_MDEV-29512.cnf
+++ /dev/null
@@ -1,15 +0,0 @@
-!include ../galera_2nodes.cnf
-
-[mysqld]
-log-bin
-log-slave-updates
-
-[mysqld.1]
-log_bin
-log_slave_updates
-max-binlog-size=4096
-expire-logs-days=1
-
-
-[mysqld.2]
-
diff --git a/mysql-test/suite/galera/t/galera_MDEV-29512.test b/mysql-test/suite/galera/t/galera_MDEV-29512.test
deleted file mode 100644
index ffcef792f85..00000000000
--- a/mysql-test/suite/galera/t/galera_MDEV-29512.test
+++ /dev/null
@@ -1,91 +0,0 @@
-#
-# This test is for reproducing the issue in:
-# https://jira.mariadb.org/browse/MDEV-29512
-#
-# The hanging in MDEV-29512 happens when binlog purging is attempted, and there is
-# one local BF aborted transaction waiting for commit monitor.
-#
-# The test will launch two node cluster and enable binlogging with expire log days,
-# to force binlog purging to happen.
-# A local transaction is executed so that will become BF abort victim, and has advanced
-# to replication stage waiting for commit monitor for final cleanup (to mark position in innodb)
-# after that, applier is released to complete the BF abort and due to binlog configuration,
-# starting the binlog purging. This is where the hanging would occur, if code is buggy
-#
---source include/galera_cluster.inc
---source include/have_innodb.inc
---source include/have_debug_sync.inc
---source include/galera_have_debug_sync.inc
-
-#
-# binlog size is limited to 4096 bytes, we will create enough events to
-# cause binlog rotation
-#
-CREATE TABLE t1 (f1 INTEGER PRIMARY KEY, f2 int, f3 varchar(2000));
-INSERT INTO t1 VALUES (1, 0, REPEAT('1234567890', 200));
-INSERT INTO t1 VALUES (3, 3, REPEAT('1234567890', 200));
-
-SET SESSION wsrep_sync_wait=0;
-
-# set sync point for replication applier
-SET GLOBAL DEBUG_DBUG = "d,sync.wsrep_apply_cb";
-
-# Control connection to manage sync points for appliers
---connect node_1a, 127.0.0.1, root, , test, $NODE_MYPORT_1
---connection node_1a
-SET SESSION wsrep_sync_wait=0;
-
-# starting local transaction, only select so far,
-# write will happen later and this will be ordered after the transaction in node_2
---connection node_1
-begin;
-select f1,f2 from t1;
-
-# send from node 2 an UPDATE transaction, which will BF abort the transaction in node_1
---connection node_2
---let $wait_condition=select count(*)=2 from t1
---source include/wait_condition.inc
-
-UPDATE t1 SET f2=2 WHERE f1=3;
-
---connection node_1a
-# wait to see the UPDATE from node_2 in apply_cb sync point
-SET SESSION DEBUG_SYNC = "now WAIT_FOR sync.wsrep_apply_cb_reached";
-
---connection node_1
-# now issuing conflicting update
-UPDATE t1 SET f2=1 WHERE f1=3;
-
-# Block the local commit, send final COMMIT and wait until it gets blocked
---let $galera_sync_point = commit_monitor_master_enter_sync
---source include/galera_set_sync_point.inc
---send COMMIT
-
---connection node_1a
-# wait for the local commit to enter in commit monitor wait state
---let $galera_sync_point = commit_monitor_master_enter_sync
---source include/galera_wait_sync_point.inc
---source include/galera_clear_sync_point.inc
-
-# release the local transaction to continue with commit
---let $galera_sync_point = commit_monitor_master_enter_sync
---source include/galera_signal_sync_point.inc
-
-# and now release the applier, it should force local trx to abort
-SET GLOBAL DEBUG_DBUG = "";
-SET DEBUG_SYNC = "now SIGNAL signal.wsrep_apply_cb";
-SET GLOBAL debug_dbug = NULL;
-SET debug_sync='RESET';
-
---connection node_1
---error ER_LOCK_DEADLOCK
---reap
-
-# wait until applying is complete
---let $wait_condition = SELECT COUNT(*)=1 FROM t1 WHERE f2=2
---source include/wait_condition.inc
-
-# final read to verify what we got
-select f1,f2 from t1;
-
-DROP TABLE t1;
diff --git a/mysql-test/suite/galera/t/galera_savepoint_replay.test b/mysql-test/suite/galera/t/galera_savepoint_replay.test
deleted file mode 100644
index cff26f4a94f..00000000000
--- a/mysql-test/suite/galera/t/galera_savepoint_replay.test
+++ /dev/null
@@ -1,86 +0,0 @@
-#
-# This test tests replaying a transaction with savepoint
-#
-
---source include/galera_cluster.inc
---source include/have_innodb.inc
---source include/have_debug_sync.inc
---source include/galera_have_debug_sync.inc
-
---let $wsrep_local_replays_old = `SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_replays'`
-
-CREATE TABLE t1 (f1 INTEGER PRIMARY KEY, f2 CHAR(1));
-INSERT INTO t1 VALUES (1, 'a');
-INSERT INTO t1 VALUES (2, 'a');
-
---connection node_1
-SET AUTOCOMMIT=ON;
-START TRANSACTION;
-
-UPDATE t1 SET f2 = 'b' WHERE f1 = 1;
-SELECT * FROM t1 WHERE f1 = 2 FOR UPDATE;
-SAVEPOINT my_sp;
-
-# Block the applier on node #1 and issue a conflicting update on node #2
---connect node_1a, 127.0.0.1, root, , test, $NODE_MYPORT_1
-SET SESSION wsrep_sync_wait=0;
---let $galera_sync_point = apply_monitor_slave_enter_sync
---source include/galera_set_sync_point.inc
-
---connection node_2
-UPDATE t1 SET f2 = 'c' WHERE f1 = 2;
-
---connection node_1a
---source include/galera_wait_sync_point.inc
---source include/galera_clear_sync_point.inc
-
-# Block the commit, send the COMMIT and wait until it gets blocked
-
---let $galera_sync_point = commit_monitor_master_enter_sync
---source include/galera_set_sync_point.inc
-
---connection node_1
---send COMMIT
-
---connection node_1a
-
---let $galera_sync_point = apply_monitor_slave_enter_sync commit_monitor_master_enter_sync
---source include/galera_wait_sync_point.inc
---source include/galera_clear_sync_point.inc
-
-# Let the conflicting UPDATE proceed and wait until it hits abort_trx_end.
-# The victim transaction still sits in commit_monitor_master_sync_point.
-
---let $galera_sync_point = abort_trx_end
---source include/galera_set_sync_point.inc
---let $galera_sync_point = apply_monitor_slave_enter_sync
---source include/galera_signal_sync_point.inc
---let $galera_sync_point = abort_trx_end commit_monitor_master_enter_sync
---source include/galera_wait_sync_point.inc
-
-# Let the transactions proceed
---source include/galera_clear_sync_point.inc
---let $galera_sync_point = abort_trx_end
---source include/galera_signal_sync_point.inc
---let $galera_sync_point = commit_monitor_master_enter_sync
---source include/galera_signal_sync_point.inc
-
-# Commit succeeds
---connection node_1
---reap
-
-SELECT COUNT(*) = 1 FROM t1 WHERE f2 = 'b';
-SELECT COUNT(*) = 1 FROM t1 WHERE f2 = 'c';
-
-# wsrep_local_replays has increased by 1
---let $wsrep_local_replays_new = `SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_replays'`
---disable_query_log
---eval SELECT $wsrep_local_replays_new - $wsrep_local_replays_old = 1 AS wsrep_local_replays;
---enable_query_log
-
---connection node_2
-SELECT COUNT(*) = 1 FROM t1 WHERE f2 = 'b';
-SELECT COUNT(*) = 1 FROM t1 WHERE f2 = 'c';
-
-DROP TABLE t1;
-
diff --git a/sql/service_wsrep.cc b/sql/service_wsrep.cc
index e5c51287ab8..1731eeec667 100644
--- a/sql/service_wsrep.cc
+++ b/sql/service_wsrep.cc
@@ -1,4 +1,4 @@
-/* Copyright 2018-2023 Codership Oy <info@codership.com>
+/* Copyright 2018-2021 Codership Oy <info@codership.com>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -273,9 +273,7 @@ extern "C" my_bool wsrep_thd_skip_locking(const THD *thd)
extern "C" my_bool wsrep_thd_order_before(const THD *left, const THD *right)
{
- if (wsrep_thd_is_BF(left, false) &&
- wsrep_thd_is_BF(right, false) &&
- wsrep_thd_trx_seqno(left) < wsrep_thd_trx_seqno(right)) {
+ if (wsrep_thd_trx_seqno(left) < wsrep_thd_trx_seqno(right)) {
WSREP_DEBUG("BF conflict, order: %lld %lld\n",
(long long)wsrep_thd_trx_seqno(left),
(long long)wsrep_thd_trx_seqno(right));
@@ -387,20 +385,13 @@ extern "C" ulong wsrep_OSU_method_get(const MYSQL_THD thd)
extern "C" bool wsrep_thd_set_wsrep_aborter(THD *bf_thd, THD *victim_thd)
{
+ WSREP_DEBUG("wsrep_thd_set_wsrep_aborter called");
mysql_mutex_assert_owner(&victim_thd->LOCK_thd_data);
- if (!bf_thd)
- {
- victim_thd->wsrep_aborter= 0;
- WSREP_DEBUG("wsrep_thd_set_wsrep_aborter resetting wsrep_aborter");
- return false;
- }
if (victim_thd->wsrep_aborter && victim_thd->wsrep_aborter != bf_thd->thread_id)
{
return true;
}
- victim_thd->wsrep_aborter= bf_thd->thread_id;
- WSREP_DEBUG("wsrep_thd_set_wsrep_aborter setting wsrep_aborter %u",
- victim_thd->wsrep_aborter);
+ victim_thd->wsrep_aborter = bf_thd->thread_id;
return false;
}
diff --git a/sql/sql_class.cc b/sql/sql_class.cc
index d29f5832434..bdb582e4ebf 100644
--- a/sql/sql_class.cc
+++ b/sql/sql_class.cc
@@ -5414,7 +5414,8 @@ thd_need_ordering_with(const MYSQL_THD thd, const MYSQL_THD other_thd)
(e.g. InnoDB does it by keeping lock_sys.mutex locked)
*/
if (WSREP_ON &&
- wsrep_thd_order_before(thd, other_thd))
+ wsrep_thd_is_BF(const_cast<THD *>(thd), false) &&
+ wsrep_thd_is_BF(const_cast<THD *>(other_thd), false))
return 0;
#endif /* WITH_WSREP */
rgi= thd->rgi_slave;
diff --git a/sql/wsrep_high_priority_service.cc b/sql/wsrep_high_priority_service.cc
index 93d4738212d..708eb552866 100644
--- a/sql/wsrep_high_priority_service.cc
+++ b/sql/wsrep_high_priority_service.cc
@@ -1,4 +1,4 @@
-/* Copyright 2018-2023 Codership Oy <info@codership.com>
+/* Copyright 2018-2021 Codership Oy <info@codership.com>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -639,9 +639,6 @@ Wsrep_replayer_service::Wsrep_replayer_service(THD* replayer_thd, THD* orig_thd)
transactional locks */
DBUG_ASSERT(!orig_thd->mdl_context.has_transactional_locks());
- replayer_thd->system_thread_info.rpl_sql_info=
- new rpl_sql_thread_info(replayer_thd->wsrep_rgi->rli->mi->rpl_filter);
-
/* Make a shadow copy of diagnostics area and reset */
m_da_shadow.status= orig_thd->get_stmt_da()->status();
if (m_da_shadow.status == Diagnostics_area::DA_OK)
@@ -680,35 +677,35 @@ Wsrep_replayer_service::Wsrep_replayer_service(THD* replayer_thd, THD* orig_thd)
Wsrep_replayer_service::~Wsrep_replayer_service()
{
- /* Switch execution context back to original. */
- wsrep_after_apply(m_thd);
- wsrep_after_command_ignore_result(m_thd);
- wsrep_close(m_thd);
- wsrep_reset_threadvars(m_thd);
- wsrep_store_threadvars(m_orig_thd);
+ THD* replayer_thd= m_thd;
+ THD* orig_thd= m_orig_thd;
- DBUG_ASSERT(!m_orig_thd->get_stmt_da()->is_sent());
- DBUG_ASSERT(!m_orig_thd->get_stmt_da()->is_set());
+ /* Switch execution context back to original. */
+ wsrep_after_apply(replayer_thd);
+ wsrep_after_command_ignore_result(replayer_thd);
+ wsrep_close(replayer_thd);
+ wsrep_reset_threadvars(replayer_thd);
+ wsrep_store_threadvars(orig_thd);
- delete m_thd->system_thread_info.rpl_sql_info;
- m_thd->system_thread_info.rpl_sql_info= nullptr;
+ DBUG_ASSERT(!orig_thd->get_stmt_da()->is_sent());
+ DBUG_ASSERT(!orig_thd->get_stmt_da()->is_set());
if (m_replay_status == wsrep::provider::success)
{
- DBUG_ASSERT(m_thd->wsrep_cs().current_error() == wsrep::e_success);
- m_orig_thd->reset_kill_query();
- my_ok(m_orig_thd, m_da_shadow.affected_rows, m_da_shadow.last_insert_id);
+ DBUG_ASSERT(replayer_thd->wsrep_cs().current_error() == wsrep::e_success);
+ orig_thd->reset_kill_query();
+ my_ok(orig_thd, m_da_shadow.affected_rows, m_da_shadow.last_insert_id);
}
else if (m_replay_status == wsrep::provider::error_certification_failed)
{
- wsrep_override_error(m_orig_thd, ER_LOCK_DEADLOCK);
+ wsrep_override_error(orig_thd, ER_LOCK_DEADLOCK);
}
else
{
DBUG_ASSERT(0);
WSREP_ERROR("trx_replay failed for: %d, schema: %s, query: %s",
m_replay_status,
- m_orig_thd->db.str, wsrep_thd_query(m_orig_thd));
+ orig_thd->db.str, wsrep_thd_query(orig_thd));
unireg_abort(1);
}
}
diff --git a/sql/wsrep_thd.cc b/sql/wsrep_thd.cc
index ccb32fb13af..fbca4a76b66 100644
--- a/sql/wsrep_thd.cc
+++ b/sql/wsrep_thd.cc
@@ -1,4 +1,4 @@
-/* Copyright (C) 2013-2023 Codership Oy <info@codership.com>
+/* Copyright (C) 2013-2022 Codership Oy <info@codership.com>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -308,11 +308,11 @@ void wsrep_fire_rollbacker(THD *thd)
}
-int wsrep_abort_thd(THD *bf_thd,
- THD *victim_thd,
- my_bool signal)
+int wsrep_abort_thd(THD *bf_thd_ptr, THD *victim_thd_ptr, my_bool signal)
{
DBUG_ENTER("wsrep_abort_thd");
+ THD *victim_thd= (THD *) victim_thd_ptr;
+ THD *bf_thd= (THD *) bf_thd_ptr;
mysql_mutex_assert_owner(&victim_thd->LOCK_thd_data);
mysql_mutex_assert_owner(&victim_thd->LOCK_thd_kill);
@@ -323,21 +323,16 @@ int wsrep_abort_thd(THD *bf_thd,
if ((WSREP(bf_thd) ||
((WSREP_ON || bf_thd->variables.wsrep_OSU_method == WSREP_OSU_RSU) &&
wsrep_thd_is_toi(bf_thd))) &&
+ victim_thd &&
!wsrep_thd_is_aborting(victim_thd))
{
- WSREP_DEBUG("wsrep_abort_thd, by: %llu, victim: %llu",
- (long long)bf_thd->real_id, (long long)victim_thd->real_id);
+ WSREP_DEBUG("wsrep_abort_thd, by: %llu, victim: %llu", (bf_thd) ?
+ (long long)bf_thd->real_id : 0, (long long)victim_thd->real_id);
ha_abort_transaction(bf_thd, victim_thd, signal);
}
else
{
- WSREP_DEBUG("wsrep_abort_thd not effective: bf %llu victim %llu "
- "wsrep %d wsrep_on %d RSU %d TOI %d aborting %d",
- (long long)bf_thd->real_id, (long long)victim_thd->real_id,
- WSREP_NNULL(bf_thd), WSREP_ON,
- bf_thd->variables.wsrep_OSU_method == WSREP_OSU_RSU,
- wsrep_thd_is_toi(bf_thd),
- wsrep_thd_is_aborting(victim_thd));
+ WSREP_DEBUG("wsrep_abort_thd not effective: %p %p", bf_thd, victim_thd);
wsrep_thd_UNLOCK(victim_thd);
}
diff --git a/sql/wsrep_thd.h b/sql/wsrep_thd.h
index 3d1bf3733a8..fd48df1494f 100644
--- a/sql/wsrep_thd.h
+++ b/sql/wsrep_thd.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2013-2023 Codership Oy <info@codership.com>
+/* Copyright (C) 2013-2022 Codership Oy <info@codership.com>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -88,9 +88,7 @@ bool wsrep_create_appliers(long threads, bool mutex_protected=false);
void wsrep_create_rollbacker();
bool wsrep_bf_abort(THD* bf_thd, THD* victim_thd);
-int wsrep_abort_thd(THD *bf_thd,
- THD *victim_thd,
- my_bool signal) __attribute__((nonnull(1,2)));
+int wsrep_abort_thd(THD *bf_thd_ptr, THD *victim_thd_ptr, my_bool signal);
/*
Helper methods to deal with thread local storage.
diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc
index fe1df40face..708a5430c0c 100644
--- a/storage/innobase/handler/ha_innodb.cc
+++ b/storage/innobase/handler/ha_innodb.cc
@@ -18778,16 +18778,6 @@ wsrep_kill_victim(
lock_cancel_waiting_and_release(wait_lock);
}
}
- else
- {
- wsrep_thd_LOCK(thd);
- victim_trx->lock.was_chosen_as_wsrep_victim= false;
- wsrep_thd_set_wsrep_aborter(NULL, thd);
- wsrep_thd_UNLOCK(thd);
-
- WSREP_DEBUG("wsrep_thd_bf_abort has failed, victim %lu will survive",
- thd_get_thread_id(thd));
- }
DBUG_VOID_RETURN;
}
diff --git a/storage/innobase/lock/lock0lock.cc b/storage/innobase/lock/lock0lock.cc
index 8fedd8a68d6..f3ba81d0c4a 100644
--- a/storage/innobase/lock/lock0lock.cc
+++ b/storage/innobase/lock/lock0lock.cc
@@ -787,34 +787,25 @@ lock_rec_has_to_wait(
}
#ifdef WITH_WSREP
- /* New lock request from a transaction is using unique key
- scan and this transaction is a wsrep high priority transaction
- (brute force). If conflicting transaction is also wsrep high
- priority transaction we should avoid lock conflict because
- ordering of these transactions is already decided and
- conflicting transaction will be later replayed. Note
- that thread holding conflicting lock can't be
- committed or rolled back while we hold
- lock_sys->mutex. */
- if (trx->is_wsrep_UK_scan()
- && wsrep_thd_is_BF(lock2->trx->mysql_thd, false)) {
- return false;
- }
-
- /* If BF-BF conflict, we have to look at write set order */
- if (trx->is_wsrep()
- && (type_mode & LOCK_MODE_MASK) == LOCK_X
- && (lock2->type_mode & LOCK_MODE_MASK) == LOCK_X
- && wsrep_thd_order_before(trx->mysql_thd,
- lock2->trx->mysql_thd)) {
- return false;
- }
+ /* New lock request from a transaction is using unique key
+ scan and this transaction is a wsrep high priority transaction
+ (brute force). If conflicting transaction is also wsrep high
+ priority transaction we should avoid lock conflict because
+ ordering of these transactions is already decided and
+ conflicting transaction will be later replayed. Note
+ that thread holding conflicting lock can't be
+ committed or rolled back while we hold
+ lock_sys->mutex. */
+ if (trx->is_wsrep_UK_scan()
+ && wsrep_thd_is_BF(lock2->trx->mysql_thd, false)) {
+ return false;
+ }
- /* We very well can let bf to wait normally as other
- BF will be replayed in case of conflict. For debug
- builds we will do additional sanity checks to catch
- unsupported bf wait if any. */
- ut_d(wsrep_assert_no_bf_bf_wait(lock2, trx));
+ /* We very well can let bf to wait normally as other
+ BF will be replayed in case of conflict. For debug
+ builds we will do additional sanity checks to catch
+ unsupported bf wait if any. */
+ ut_d(wsrep_assert_no_bf_bf_wait(lock2, trx));
#endif /* WITH_WSREP */
return true;
@@ -1996,14 +1987,6 @@ lock_rec_has_to_wait_in_queue(
if (heap_no < lock_rec_get_n_bits(lock)
&& (p[bit_offset] & bit_mask)
&& lock_has_to_wait(wait_lock, lock)) {
-#ifdef WITH_WSREP
- if (lock->trx->is_wsrep()
- && wsrep_thd_order_before(wait_lock->trx->mysql_thd,
- lock->trx->mysql_thd)) {
- /* don't wait for another BF lock */
- continue;
- }
-#endif
return(lock);
}
}