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 <[email protected]>
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();
     }

Reply via email to