This is an automated email from the ASF dual-hosted git repository. yiguolei pushed a commit to branch branch-2.1 in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-2.1 by this push: new bec153b3694 [fix](timeout) query timeout was not correctly set #33045 bec153b3694 is described below commit bec153b369425768d63bbe2b55e36a4b525c4b5f Author: Mryange <59914473+mrya...@users.noreply.github.com> AuthorDate: Sat Mar 30 22:33:03 2024 +0800 [fix](timeout) query timeout was not correctly set #33045 --- .../java/org/apache/doris/qe/ConnectContext.java | 21 ++++++++++++++++++++- .../main/java/org/apache/doris/qe/Coordinator.java | 5 +++-- .../main/java/org/apache/doris/qe/StmtExecutor.java | 14 ++++++++++++++ 3 files changed, 37 insertions(+), 3 deletions(-) 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 18bdee1396e..17a3db0b7fc 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 @@ -52,6 +52,7 @@ import org.apache.doris.nereids.trees.expressions.literal.Literal; import org.apache.doris.plsql.Exec; import org.apache.doris.plsql.executor.PlSqlOperation; import org.apache.doris.plugin.audit.AuditEvent.AuditEventBuilder; +import org.apache.doris.proto.Types; import org.apache.doris.resource.Tag; import org.apache.doris.service.arrowflight.results.FlightSqlChannel; import org.apache.doris.statistics.ColumnStatistic; @@ -885,6 +886,24 @@ public class ConnectContext { cancelQuery(); } + // kill operation with no protect by timeout. + private void killByTimeout(boolean killConnection) { + LOG.warn("kill query from {}, kill mysql connection: {} reason time out", getRemoteHostPortString(), + killConnection); + + if (killConnection) { + isKilled = true; + // Close channel to break connection with client + closeChannel(); + } + // Now, cancel running query. + // cancelQuery by time out + StmtExecutor executorRef = executor; + if (executorRef != null) { + executorRef.cancel(Types.PPlanFragmentCancelReason.TIMEOUT); + } + } + public void cancelQuery() { StmtExecutor executorRef = executor; if (executorRef != null) { @@ -925,7 +944,7 @@ public class ConnectContext { } if (killFlag) { - kill(killConnection); + killByTimeout(killConnection); } } diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/Coordinator.java b/fe/fe-core/src/main/java/org/apache/doris/qe/Coordinator.java index 5531dda0c86..66b6ae39688 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/qe/Coordinator.java +++ b/fe/fe-core/src/main/java/org/apache/doris/qe/Coordinator.java @@ -1301,7 +1301,7 @@ public class Coordinator implements CoordInterface { resultBatch = receiver.getNext(status); if (!status.ok()) { LOG.warn("Query {} coordinator get next fail, {}, need cancel.", - DebugUtil.printId(queryId), status.toString()); + DebugUtil.printId(queryId), status.getErrorMsg()); } updateStatus(status); @@ -1440,7 +1440,8 @@ public class Coordinator implements CoordInterface { } else { queryStatus.setStatus(Status.CANCELLED); } - LOG.warn("Cancel execution of query {}, this is a outside invoke", DebugUtil.printId(queryId)); + LOG.warn("Cancel execution of query {}, this is a outside invoke, cancelReason {}", + DebugUtil.printId(queryId), cancelReason.toString()); cancelInternal(cancelReason); } finally { unlock(); diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java b/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java index 990a61e2aef..f31fe76bca4 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java +++ b/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java @@ -1335,6 +1335,20 @@ public class StmtExecutor { } } + // Because this is called by other thread + public void cancel(Types.PPlanFragmentCancelReason cancelReason) { + Coordinator coordRef = coord; + if (coordRef != null) { + coordRef.cancel(cancelReason); + } + if (mysqlLoadId != null) { + Env.getCurrentEnv().getLoadManager().getMysqlLoadManager().cancelMySqlLoad(mysqlLoadId); + } + if (parsedStmt instanceof AnalyzeTblStmt || parsedStmt instanceof AnalyzeDBStmt) { + Env.getCurrentEnv().getAnalysisManager().cancelSyncTask(context); + } + } + // Handle kill statement. private void handleKill() throws DdlException { KillStmt killStmt = (KillStmt) parsedStmt; --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org