disable kill in xa

This commit is contained in:
Baofengqi
2020-03-26 14:50:12 +08:00
committed by tiger.yan
parent 57576eab8a
commit a1fda0d8ba
4 changed files with 22 additions and 4 deletions
@@ -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() {
}
@@ -45,6 +45,8 @@ public class XAHandler extends AbstractXAHandler implements TransactionHandler {
@Override
public void implicitCommit(ImplicitCommitHandler handler) {
this.implicitCommitHandler = handler;
commit();
}
@Override
@@ -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);