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

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


The following commit(s) were added to refs/heads/master by this push:
     new d16942ef74e [IOTDB-6031] Fix SonarCloud bugs in confignode module 
(#10337)
d16942ef74e is described below

commit d16942ef74e6f77dd96c62e5f7eca3ae879d7e3c
Author: Xiangpeng Hu <[email protected]>
AuthorDate: Thu Jun 29 14:52:25 2023 +0800

    [IOTDB-6031] Fix SonarCloud bugs in confignode module (#10337)
---
 .../java/org/apache/iotdb/rpc/TSStatusCode.java    |  1 +
 .../iotdb/confignode/manager/ConfigManager.java    | 12 ++--
 .../manager/node/ClusterNodeStartUtils.java        | 76 +++++++++++++---------
 .../iotdb/confignode/manager/node/NodeManager.java | 13 +++-
 .../iotdb/confignode/procedure/Procedure.java      | 11 ++--
 .../confignode/procedure/ProcedureExecutor.java    | 13 ++--
 .../confignode/procedure/StoppableThread.java      |  1 +
 .../procedure/env/ConfigNodeProcedureEnv.java      |  1 +
 .../impl/node/AddConfigNodeProcedure.java          |  6 ++
 .../impl/node/RemoveConfigNodeProcedure.java       |  6 ++
 .../impl/node/RemoveDataNodeProcedure.java         |  6 ++
 .../pipe/plugin/CreatePipePluginProcedure.java     |  6 ++
 .../impl/pipe/plugin/DropPipePluginProcedure.java  |  6 ++
 .../impl/statemachine/RegionMigrateProcedure.java  |  8 ++-
 .../scheduler/AbstractProcedureScheduler.java      |  3 +-
 .../confignode/procedure/store/ProcedureWAL.java   |  4 +-
 16 files changed, 120 insertions(+), 53 deletions(-)

diff --git 
a/iotdb-client/service-rpc/src/main/java/org/apache/iotdb/rpc/TSStatusCode.java 
b/iotdb-client/service-rpc/src/main/java/org/apache/iotdb/rpc/TSStatusCode.java
index 0c75ca177a1..1377e51236e 100644
--- 
a/iotdb-client/service-rpc/src/main/java/org/apache/iotdb/rpc/TSStatusCode.java
+++ 
b/iotdb-client/service-rpc/src/main/java/org/apache/iotdb/rpc/TSStatusCode.java
@@ -149,6 +149,7 @@ public enum TSStatusCode {
   DATANODE_STOP_ERROR(1005),
   REMOVE_DATANODE_ERROR(1006),
   CAN_NOT_CONNECT_DATANODE(1007),
+  TRANSFER_LEADER_ERROR(1008),
 
   // Sync, Load TsFile
   LOAD_FILE_ERROR(1100),
diff --git 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/ConfigManager.java
 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/ConfigManager.java
index 6a3d8fcf08b..b6ed07a869e 100644
--- 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/ConfigManager.java
+++ 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/ConfigManager.java
@@ -194,6 +194,7 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.concurrent.atomic.AtomicReference;
 import java.util.stream.Collectors;
 
 import static 
org.apache.iotdb.commons.conf.IoTDBConstant.ONE_LEVEL_PATH_WILDCARD;
@@ -207,7 +208,7 @@ public class ConfigManager implements IManager {
   private static final CommonConfig COMMON_CONF = 
CommonDescriptor.getInstance().getConfig();
 
   /** Manage PartitionTable read/write requests through the ConsensusLayer. */
-  private volatile ConsensusManager consensusManager;
+  private AtomicReference<ConsensusManager> consensusManager;
 
   /** Manage cluster node. */
   private final NodeManager nodeManager;
@@ -304,12 +305,13 @@ public class ConfigManager implements IManager {
   }
 
   public void initConsensusManager() throws IOException {
-    this.consensusManager = new ConsensusManager(this, this.stateMachine);
+    ConsensusManager consensusManager = new ConsensusManager(this, 
this.stateMachine);
+    this.consensusManager = new AtomicReference<>(consensusManager);
   }
 
   public void close() throws IOException {
     if (consensusManager != null) {
-      consensusManager.close();
+      consensusManager.get().close();
     }
     if (partitionManager != null) {
       partitionManager.getRegionMaintainer().shutdown();
@@ -915,7 +917,7 @@ public class ConfigManager implements IManager {
 
   @Override
   public ConsensusManager getConsensusManager() {
-    return consensusManager;
+    return consensusManager.get();
   }
 
   @Override
@@ -1124,7 +1126,7 @@ public class ConfigManager implements IManager {
           Thread.sleep(1000);
         } else {
           // When add non Seed-ConfigNode to the ConfigNodeGroup, the 
parameter should be emptyList
-          
consensusManager.createPeerForConsensusGroup(Collections.emptyList());
+          
consensusManager.get().createPeerForConsensusGroup(Collections.emptyList());
           return StatusUtils.OK;
         }
       } catch (InterruptedException e) {
diff --git 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/node/ClusterNodeStartUtils.java
 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/node/ClusterNodeStartUtils.java
index c69903464e8..65d3f6376c5 100644
--- 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/node/ClusterNodeStartUtils.java
+++ 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/node/ClusterNodeStartUtils.java
@@ -79,24 +79,28 @@ public class ClusterNodeStartUtils {
     }
 
     /* Check if there exist conflict TEndPoints */
-    List<TEndPoint> conflictEndPoints;
+    List<TEndPoint> conflictEndPoints = null;
     switch (nodeType) {
       case ConfigNode:
-        conflictEndPoints =
-            checkConflictTEndPointForNewConfigNode(
-                (TConfigNodeLocation) nodeLocation,
-                configManager.getNodeManager().getRegisteredConfigNodes());
+        if (nodeLocation instanceof TConfigNodeLocation) {
+          conflictEndPoints =
+              checkConflictTEndPointForNewConfigNode(
+                  (TConfigNodeLocation) nodeLocation,
+                  configManager.getNodeManager().getRegisteredConfigNodes());
+        }
         break;
       case DataNode:
       default:
-        conflictEndPoints =
-            checkConflictTEndPointForNewDataNode(
-                (TDataNodeLocation) nodeLocation,
-                configManager.getNodeManager().getRegisteredDataNodes());
+        if (nodeLocation instanceof TDataNodeLocation) {
+          conflictEndPoints =
+              checkConflictTEndPointForNewDataNode(
+                  (TDataNodeLocation) nodeLocation,
+                  configManager.getNodeManager().getRegisteredDataNodes());
+        }
         break;
     }
 
-    if (!conflictEndPoints.isEmpty()) {
+    if (conflictEndPoints != null && !conflictEndPoints.isEmpty()) {
       /* Reject Node registration because there exist conflict TEndPoints */
       status.setCode(TSStatusCode.REJECT_NODE_START.getStatusCode());
       status.setMessage(
@@ -162,20 +166,24 @@ public class ClusterNodeStartUtils {
       return status;
     }
 
-    Object matchedNodeLocation;
+    Object matchedNodeLocation = null;
     switch (nodeType) {
       case ConfigNode:
-        matchedNodeLocation =
-            matchRegisteredConfigNode(
-                (TConfigNodeLocation) nodeLocation,
-                configManager.getNodeManager().getRegisteredConfigNodes());
+        if (nodeLocation instanceof TConfigNodeLocation) {
+          matchedNodeLocation =
+              matchRegisteredConfigNode(
+                  (TConfigNodeLocation) nodeLocation,
+                  configManager.getNodeManager().getRegisteredConfigNodes());
+        }
         break;
       case DataNode:
       default:
-        matchedNodeLocation =
-            matchRegisteredDataNode(
-                (TDataNodeLocation) nodeLocation,
-                configManager.getNodeManager().getRegisteredDataNodes());
+        if (nodeLocation instanceof TDataNodeLocation) {
+          matchedNodeLocation =
+              matchRegisteredDataNode(
+                  (TDataNodeLocation) nodeLocation,
+                  configManager.getNodeManager().getRegisteredDataNodes());
+        }
         break;
     }
 
@@ -196,25 +204,29 @@ public class ClusterNodeStartUtils {
     }
 
     boolean acceptRestart = true;
-    Set<Integer> updatedTEndPoints;
+    Set<Integer> updatedTEndPoints = null;
     switch (nodeType) {
       case ConfigNode:
-        updatedTEndPoints =
-            checkUpdatedTEndPointOfConfigNode(
-                (TConfigNodeLocation) nodeLocation, (TConfigNodeLocation) 
matchedNodeLocation);
-        if (!updatedTEndPoints.isEmpty()) {
-          // TODO: Accept internal TEndPoints
-          acceptRestart = false;
+        if (nodeLocation instanceof TConfigNodeLocation) {
+          updatedTEndPoints =
+              checkUpdatedTEndPointOfConfigNode(
+                  (TConfigNodeLocation) nodeLocation, (TConfigNodeLocation) 
matchedNodeLocation);
+          if (!updatedTEndPoints.isEmpty()) {
+            // TODO: Accept internal TEndPoints
+            acceptRestart = false;
+          }
         }
         break;
       case DataNode:
       default:
-        updatedTEndPoints =
-            checkUpdatedTEndPointOfDataNode(
-                (TDataNodeLocation) nodeLocation, (TDataNodeLocation) 
matchedNodeLocation);
-        if (updatedTEndPoints.stream().max(Integer::compare).orElse(-1) > 0) {
-          // TODO: Accept internal TEndPoints
-          acceptRestart = false;
+        if (nodeLocation instanceof TDataNodeLocation) {
+          updatedTEndPoints =
+              checkUpdatedTEndPointOfDataNode(
+                  (TDataNodeLocation) nodeLocation, (TDataNodeLocation) 
matchedNodeLocation);
+          if (updatedTEndPoints.stream().max(Integer::compare).orElse(-1) > 0) 
{
+            // TODO: Accept internal TEndPoints
+            acceptRestart = false;
+          }
         }
         break;
     }
diff --git 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/node/NodeManager.java
 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/node/NodeManager.java
index 8ac9212524c..495e6795e17 100644
--- 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/node/NodeManager.java
+++ 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/node/NodeManager.java
@@ -547,11 +547,18 @@ public class NodeManager {
 
   private TSStatus transferLeader(
       RemoveConfigNodePlan removeConfigNodePlan, ConsensusGroupId groupId) {
-    TConfigNodeLocation newLeader =
+    Optional<TConfigNodeLocation> optional =
         filterConfigNodeThroughStatus(NodeStatus.Running).stream()
             .filter(e -> 
!e.equals(removeConfigNodePlan.getConfigNodeLocation()))
-            .findAny()
-            .get();
+            .findAny();
+    TConfigNodeLocation newLeader = null;
+    if (optional.isPresent()) {
+      newLeader = optional.get();
+    } else {
+      return new TSStatus(TSStatusCode.TRANSFER_LEADER_ERROR.getStatusCode())
+          .setMessage(
+              "Transfer ConfigNode leader failed because can not find any 
running ConfigNode.");
+    }
     ConsensusGenericResponse resp =
         getConsensusManager()
             .getConsensusImpl()
diff --git 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/Procedure.java
 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/Procedure.java
index 5a113a844e5..36bc8afcb4c 100644
--- 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/Procedure.java
+++ 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/Procedure.java
@@ -40,6 +40,7 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
+import java.util.concurrent.atomic.AtomicReference;
 
 /**
  * Abstract class of all procedures.
@@ -63,7 +64,7 @@ public abstract class Procedure<Env> implements 
Comparable<Procedure<Env>> {
   private volatile long timeout = NO_TIMEOUT;
   private volatile long lastUpdate;
 
-  private volatile byte[] result = null;
+  private AtomicReference<byte[]> result = null;
   private volatile boolean locked = false;
   private boolean lockedWhenLoading = false;
 
@@ -173,8 +174,8 @@ public abstract class Procedure<Env> implements 
Comparable<Procedure<Env>> {
 
     // result
     if (result != null) {
-      stream.writeInt(result.length);
-      stream.write(result);
+      stream.writeInt(result.get().length);
+      stream.write(result.get());
     } else {
       stream.writeInt(-1);
     }
@@ -642,7 +643,7 @@ public abstract class Procedure<Env> implements 
Comparable<Procedure<Env>> {
 
   /** @return the serialized result if any, otherwise null */
   public byte[] getResult() {
-    return result;
+    return result.get();
   }
 
   /**
@@ -651,7 +652,7 @@ public abstract class Procedure<Env> implements 
Comparable<Procedure<Env>> {
    * @param result the serialized result that will be passed to the client
    */
   protected void setResult(byte[] result) {
-    this.result = result;
+    this.result = new AtomicReference<>(result);
   }
 
   /**
diff --git 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/ProcedureExecutor.java
 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/ProcedureExecutor.java
index 96256287aa1..d8c5db84328 100644
--- 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/ProcedureExecutor.java
+++ 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/ProcedureExecutor.java
@@ -46,6 +46,7 @@ import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.concurrent.atomic.AtomicLong;
+import java.util.concurrent.atomic.AtomicReference;
 
 public class ProcedureExecutor<Env> {
   private static final Logger LOG = 
LoggerFactory.getLogger(ProcedureExecutor.class);
@@ -482,7 +483,7 @@ public class ProcedureExecutor<Env> {
     if (parent == null && rootProcStack.isRollingback()) {
       return;
     }
-    if (parent.tryRunnable()) {
+    if (parent != null && parent.tryRunnable()) {
       // if success, means all its children have completed, move parent to 
front of the queue.
       store.update(parent);
       scheduler.addFront(parent);
@@ -709,7 +710,7 @@ public class ProcedureExecutor<Env> {
 
   private class WorkerThread extends StoppableThread {
     private final AtomicLong startTime = new AtomicLong(Long.MAX_VALUE);
-    private volatile Procedure<Env> activeProcedure;
+    private AtomicReference<Procedure<Env>> activeProcedure;
     protected long keepAliveTime = -1;
 
     public WorkerThread(ThreadGroup threadGroup) {
@@ -735,7 +736,7 @@ public class ProcedureExecutor<Env> {
           if (procedure == null) {
             continue;
           }
-          this.activeProcedure = procedure;
+          this.activeProcedure = new AtomicReference<>(procedure);
           int activeCount = activeExecutorCount.incrementAndGet();
           startTime.set(System.currentTimeMillis());
           executeProcedure(procedure);
@@ -747,7 +748,9 @@ public class ProcedureExecutor<Env> {
         }
 
       } catch (Throwable throwable) {
-        LOG.warn("Worker terminated {}", this.activeProcedure, throwable);
+        if (this.activeProcedure != null) {
+          LOG.warn("Worker terminated {}", this.activeProcedure.get(), 
throwable);
+        }
       } finally {
         LOG.debug("Worker teminated.");
       }
@@ -760,7 +763,7 @@ public class ProcedureExecutor<Env> {
 
     @Override
     public String toString() {
-      Procedure<?> p = this.activeProcedure;
+      Procedure<?> p = this.activeProcedure.get();
       return getName() + "(pid=" + (p == null ? Procedure.NO_PROC_ID : 
p.getProcId() + ")");
     }
 
diff --git 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/StoppableThread.java
 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/StoppableThread.java
index b3a3432030a..25d1292660d 100644
--- 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/StoppableThread.java
+++ 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/StoppableThread.java
@@ -44,6 +44,7 @@ public abstract class StoppableThread extends Thread {
       }
     } catch (InterruptedException e) {
       LOG.warn("{} join wait got interrupted", getName(), e);
+      Thread.currentThread().interrupt();
     }
   }
 }
diff --git 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/env/ConfigNodeProcedureEnv.java
 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/env/ConfigNodeProcedureEnv.java
index 32606771719..a5947314bcc 100644
--- 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/env/ConfigNodeProcedureEnv.java
+++ 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/env/ConfigNodeProcedureEnv.java
@@ -160,6 +160,7 @@ public class ConfigNodeProcedureEnv {
           TimeUnit.MILLISECONDS.sleep(1000);
         } catch (InterruptedException e) {
           LOG.error("Sleep failed in ConfigNodeProcedureEnv: ", e);
+          Thread.currentThread().interrupt();
         }
         nodeStatus = getLoadManager().getNodeStatus(dataNodeId);
       }
diff --git 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/node/AddConfigNodeProcedure.java
 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/node/AddConfigNodeProcedure.java
index afff62bfb7f..863a42952fe 100644
--- 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/node/AddConfigNodeProcedure.java
+++ 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/node/AddConfigNodeProcedure.java
@@ -33,6 +33,7 @@ import org.slf4j.LoggerFactory;
 import java.io.DataOutputStream;
 import java.io.IOException;
 import java.nio.ByteBuffer;
+import java.util.Objects;
 
 /** add config node procedure */
 public class AddConfigNodeProcedure extends 
AbstractNodeProcedure<AddConfigNodeState> {
@@ -166,4 +167,9 @@ public class AddConfigNodeProcedure extends 
AbstractNodeProcedure<AddConfigNodeS
     }
     return false;
   }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(this.tConfigNodeLocation);
+  }
 }
diff --git 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/node/RemoveConfigNodeProcedure.java
 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/node/RemoveConfigNodeProcedure.java
index a441d82c7b1..69900fe9356 100644
--- 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/node/RemoveConfigNodeProcedure.java
+++ 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/node/RemoveConfigNodeProcedure.java
@@ -33,6 +33,7 @@ import org.slf4j.LoggerFactory;
 import java.io.DataOutputStream;
 import java.io.IOException;
 import java.nio.ByteBuffer;
+import java.util.Objects;
 
 /** remove config node procedure */
 public class RemoveConfigNodeProcedure extends 
AbstractNodeProcedure<RemoveConfigNodeState> {
@@ -141,4 +142,9 @@ public class RemoveConfigNodeProcedure extends 
AbstractNodeProcedure<RemoveConfi
     }
     return false;
   }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(this.removedConfigNode);
+  }
 }
diff --git 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/node/RemoveDataNodeProcedure.java
 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/node/RemoveDataNodeProcedure.java
index f42e46e2aa2..79640e7739c 100644
--- 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/node/RemoveDataNodeProcedure.java
+++ 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/node/RemoveDataNodeProcedure.java
@@ -39,6 +39,7 @@ import java.io.IOException;
 import java.nio.ByteBuffer;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Objects;
 import java.util.stream.Collectors;
 
 import static 
org.apache.iotdb.confignode.conf.ConfigNodeConstant.REMOVE_DATANODE_PROCESS;
@@ -232,4 +233,9 @@ public class RemoveDataNodeProcedure extends 
AbstractNodeProcedure<RemoveDataNod
     }
     return false;
   }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(this.removedDataNode, this.migratedDataNodeRegions);
+  }
 }
diff --git 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/pipe/plugin/CreatePipePluginProcedure.java
 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/pipe/plugin/CreatePipePluginProcedure.java
index cdefb0501b2..f409934c59d 100644
--- 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/pipe/plugin/CreatePipePluginProcedure.java
+++ 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/pipe/plugin/CreatePipePluginProcedure.java
@@ -48,6 +48,7 @@ import org.slf4j.LoggerFactory;
 import java.io.DataOutputStream;
 import java.io.IOException;
 import java.nio.ByteBuffer;
+import java.util.Objects;
 
 /**
  * This class extends {@link AbstractNodeProcedure} to make sure that when a 
{@link
@@ -295,6 +296,11 @@ public class CreatePipePluginProcedure extends 
AbstractNodeProcedure<CreatePipeP
     return false;
   }
 
+  @Override
+  public int hashCode() {
+    return Objects.hash(this.pipePluginMeta);
+  }
+
   @TestOnly
   public byte[] getJarFile() {
     return jarFile;
diff --git 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/pipe/plugin/DropPipePluginProcedure.java
 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/pipe/plugin/DropPipePluginProcedure.java
index 5b469725038..676d127e27c 100644
--- 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/pipe/plugin/DropPipePluginProcedure.java
+++ 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/pipe/plugin/DropPipePluginProcedure.java
@@ -42,6 +42,7 @@ import org.slf4j.LoggerFactory;
 import java.io.DataOutputStream;
 import java.io.IOException;
 import java.nio.ByteBuffer;
+import java.util.Objects;
 
 /**
  * This class extends {@link AbstractNodeProcedure} to make sure that when a 
{@link
@@ -240,4 +241,9 @@ public class DropPipePluginProcedure extends 
AbstractNodeProcedure<DropPipePlugi
     }
     return false;
   }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(this.pluginName);
+  }
 }
diff --git 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/statemachine/RegionMigrateProcedure.java
 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/statemachine/RegionMigrateProcedure.java
index e1f02cffb2d..56369316b7d 100644
--- 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/statemachine/RegionMigrateProcedure.java
+++ 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/statemachine/RegionMigrateProcedure.java
@@ -39,6 +39,7 @@ import org.slf4j.LoggerFactory;
 import java.io.DataOutputStream;
 import java.io.IOException;
 import java.nio.ByteBuffer;
+import java.util.Objects;
 
 import static 
org.apache.iotdb.confignode.conf.ConfigNodeConstant.REGION_MIGRATE_PROCESS;
 import static 
org.apache.iotdb.confignode.procedure.env.DataNodeRemoveHandler.getIdWithRpcEndpoint;
@@ -250,6 +251,11 @@ public class RegionMigrateProcedure
     return false;
   }
 
+  @Override
+  public int hashCode() {
+    return Objects.hash(this.originalDataNode, this.destDataNode, 
this.consensusGroupId);
+  }
+
   public TSStatus waitForOneMigrationStepFinished(
       TConsensusGroupId consensusGroupId, RegionTransitionState state) throws 
Exception {
 
@@ -299,7 +305,7 @@ public class RegionMigrateProcedure
         migrateSuccess = false;
         migrateResult = migrateStatus.toString();
       }
-      regionMigrateLock.notify();
+      regionMigrateLock.notifyAll();
     }
   }
 
diff --git 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/scheduler/AbstractProcedureScheduler.java
 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/scheduler/AbstractProcedureScheduler.java
index 00b1a7d1b1f..5a91e42ae1d 100644
--- 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/scheduler/AbstractProcedureScheduler.java
+++ 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/scheduler/AbstractProcedureScheduler.java
@@ -142,7 +142,8 @@ public abstract class AbstractProcedureScheduler implements 
ProcedureScheduler {
         if (nanos < 0) {
           schedWaitCond.await();
         } else {
-          schedWaitCond.awaitNanos(nanos);
+          long leftTime = schedWaitCond.awaitNanos(nanos);
+          LOG.debug("the scheduler waiting time left {} nanos", leftTime);
         }
         if (!queueHasRunnables()) {
           return null;
diff --git 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/store/ProcedureWAL.java
 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/store/ProcedureWAL.java
index b37e32d27c1..3f1b4eba687 100644
--- 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/store/ProcedureWAL.java
+++ 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/store/ProcedureWAL.java
@@ -90,7 +90,9 @@ public class ProcedureWAL {
       procedureList.add(procedure);
     } catch (IOException e) {
       LOG.error("Load {} failed, it will be deleted.", walFilePath, e);
-      walFilePath.toFile().delete();
+      if (!walFilePath.toFile().delete()) {
+        LOG.error("{} delete failed; take appropriate action.", walFilePath, 
e);
+      }
     }
   }
 

Reply via email to