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();
}