You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ha...@apache.org on 2024/01/22 04:12:10 UTC

(iotdb) branch fix_last_flush_time_deadlock updated: fix recover last flush time deadlock

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

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


The following commit(s) were added to refs/heads/fix_last_flush_time_deadlock by this push:
     new 1d6bf7a9234 fix recover last flush time deadlock
1d6bf7a9234 is described below

commit 1d6bf7a92348724efc28ec06ed3eeecaa2d3af9f
Author: HTHou <hh...@outlook.com>
AuthorDate: Mon Jan 22 12:11:52 2024 +0800

    fix recover last flush time deadlock
---
 .../org/apache/iotdb/db/storageengine/dataregion/DataRegion.java  | 8 ++------
 .../iotdb/db/storageengine/dataregion/HashLastFlushTimeMap.java   | 7 ++++---
 2 files changed, 6 insertions(+), 9 deletions(-)

diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/DataRegion.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/DataRegion.java
index e74c99c762c..14ddc4fc37d 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/DataRegion.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/DataRegion.java
@@ -3396,13 +3396,9 @@ public class DataRegion implements IDataRegionForQuery {
     }
   }
 
+  /* Be careful, the thread that calls this method may not hold the write lock!!*/
   public void releaseFlushTimeMap(long timePartitionId) {
-    writeLock("releaseFlushTimeMap");
-    try {
-      lastFlushTimeMap.removePartition(timePartitionId);
-    } finally {
-      writeUnlock();
-    }
+    lastFlushTimeMap.removePartition(timePartitionId);
   }
 
   public long getMemCost() {
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/HashLastFlushTimeMap.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/HashLastFlushTimeMap.java
index d8215aff763..3596cbd7fab 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/HashLastFlushTimeMap.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/HashLastFlushTimeMap.java
@@ -26,6 +26,7 @@ import org.slf4j.LoggerFactory;
 
 import java.util.HashMap;
 import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
 
 public class HashLastFlushTimeMap implements ILastFlushTimeMap {
 
@@ -58,7 +59,7 @@ public class HashLastFlushTimeMap implements ILastFlushTimeMap {
    * <p>It is used to separate sequence and unsequence data.
    */
   private final Map<Long, Map<String, Long>> partitionLatestFlushedTimeForEachDevice =
-      new HashMap<>();
+      new ConcurrentHashMap<>();
 
   /**
    * global mapping of device -> largest timestamp of the latest memtable to * be submitted to
@@ -68,13 +69,13 @@ public class HashLastFlushTimeMap implements ILastFlushTimeMap {
    *
    * <p>It is used to update last cache.
    */
-  private final Map<String, Long> globalLatestFlushedTimeForEachDevice = new HashMap<>();
+  private final Map<String, Long> globalLatestFlushedTimeForEachDevice = new ConcurrentHashMap<>();
 
   /** used for recovering flush time from tsfile resource */
   TsFileManager tsFileManager;
 
   /** record memory cost of map for each partitionId */
-  private final Map<Long, Long> memCostForEachPartition = new HashMap<>();
+  private final Map<Long, Long> memCostForEachPartition = new ConcurrentHashMap<>();
 
   public HashLastFlushTimeMap(TsFileManager tsFileManager) {
     this.tsFileManager = tsFileManager;