diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/ConnectContext.java b/fe/fe-core/src/main/java/org/apache/doris/qe/ConnectContext.java index fcf2ca3d94a784..193c65eae4f85d 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/qe/ConnectContext.java +++ b/fe/fe-core/src/main/java/org/apache/doris/qe/ConnectContext.java @@ -870,6 +870,21 @@ protected void closeChannel() { } } + /** + * kill connection by other thread + */ + protected void killConnection() { + isKilled = true; + // Close channel to break connection with client + closeChannel(); + returnRows = 0; + deleteTempTable(); + Env.getCurrentEnv().unregisterSessionInfo(this.sessionId); + } + + /** + * kill connection by self + */ public void cleanup() { closeChannel(); threadLocalInfo.remove(); @@ -1024,16 +1039,10 @@ public void kill(boolean killConnection) { killConnection); if (killConnection) { - isKilled = true; - // Close channel to break connection with client - closeChannel(); + killConnection(); } // Now, cancel running query. cancelQuery(new Status(TStatusCode.CANCELLED, "cancel query by user from " + getRemoteHostPortString())); - // Clean up after cancelQuery to avoid needing session variables etc. inside cancelQuery - if (killConnection) { - cleanup(); - } } // kill operation with no protect by timeout. @@ -1042,9 +1051,7 @@ private void killByTimeout(boolean killConnection) { LOG.warn("kill wait timeout connection, connection type: {}, connectionId: {}, remote: {}, " + "wait timeout: {}", getConnectType(), connectionId, getRemoteHostPortString(), sessionVariable.getWaitTimeoutS()); - isKilled = true; - // Close channel to break connection with client - closeChannel(); + killConnection(); } // Now, cancel running query. // cancelQuery by time out @@ -1057,10 +1064,6 @@ private void killByTimeout(boolean killConnection) { executorRef.cancel(new Status(TStatusCode.TIMEOUT, "query is timeout, killed by timeout checker")); } - // Clean up after cancelQuery to avoid needing session variables etc. inside cancelQuery - if (killConnection) { - cleanup(); - } } public void cancelQuery(Status cancelReason) { diff --git a/fe/fe-core/src/main/java/org/apache/doris/service/arrowflight/sessions/FlightSqlConnectContext.java b/fe/fe-core/src/main/java/org/apache/doris/service/arrowflight/sessions/FlightSqlConnectContext.java index 00d8a63554eb4b..111a79745e1f03 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/service/arrowflight/sessions/FlightSqlConnectContext.java +++ b/fe/fe-core/src/main/java/org/apache/doris/service/arrowflight/sessions/FlightSqlConnectContext.java @@ -74,16 +74,10 @@ public void kill(boolean killConnection) { LOG.warn("kill query from {}, kill flight sql connection: {}", getRemoteHostPortString(), killConnection); if (killConnection) { - isKilled = true; - // Close channel and break connection with client. - closeChannel(); + killConnection(); } // Now, cancel running query. cancelQuery(new Status(TStatusCode.CANCELLED, "arrow flight query killed by user")); - // Clean up after cancelQuery to avoid needing session variables etc. inside cancelQuery - if (killConnection) { - cleanup(); - } } @Override