summaryrefslogtreecommitdiff
path: root/sql/wsrep_mysqld.cc
diff options
context:
space:
mode:
authormkaruza <mario.karuza@galeracluster.com>2022-02-16 15:05:58 +0100
committerJan Lindström <jan.lindstrom@mariadb.com>2022-03-18 08:30:26 +0200
commit304f75c97311a1b746d9bb6bc94de415b5daa21c (patch)
tree2942293d0a2974e309c3146a9052168490bce038 /sql/wsrep_mysqld.cc
parentc63eab2c68bd83c7b1f5fec9fc9bb0d7238b9b34 (diff)
downloadmariadb-git-304f75c97311a1b746d9bb6bc94de415b5daa21c.tar.gz
MDEV-27568 Parallel async replication hangs on a Galera node
Using parallel slave applying can cause deadlock between between DDL and other events. GTID with lower seqno can be blocked in galera when node entered TOI mode, but DDL GTID which has higher node can be blocked before previous GTIDs are applied locally. Fix is to check prior commits before entering TOI. Reviewed-by: Jan Lindström <jan.lindstrom@mariadb.com>
Diffstat (limited to 'sql/wsrep_mysqld.cc')
-rw-r--r--sql/wsrep_mysqld.cc15
1 files changed, 15 insertions, 0 deletions
diff --git a/sql/wsrep_mysqld.cc b/sql/wsrep_mysqld.cc
index 8a5b6d915d9..d53fb7320e4 100644
--- a/sql/wsrep_mysqld.cc
+++ b/sql/wsrep_mysqld.cc
@@ -2247,6 +2247,12 @@ int wsrep_to_isolation_begin(THD *thd, const char *db_, const char *table_,
if (!wsrep_thd_is_local(thd))
return 0;
+ if (thd->wsrep_parallel_slave_wait_for_prior_commit())
+ {
+ WSREP_WARN("TOI: wait_for_prior_commit() returned error.");
+ return -1;
+ }
+
int ret= 0;
mysql_mutex_lock(&thd->LOCK_thd_data);
@@ -3064,6 +3070,15 @@ enum wsrep::streaming_context::fragment_unit wsrep_fragment_unit(ulong unit)
}
}
+bool THD::wsrep_parallel_slave_wait_for_prior_commit()
+{
+ if (rgi_slave && rgi_slave->is_parallel_exec && wait_for_prior_commit())
+ {
+ return 1;
+ }
+ return 0;
+}
+
/***** callbacks for wsrep service ************/
my_bool get_wsrep_recovery()