You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by xi...@apache.org on 2022/07/22 08:47:49 UTC

[iotdb] 01/01: fix the potential issue for StateTracker that it cannot be terminated sometimes

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

xingtanzjr pushed a commit to branch xingtanzjr/fix_state_tacker
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit 3542f37aa5dc3a42fb91182507dd2bf717e8a168
Author: Jinrui.Zhang <xi...@gmail.com>
AuthorDate: Fri Jul 22 16:47:35 2022 +0800

    fix the potential issue for StateTracker that it cannot be terminated sometimes
---
 .../db/mpp/plan/scheduler/FixedRateFragInsStateTracker.java  | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/scheduler/FixedRateFragInsStateTracker.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/scheduler/FixedRateFragInsStateTracker.java
index 55e93974d9..59dbce1208 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/scheduler/FixedRateFragInsStateTracker.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/scheduler/FixedRateFragInsStateTracker.java
@@ -50,6 +50,7 @@ public class FixedRateFragInsStateTracker extends AbstractFragInsStateTracker {
   private ScheduledFuture<?> trackTask;
   private volatile FragmentInstanceState lastState;
   private volatile long durationToLastPrintInMS;
+  private volatile boolean aborted;
 
   public FixedRateFragInsStateTracker(
       QueryStateMachine stateMachine,
@@ -58,10 +59,14 @@ public class FixedRateFragInsStateTracker extends AbstractFragInsStateTracker {
       List<FragmentInstance> instances,
       IClientManager<TEndPoint, SyncDataNodeInternalServiceClient> internalServiceClientManager) {
     super(stateMachine, executor, scheduledExecutor, instances, internalServiceClientManager);
+    this.aborted = false;
   }
 
   @Override
-  public void start() {
+  public synchronized void start() {
+    if (aborted) {
+      return;
+    }
     trackTask =
         ScheduledExecutorUtil.safelyScheduleAtFixedRate(
             scheduledExecutor,
@@ -72,7 +77,8 @@ public class FixedRateFragInsStateTracker extends AbstractFragInsStateTracker {
   }
 
   @Override
-  public void abort() {
+  public synchronized void abort() {
+    aborted = true;
     logger.info("start to abort state tracker");
     if (trackTask != null) {
       logger.info("start to cancel fixed rate tracking task");
@@ -82,6 +88,8 @@ public class FixedRateFragInsStateTracker extends AbstractFragInsStateTracker {
       } else {
         logger.info("cancellation succeeds");
       }
+    } else {
+      logger.info("trackTask not started");
     }
   }