mirror of
https://github.com/actiontech/dble.git
synced 2026-05-21 23:29:15 -05:00
fix kill query in ddl (#1621)
* fix kill query in ddl * fix kill query in ddl
This commit is contained in:
+7
-1
@@ -268,7 +268,13 @@ public class MultiNodeDdlPrepareHandler extends MultiNodeHandler {
|
||||
finishedTest = true;
|
||||
session.setTraceSimpleHandler(handler);
|
||||
session.setPreExecuteEnd(false);
|
||||
handler.execute();
|
||||
if (!session.isKilled()) {
|
||||
handler.execute();
|
||||
} else {
|
||||
DDLTraceManager.getInstance().endDDL(source, "Query was interrupted");
|
||||
session.handleSpecial(oriRrs, false);
|
||||
source.writeErrMessage(ErrorCode.ER_QUERY_INTERRUPTED, "Query was interrupted");
|
||||
}
|
||||
} catch (Exception e) {
|
||||
DDLTraceManager.getInstance().endDDL(source, "take Connection error:" + e.getMessage());
|
||||
LOGGER.warn(String.valueOf(source) + oriRrs, e);
|
||||
|
||||
@@ -575,7 +575,7 @@ public class ServerConnection extends FrontendConnection {
|
||||
public void writeErrMessage(String sqlState, String msg, int vendorCode) {
|
||||
byte packetId = (byte) this.getSession2().getPacketId().get();
|
||||
super.writeErrMessage(++packetId, vendorCode, sqlState, msg);
|
||||
if (session.isKilled()) {
|
||||
if (session.isDiscard() || session.isKilled()) {
|
||||
session.setKilled(false);
|
||||
session.setDiscard(false);
|
||||
}
|
||||
@@ -585,7 +585,7 @@ public class ServerConnection extends FrontendConnection {
|
||||
public void writeErrMessage(int vendorCode, String msg) {
|
||||
byte packetId = (byte) this.getSession2().getPacketId().get();
|
||||
super.writeErrMessage(++packetId, vendorCode, msg);
|
||||
if (session.isKilled()) {
|
||||
if (session.isDiscard() || session.isKilled()) {
|
||||
session.setKilled(false);
|
||||
session.setDiscard(false);
|
||||
}
|
||||
@@ -596,7 +596,7 @@ public class ServerConnection extends FrontendConnection {
|
||||
SerializableLock.getInstance().unLock(this.id);
|
||||
markFinished();
|
||||
super.write(data);
|
||||
if (session.isKilled()) {
|
||||
if (session.isDiscard() || session.isKilled()) {
|
||||
session.setKilled(false);
|
||||
session.setDiscard(false);
|
||||
}
|
||||
@@ -607,7 +607,7 @@ public class ServerConnection extends FrontendConnection {
|
||||
SerializableLock.getInstance().unLock(this.id);
|
||||
markFinished();
|
||||
super.write(buffer);
|
||||
if (session.isKilled()) {
|
||||
if (session.isDiscard() || session.isKilled()) {
|
||||
session.setKilled(false);
|
||||
session.setDiscard(false);
|
||||
}
|
||||
|
||||
@@ -100,8 +100,9 @@ public final class KillHandler {
|
||||
if (killSession.isKilled() && killSession.isDiscard()) {
|
||||
// discard backend conn in session target map
|
||||
Map<RouteResultsetNode, BackendConnection> target = killSession.getTargetMap();
|
||||
MySQLConnection conn;
|
||||
for (BackendConnection backendConnection : target.values()) {
|
||||
MySQLConnection conn = (MySQLConnection) backendConnection;
|
||||
conn = (MySQLConnection) backendConnection;
|
||||
if (conn.isExecuting()) {
|
||||
conn.execCmd("kill query " + conn.getThreadId());
|
||||
conn.close("Query was interrupted.");
|
||||
|
||||
Reference in New Issue
Block a user