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

haonan 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 be06e62d239 Fix fail to read memTable ids from the wal file (#12132)
be06e62d239 is described below

commit be06e62d23991396931a8513221fa8a67fde65ab
Author: Haonan <[email protected]>
AuthorDate: Wed Mar 6 21:38:02 2024 +0800

    Fix fail to read memTable ids from the wal file (#12132)
---
 .../org/apache/iotdb/db/service/IoTDBShutdownHook.java  |  2 +-
 .../apache/iotdb/db/storageengine/StorageEngine.java    |  2 +-
 .../db/storageengine/dataregion/wal/WALManager.java     | 17 ++++++++++++++++-
 .../storageengine/dataregion/wal/buffer/WALBuffer.java  |  8 ++++++--
 4 files changed, 24 insertions(+), 5 deletions(-)

diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/IoTDBShutdownHook.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/IoTDBShutdownHook.java
index bdea1bab52a..214142a9e13 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/IoTDBShutdownHook.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/IoTDBShutdownHook.java
@@ -78,7 +78,7 @@ public class IoTDBShutdownHook extends Thread {
         .equals(ConsensusFactory.RATIS_CONSENSUS)) {
       StorageEngine.getInstance().syncCloseAllProcessor();
     }
-    WALManager.getInstance().deleteOutdatedFilesInWALNodes();
+    WALManager.getInstance().syncDeleteOutdatedFilesInWALNodes();
 
     // We did this work because the RatisConsensus recovery mechanism is 
different from other
     // consensus algorithms, which will replace the underlying storage engine 
based on its
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/StorageEngine.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/StorageEngine.java
index 025b891fc5a..fce7f95b6c8 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/StorageEngine.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/StorageEngine.java
@@ -631,7 +631,7 @@ public class StorageEngine implements IService {
   public void operateFlush(TFlushReq req) {
     if (req.storageGroups == null) {
       StorageEngine.getInstance().syncCloseAllProcessor();
-      WALManager.getInstance().deleteOutdatedFilesInWALNodes();
+      WALManager.getInstance().syncDeleteOutdatedFilesInWALNodes();
     } else {
       for (String storageGroup : req.storageGroups) {
         if (req.isSeq == null) {
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/wal/WALManager.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/wal/WALManager.java
index a36e16037ea..2268b745121 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/wal/WALManager.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/wal/WALManager.java
@@ -30,6 +30,7 @@ import org.apache.iotdb.commons.utils.TestOnly;
 import org.apache.iotdb.consensus.ConsensusFactory;
 import org.apache.iotdb.db.conf.IoTDBConfig;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
+import org.apache.iotdb.db.exception.runtime.StorageEngineFailureException;
 import org.apache.iotdb.db.service.metrics.WritingMetrics;
 import 
org.apache.iotdb.db.storageengine.dataregion.wal.allocation.ElasticStrategy;
 import 
org.apache.iotdb.db.storageengine.dataregion.wal.allocation.FirstCreateStrategy;
@@ -44,7 +45,9 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import java.util.List;
+import java.util.concurrent.ExecutionException;
 import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Future;
 import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicLong;
@@ -165,7 +168,7 @@ public class WALManager implements IService {
     }
   }
 
-  public void deleteOutdatedFilesInWALNodes() {
+  protected void deleteOutdatedFilesInWALNodes() {
     if (config.getWalMode() == WALMode.DISABLE) {
       return;
     }
@@ -262,6 +265,18 @@ public class WALManager implements IService {
         walDeleteThread, this::deleteOutdatedFiles, initDelayMs, periodMs, 
TimeUnit.MILLISECONDS);
   }
 
+  public void syncDeleteOutdatedFilesInWALNodes() {
+    Future<?> future = 
walDeleteThread.submit(this::deleteOutdatedFilesInWALNodes);
+    try {
+      future.get();
+    } catch (ExecutionException e) {
+      throw new StorageEngineFailureException("Failed to delete outdated wal 
file", e);
+    } catch (InterruptedException e) {
+      Thread.currentThread().interrupt();
+      throw new StorageEngineFailureException("Failed to delete outdated wal 
file", e);
+    }
+  }
+
   @TestOnly
   public void clear() {
     totalDiskUsage.set(0);
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/wal/buffer/WALBuffer.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/wal/buffer/WALBuffer.java
index d6deb613e6f..8e6f18a713a 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/wal/buffer/WALBuffer.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/wal/buffer/WALBuffer.java
@@ -723,8 +723,12 @@ public class WALBuffer extends AbstractWALBuffer {
                     file, FileChannel.open(file.toPath(), 
StandardOpenOption.READ))
                 .getMemTablesId();
           } catch (IOException e) {
-            logger.error("Fail to read memTable ids from the wal file {}.", 
id);
-            return new HashSet<>();
+            logger.warn(
+                "Fail to read memTable ids from the wal file {} of wal node 
{}.",
+                id,
+                identifier,
+                e);
+            return Collections.emptySet();
           }
         });
   }

Reply via email to