mirror of
https://github.com/actiontech/dble.git
synced 2026-05-18 05:29:50 -05:00
disable kill in xa
This commit is contained in:
+7
@@ -8,6 +8,7 @@ package com.actiontech.dble.backend.mysql.nio.handler.transaction.xa.handler;
|
||||
import com.actiontech.dble.backend.BackendConnection;
|
||||
import com.actiontech.dble.backend.mysql.nio.MySQLConnection;
|
||||
import com.actiontech.dble.backend.mysql.nio.handler.MultiNodeHandler;
|
||||
import com.actiontech.dble.backend.mysql.nio.handler.transaction.ImplicitCommitHandler;
|
||||
import com.actiontech.dble.backend.mysql.nio.handler.transaction.xa.stage.XAStage;
|
||||
import com.actiontech.dble.config.ErrorCode;
|
||||
import com.actiontech.dble.net.mysql.ErrorPacket;
|
||||
@@ -26,6 +27,7 @@ public abstract class AbstractXAHandler extends MultiNodeHandler {
|
||||
protected volatile XAStage currentStage;
|
||||
protected volatile boolean interruptTx = true;
|
||||
protected volatile byte[] packetIfSuccess;
|
||||
protected volatile ImplicitCommitHandler implicitCommitHandler;
|
||||
|
||||
public AbstractXAHandler(NonBlockingSession session) {
|
||||
super(session);
|
||||
@@ -125,6 +127,7 @@ public abstract class AbstractXAHandler extends MultiNodeHandler {
|
||||
this.currentStage = null;
|
||||
this.interruptTx = true;
|
||||
this.packetIfSuccess = null;
|
||||
this.implicitCommitHandler = null;
|
||||
session.setRetryXa(false);
|
||||
}
|
||||
|
||||
@@ -171,6 +174,10 @@ public abstract class AbstractXAHandler extends MultiNodeHandler {
|
||||
return errPacket.toBytes();
|
||||
}
|
||||
|
||||
public ImplicitCommitHandler getImplicitCommitHandler() {
|
||||
return implicitCommitHandler;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeQueueAvailable() {
|
||||
}
|
||||
|
||||
+2
@@ -45,6 +45,8 @@ public class XAHandler extends AbstractXAHandler implements TransactionHandler {
|
||||
|
||||
@Override
|
||||
public void implicitCommit(ImplicitCommitHandler handler) {
|
||||
this.implicitCommitHandler = handler;
|
||||
commit();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+11
-3
@@ -1,9 +1,9 @@
|
||||
package com.actiontech.dble.backend.mysql.nio.handler.transaction.xa.stage;
|
||||
|
||||
import com.actiontech.dble.backend.mysql.nio.MySQLConnection;
|
||||
import com.actiontech.dble.backend.mysql.nio.handler.transaction.ImplicitCommitHandler;
|
||||
import com.actiontech.dble.backend.mysql.nio.handler.transaction.TransactionStage;
|
||||
import com.actiontech.dble.backend.mysql.nio.handler.transaction.xa.handler.AbstractXAHandler;
|
||||
import com.actiontech.dble.net.mysql.OkPacket;
|
||||
import com.actiontech.dble.route.RouteResultsetNode;
|
||||
import com.actiontech.dble.server.NonBlockingSession;
|
||||
|
||||
@@ -43,13 +43,21 @@ public abstract class XAStage implements TransactionStage {
|
||||
return;
|
||||
}
|
||||
|
||||
if (isSuccess) session.setFinishedCommitTime();
|
||||
if (isSuccess) {
|
||||
session.setFinishedCommitTime();
|
||||
ImplicitCommitHandler implicitCommitHandler = xaHandler.getImplicitCommitHandler();
|
||||
if (implicitCommitHandler != null) {
|
||||
xaHandler.clearResources();
|
||||
implicitCommitHandler.next();
|
||||
return;
|
||||
}
|
||||
}
|
||||
session.setResponseTime(isSuccess);
|
||||
byte[] sendData = xaHandler.getPacketIfSuccess();
|
||||
if (sendData != null) {
|
||||
session.getSource().write(sendData);
|
||||
} else {
|
||||
session.getSource().write(OkPacket.OK);
|
||||
session.getSource().write(session.getOkByteArray());
|
||||
}
|
||||
xaHandler.clearResources();
|
||||
}
|
||||
|
||||
@@ -76,7 +76,8 @@ public final class KillHandler {
|
||||
}
|
||||
|
||||
NonBlockingSession killSession = ((ServerConnection) killConn).getSession2();
|
||||
if (killSession.getSessionStage() == SessionStage.Init || killSession.getSessionStage() == SessionStage.Finished) {
|
||||
if (killSession.getTransactionManager().getXAStage() != null ||
|
||||
killSession.getSessionStage() == SessionStage.Init || killSession.getSessionStage() == SessionStage.Finished) {
|
||||
boolean multiStatementFlag = c.getSession2().getIsMultiStatement().get();
|
||||
getOkPacket(c).write(c);
|
||||
c.getSession2().multiStatementNextSql(multiStatementFlag);
|
||||
|
||||
Reference in New Issue
Block a user