1
0
mirror of https://github.com/MariaDB/server.git synced 2025-08-07 00:04:31 +03:00

MDEV-30423 Deadlock on Replica during BACKUP STAGE BLOCK_COMMIT on XA transactions

The user XA commit execution branch was caught not have been covered
with MDEV-21953 fixes.

The XA involved deadlock is resolved now to apply the former fixes
pattern.
Along the fixes the following changes have been implemented.
- MDL lock attribute correction
- dissociation of the externally completed XA from the current
  thread's xid_state in the error branches
- cleanup_context() preseves the prepared XA
- wait_for_prior_commit() is relocated to satisfy both
  the binlog ON (log-slave-updates and skip-log-bin)
  and OFF slave execution branches.
This commit is contained in:
Andrei
2023-01-19 19:42:24 +02:00
parent 647a7232ff
commit dc646c2389
17 changed files with 786 additions and 37 deletions

View File

@@ -73,6 +73,7 @@
# before CHANGE MASTER and START SLAVE. RESET MASTER and RESET
# SLAVE are suppressed if $rpl_skip_reset_master_and_slave is
# set.
# Also see $rpl_server_skip_log_bin.
#
# $rpl_skip_change_master
# By default, this script issues CHANGE MASTER so that all slaves
@@ -94,6 +95,10 @@
# Timeout used when waiting for the slave threads to start.
# See include/wait_for_slave_param.inc
#
# $rpl_server_skip_log_bin
# When $rpl_skip_reset_master_and_slave is not set
# RESET MASTER does not report ER_FLUSH_MASTER_BINLOG_CLOSED
# on any server.
#
# ==== Side effects ====
#
@@ -161,7 +166,16 @@ while ($_rpl_server)
USE test;
if (!$rpl_skip_reset_master_and_slave)
{
RESET MASTER;
if (!$rpl_server_skip_log_bin)
{
--error 0
RESET MASTER;
}
if ($rpl_server_skip_log_bin)
{
--error 0,ER_FLUSH_MASTER_BINLOG_CLOSED
RESET MASTER;
}
SET GLOBAL gtid_slave_pos= "";
RESET SLAVE;
}