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(