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 f5a21622474 Fix empty wal file deletion (#12377)
f5a21622474 is described below

commit f5a2162247461812429d5a275c783b3e9ac73b85
Author: Alan Choo <[email protected]>
AuthorDate: Fri Apr 19 21:03:24 2024 +0800

    Fix empty wal file deletion (#12377)
---
 .../db/storageengine/dataregion/wal/buffer/WALBuffer.java    |  2 +-
 .../db/storageengine/dataregion/wal/io/WALMetaData.java      |  1 +
 .../iotdb/db/storageengine/dataregion/wal/node/WALNode.java  | 12 +++++++-----
 3 files changed, 9 insertions(+), 6 deletions(-)

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 8e6f18a713a..1b4b6735ec2 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
@@ -712,7 +712,7 @@ public class WALBuffer extends AbstractWALBuffer {
 
   public Set<Long> getMemTableIds(long fileVersionId) {
     if (fileVersionId >= currentWALFileVersion) {
-      return Collections.emptySet();
+      return null;
     }
     return memTableIdsOfWal.computeIfAbsent(
         fileVersionId,
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/wal/io/WALMetaData.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/wal/io/WALMetaData.java
index b8cb4dfef13..9ca700a62f7 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/wal/io/WALMetaData.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/wal/io/WALMetaData.java
@@ -138,6 +138,7 @@ public class WALMetaData implements SerializedSize {
     channel.read(metadataBuf, position - metadataSize);
     metadataBuf.flip();
     WALMetaData metaData = WALMetaData.deserialize(metadataBuf);
+    // versions before V1.3, should recover memTable ids from entries
     if (metaData.memTablesId.isEmpty()) {
       int offset = Byte.BYTES;
       for (int size : metaData.buffersSize) {
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/wal/node/WALNode.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/wal/node/WALNode.java
index 758081d012e..26ffa6064f4 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/wal/node/WALNode.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/wal/node/WALNode.java
@@ -325,13 +325,15 @@ public class WALNode implements IWALNode {
       // calculate effective information ratio
       long costOfActiveMemTables = 
checkpointManager.getTotalCostOfActiveMemTables();
       MemTableInfo oldestUnpinnedMemTableInfo = 
checkpointManager.getOldestUnpinnedMemTableInfo();
+      long avgFileSize =
+          getFileNum() != 0
+              ? getTotalSize() / getFileNum()
+              : config.getWalFileSizeThresholdInByte();
       long totalCost =
           oldestUnpinnedMemTableInfo == null
               ? costOfActiveMemTables
-              : (getCurrentWALFileVersion()
-                      - oldestUnpinnedMemTableInfo.getFirstFileVersionId()
-                      + 1)
-                  * config.getWalFileSizeThresholdInByte();
+              : (getCurrentWALFileVersion() - 
oldestUnpinnedMemTableInfo.getFirstFileVersionId())
+                  * avgFileSize;
       if (totalCost == 0) {
         return;
       }
@@ -576,7 +578,7 @@ public class WALNode implements IWALNode {
       // If this set is empty, there is a case where WalEntry has been logged 
but not persisted,
       // because WalEntry is persisted asynchronously. In this case, the file 
cannot be deleted
       // directly, so it is considered active
-      if (memTableIdsOfCurrentWal == null || 
memTableIdsOfCurrentWal.isEmpty()) {
+      if (memTableIdsOfCurrentWal == null) {
         return true;
       }
       return !Collections.disjoint(

Reply via email to