From 47e2a22bd5a4c9453fc45a3626641311b1d54ab3 Mon Sep 17 00:00:00 2001 From: sunzhengfang Date: Fri, 20 Oct 2017 11:44:03 +0800 Subject: [PATCH 1/5] #289 fix the error handling when xa transaction error in prepare --- .../mysql/nio/handler/NewConnectionRespHandler.java | 9 +++++++-- .../handler/transaction/xa/XARollbackNodesHandler.java | 3 ++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/actiontech/dble/backend/mysql/nio/handler/NewConnectionRespHandler.java b/src/main/java/com/actiontech/dble/backend/mysql/nio/handler/NewConnectionRespHandler.java index 324a8ca4a..0ea01b622 100644 --- a/src/main/java/com/actiontech/dble/backend/mysql/nio/handler/NewConnectionRespHandler.java +++ b/src/main/java/com/actiontech/dble/backend/mysql/nio/handler/NewConnectionRespHandler.java @@ -24,7 +24,7 @@ public class NewConnectionRespHandler implements ResponseHandler { public BackendConnection getBackConn() { lock.lock(); try { - while (backConn == null) { + if (backConn == null) { initiated.await(); } return backConn; @@ -39,7 +39,12 @@ public class NewConnectionRespHandler implements ResponseHandler { @Override public void connectionError(Throwable e, BackendConnection conn) { LOGGER.warn(conn + " connectionError " + e); - + lock.lock(); + try { + initiated.signal(); + }finally { + lock.unlock(); + } } @Override diff --git a/src/main/java/com/actiontech/dble/backend/mysql/nio/handler/transaction/xa/XARollbackNodesHandler.java b/src/main/java/com/actiontech/dble/backend/mysql/nio/handler/transaction/xa/XARollbackNodesHandler.java index 4c95cde46..cd9968c82 100644 --- a/src/main/java/com/actiontech/dble/backend/mysql/nio/handler/transaction/xa/XARollbackNodesHandler.java +++ b/src/main/java/com/actiontech/dble/backend/mysql/nio/handler/transaction/xa/XARollbackNodesHandler.java @@ -341,7 +341,8 @@ public class XARollbackNodesHandler extends AbstractRollbackNodesHandler { session.getSource().write(send); //partitionly commited,must commit again - } else if (session.getXaState() == TxState.TX_ROLLBACK_FAILED_STATE || session.getXaState() == TxState.TX_PREPARED_STATE) { + } else if (session.getXaState() == TxState.TX_ROLLBACK_FAILED_STATE || session.getXaState() == TxState.TX_PREPARED_STATE + || session.getXaState() == TxState.TX_PREPARE_UNCONNECT_STATE) { MySQLConnection errConn = session.releaseExcept(session.getXaState()); if (errConn != null) { XAStateLog.saveXARecoveryLog(session.getSessionXaID(), session.getXaState()); From b955839b5a47afa09751ce618871b31196e25b27 Mon Sep 17 00:00:00 2001 From: sunzhengfang Date: Fri, 20 Oct 2017 12:25:01 +0800 Subject: [PATCH 2/5] #289 fix the error handling when xa transaction error in prepare --- .../backend/mysql/nio/handler/NewConnectionRespHandler.java | 2 +- .../nio/handler/transaction/xa/XARollbackNodesHandler.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/actiontech/dble/backend/mysql/nio/handler/NewConnectionRespHandler.java b/src/main/java/com/actiontech/dble/backend/mysql/nio/handler/NewConnectionRespHandler.java index 0ea01b622..1bf941317 100644 --- a/src/main/java/com/actiontech/dble/backend/mysql/nio/handler/NewConnectionRespHandler.java +++ b/src/main/java/com/actiontech/dble/backend/mysql/nio/handler/NewConnectionRespHandler.java @@ -42,7 +42,7 @@ public class NewConnectionRespHandler implements ResponseHandler { lock.lock(); try { initiated.signal(); - }finally { + } finally { lock.unlock(); } } diff --git a/src/main/java/com/actiontech/dble/backend/mysql/nio/handler/transaction/xa/XARollbackNodesHandler.java b/src/main/java/com/actiontech/dble/backend/mysql/nio/handler/transaction/xa/XARollbackNodesHandler.java index cd9968c82..d7a97c82a 100644 --- a/src/main/java/com/actiontech/dble/backend/mysql/nio/handler/transaction/xa/XARollbackNodesHandler.java +++ b/src/main/java/com/actiontech/dble/backend/mysql/nio/handler/transaction/xa/XARollbackNodesHandler.java @@ -341,8 +341,8 @@ public class XARollbackNodesHandler extends AbstractRollbackNodesHandler { session.getSource().write(send); //partitionly commited,must commit again - } else if (session.getXaState() == TxState.TX_ROLLBACK_FAILED_STATE || session.getXaState() == TxState.TX_PREPARED_STATE - || session.getXaState() == TxState.TX_PREPARE_UNCONNECT_STATE) { + } else if (session.getXaState() == TxState.TX_ROLLBACK_FAILED_STATE || session.getXaState() == TxState.TX_PREPARED_STATE || + session.getXaState() == TxState.TX_PREPARE_UNCONNECT_STATE) { MySQLConnection errConn = session.releaseExcept(session.getXaState()); if (errConn != null) { XAStateLog.saveXARecoveryLog(session.getSessionXaID(), session.getXaState()); From ba13e797e573c6ba172cb6676b8416c64ffc1218 Mon Sep 17 00:00:00 2001 From: sunzhengfang Date: Mon, 23 Oct 2017 16:31:39 +0800 Subject: [PATCH 3/5] #289 fix the error handling when xa transaction error in prepare --- .../mysql/nio/handler/NewConnectionRespHandler.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/actiontech/dble/backend/mysql/nio/handler/NewConnectionRespHandler.java b/src/main/java/com/actiontech/dble/backend/mysql/nio/handler/NewConnectionRespHandler.java index 1bf941317..e3ca61d96 100644 --- a/src/main/java/com/actiontech/dble/backend/mysql/nio/handler/NewConnectionRespHandler.java +++ b/src/main/java/com/actiontech/dble/backend/mysql/nio/handler/NewConnectionRespHandler.java @@ -11,6 +11,7 @@ import com.actiontech.dble.net.mysql.RowDataPacket; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.io.IOException; import java.util.List; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.ReentrantLock; @@ -21,16 +22,21 @@ public class NewConnectionRespHandler implements ResponseHandler { private ReentrantLock lock = new ReentrantLock(); private Condition initiated = lock.newCondition(); - public BackendConnection getBackConn() { + public BackendConnection getBackConn() throws IOException{ lock.lock(); try { if (backConn == null) { initiated.await(); } + if(backConn == null){ + throw new IOException("get backend connection error "); + } return backConn; } catch (InterruptedException e) { LOGGER.warn("getBackConn " + e); return null; + } catch(IOException e){ + throw e; } finally { lock.unlock(); } From 40bd1923fca00a4050769665bded9a688129618e Mon Sep 17 00:00:00 2001 From: sunzhengfang Date: Mon, 23 Oct 2017 16:37:21 +0800 Subject: [PATCH 4/5] #289 fix the error handling when xa transaction error in prepare --- .../mysql/nio/handler/NewConnectionRespHandler.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/actiontech/dble/backend/mysql/nio/handler/NewConnectionRespHandler.java b/src/main/java/com/actiontech/dble/backend/mysql/nio/handler/NewConnectionRespHandler.java index e3ca61d96..fd8f87954 100644 --- a/src/main/java/com/actiontech/dble/backend/mysql/nio/handler/NewConnectionRespHandler.java +++ b/src/main/java/com/actiontech/dble/backend/mysql/nio/handler/NewConnectionRespHandler.java @@ -22,21 +22,21 @@ public class NewConnectionRespHandler implements ResponseHandler { private ReentrantLock lock = new ReentrantLock(); private Condition initiated = lock.newCondition(); - public BackendConnection getBackConn() throws IOException{ + public BackendConnection getBackConn() throws IOException { lock.lock(); try { if (backConn == null) { initiated.await(); } - if(backConn == null){ + if (backConn == null) { throw new IOException("get backend connection error "); } return backConn; } catch (InterruptedException e) { LOGGER.warn("getBackConn " + e); return null; - } catch(IOException e){ - throw e; + } catch (IOException e) { + throw e; } finally { lock.unlock(); } From 5c63bc9b27a670497ff1e3254c885e34e4eb8ad4 Mon Sep 17 00:00:00 2001 From: sunzhengfang Date: Mon, 23 Oct 2017 16:54:46 +0800 Subject: [PATCH 5/5] #289 fix the error handling when xa transaction error in prepare --- .../backend/mysql/nio/handler/NewConnectionRespHandler.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/java/com/actiontech/dble/backend/mysql/nio/handler/NewConnectionRespHandler.java b/src/main/java/com/actiontech/dble/backend/mysql/nio/handler/NewConnectionRespHandler.java index fd8f87954..5d6e3ae27 100644 --- a/src/main/java/com/actiontech/dble/backend/mysql/nio/handler/NewConnectionRespHandler.java +++ b/src/main/java/com/actiontech/dble/backend/mysql/nio/handler/NewConnectionRespHandler.java @@ -34,9 +34,7 @@ public class NewConnectionRespHandler implements ResponseHandler { return backConn; } catch (InterruptedException e) { LOGGER.warn("getBackConn " + e); - return null; - } catch (IOException e) { - throw e; + throw new IOException(e.getMessage()); } finally { lock.unlock(); }