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