From 21973d0d8ed18f62c6cc220a0ee8729e7d44d790 Mon Sep 17 00:00:00 2001
From: sachin <sachin.setiya@mariadb.com>
Date: Fri, 2 Apr 2021 00:33:13 +0100
Subject: [PATCH] MDEV-22953 main.flush_read_lock failed in buildbot with
 XAER_NOTA: Unknown XID

Issue:- Since there is no waiting for the actual disconnection of the con_tmp
(which does XA prepare of test1), We can have a issue when test1 is not
prepared and we are calling rollback on test1 , giving XAER_NOTA: Unknown XID
error

Solution:- Wait for the complete disconnection of con_tmp
---
 mysql-test/main/flush_read_lock.result | 11 +++++++----
 mysql-test/main/flush_read_lock.test   | 17 +++++++++++++----
 2 files changed, 20 insertions(+), 8 deletions(-)

diff --git a/mysql-test/main/flush_read_lock.result b/mysql-test/main/flush_read_lock.result
index 9a81cae1724..62a94c38124 100644
--- a/mysql-test/main/flush_read_lock.result
+++ b/mysql-test/main/flush_read_lock.result
@@ -1383,19 +1383,22 @@ insert into t3_trans values (1);
 xa end 'test1';
 xa prepare 'test1';
 # Disconnect temporary connection
+set debug_sync='thread_end SIGNAL test1_prepare';
 disconnect con_tmp;
+connection con1;
+set debug_sync='now WAIT_FOR test1_prepare';
 # Create temporary connection for XA transaction.
-connect  con_tmp,localhost,root,,;
+connect  con_tmp1,localhost,root,,;
 xa start 'test2';
 insert into t3_trans values (2);
 xa end 'test2';
 xa prepare 'test2';
 # Disconnect temporary connection
-set debug_sync='thread_end SIGNAL detached';
-disconnect con_tmp;
+set debug_sync='thread_end SIGNAL test2_prepare';
+disconnect con_tmp1;
 # Switching to connection 'con1'.
 connection con1;
-set debug_sync='now WAIT_FOR detached';
+set debug_sync='now WAIT_FOR test2_prepare';
 flush tables with read lock;
 # Switching to connection 'default'.
 connection default;
diff --git a/mysql-test/main/flush_read_lock.test b/mysql-test/main/flush_read_lock.test
index 205b8b302ea..d73820425d2 100644
--- a/mysql-test/main/flush_read_lock.test
+++ b/mysql-test/main/flush_read_lock.test
@@ -1690,25 +1690,34 @@ insert into t3_trans values (1);
 xa end 'test1';
 xa prepare 'test1';
 --echo # Disconnect temporary connection
+set debug_sync='thread_end SIGNAL test1_prepare';
 disconnect con_tmp;
+connection $con_aux1;
+set debug_sync='now WAIT_FOR test1_prepare';
+
+
 --echo # Create temporary connection for XA transaction.
-connect (con_tmp,localhost,root,,);
+connect (con_tmp1,localhost,root,,);
 xa start 'test2';
 insert into t3_trans values (2);
 xa end 'test2';
 xa prepare 'test2';
 --echo # Disconnect temporary connection
-set debug_sync='thread_end SIGNAL detached';
-disconnect con_tmp;
+set debug_sync='thread_end SIGNAL test2_prepare';
+disconnect con_tmp1;
+
+
 --echo # Switching to connection '$con_aux1'.
 connection $con_aux1;
-set debug_sync='now WAIT_FOR detached';
+set debug_sync='now WAIT_FOR test2_prepare';
 flush tables with read lock;
+
 --echo # Switching to connection 'default'.
 connection default;
 --echo # Send XA ROLLBACK 'test1'
 --send xa rollback 'test1'
 --echo # Switching to connection '$con_aux1'.
+
 connection $con_aux1;
 --echo # Wait until XA ROLLBACK is blocked.
 let $wait_condition=