You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ja...@apache.org on 2024/09/04 13:06:56 UTC

(iotdb) 01/01: Fix query stuck caused by restarting DN while doing query

This is an automated email from the ASF dual-hosted git repository.

jackietien pushed a commit to branch ty/fixQueryStuck
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit 65e7b54e477d3159ec6737f28752fcc2f4207ec5
Author: JackieTien97 <ja...@gmail.com>
AuthorDate: Wed Sep 4 21:06:19 2024 +0800

    Fix query stuck caused by restarting DN while doing query
---
 .../plan/scheduler/FixedRateFragInsStateTracker.java     | 16 ++++++++++++----
 1 file changed, 12 insertions(+), 4 deletions(-)

diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/scheduler/FixedRateFragInsStateTracker.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/scheduler/FixedRateFragInsStateTracker.java
index a1932753d46..e18c628e421 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/scheduler/FixedRateFragInsStateTracker.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/scheduler/FixedRateFragInsStateTracker.java
@@ -43,6 +43,7 @@ import java.util.Map;
 import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.ScheduledFuture;
 import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
 
 public class FixedRateFragInsStateTracker extends AbstractFragInsStateTracker {
 
@@ -175,12 +176,19 @@ public class FixedRateFragInsStateTracker extends AbstractFragInsStateTracker {
         stateMachine.transitionToFailed(instanceInfo.getFailureInfoList().get(0).toException());
       }
     }
-    boolean queryFinished =
+    boolean queryFinished = false;
+    List<InstanceStateMetrics> rootInstanceStateMetricsList =
         instanceStateMap.values().stream()
             .filter(instanceStateMetrics -> instanceStateMetrics.isRootInstance)
-            .allMatch(
-                instanceStateMetrics ->
-                    instanceStateMetrics.lastState == FragmentInstanceState.FINISHED);
+            .collect(Collectors.toList());
+    if (!rootInstanceStateMetricsList.isEmpty()) {
+      queryFinished =
+          rootInstanceStateMetricsList.stream()
+              .allMatch(
+                  instanceStateMetrics ->
+                      instanceStateMetrics.lastState == FragmentInstanceState.FINISHED);
+    }
+
     if (queryFinished) {
       stateMachine.transitionToFinished();
     }