This is an automated email from the ASF dual-hosted git repository.
shuwenwei pushed a commit to branch table_disk_usage_statistics_with_cache
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to
refs/heads/table_disk_usage_statistics_with_cache by this push:
new 3c63c68689d add abstract cache writer
3c63c68689d is described below
commit 3c63c68689d7781722f32329aca0adf8a19ab226
Author: shuwenwei <[email protected]>
AuthorDate: Wed Jan 21 10:41:40 2026 +0800
add abstract cache writer
---
.../AbstractTableSizeCacheWriter.java | 14 +++++++
.../tableDiskUsageCache/TableDiskUsageCache.java | 43 ++++++++++++++++------
2 files changed, 45 insertions(+), 12 deletions(-)
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/AbstractTableSizeCacheWriter.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/AbstractTableSizeCacheWriter.java
index 8e10932ebd6..99d1439419d 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/AbstractTableSizeCacheWriter.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/AbstractTableSizeCacheWriter.java
@@ -25,6 +25,7 @@ import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.util.List;
+import java.util.concurrent.CompletableFuture;
import java.util.concurrent.TimeUnit;
public abstract class AbstractTableSizeCacheWriter {
@@ -34,6 +35,7 @@ public abstract class AbstractTableSizeCacheWriter {
protected long lastWriteTimestamp = System.currentTimeMillis();
protected int currentIndexFileVersion = 0;
protected final File dir;
+ protected CompletableFuture<Void> removedFuture;
public AbstractTableSizeCacheWriter(String database, int regionId) {
this.regionId = regionId;
@@ -76,5 +78,17 @@ public abstract class AbstractTableSizeCacheWriter {
}
}
+ public int getActiveReaderNum() {
+ return activeReaderNum;
+ }
+
+ public void setRemovedFuture(CompletableFuture<Void> removedFuture) {
+ this.removedFuture = removedFuture;
+ }
+
+ public CompletableFuture<Void> getRemovedFuture() {
+ return removedFuture;
+ }
+
public abstract void close();
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/TableDiskUsageCache.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/TableDiskUsageCache.java
index b9901222216..9c6af6b3bc2 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/TableDiskUsageCache.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/TableDiskUsageCache.java
@@ -102,12 +102,13 @@ public class TableDiskUsageCache {
queue.add(new ReplaceTsFileOperation(database, originTsFileID,
newTsFileID));
}
- public void write(
- String database, int regionId, String tableName, long timePartition,
long objectFileSize) {
+ public void writeObjectDelta(
+ String database, int regionId, long timePartition, Map<String, Long>
tableObjectDeltaMap) {
throw new UnsupportedOperationException();
}
- public CompletableFuture<TsFileTableSizeCacheReader> startRead(String
database, int regionId) {
+ public CompletableFuture<TsFileTableSizeCacheReader> startRead(
+ String database, int regionId, boolean loadTsFileCache, boolean
loadObjectFileCache) {
StartReadOperation operation = new StartReadOperation(database, regionId);
queue.add(operation);
return operation.future;
@@ -155,7 +156,7 @@ public class TableDiskUsageCache {
public abstract void apply(TableDiskUsageCache tableDiskUsageCache) throws
IOException;
}
- private static class StartReadOperation extends Operation {
+ protected static class StartReadOperation extends Operation {
public CompletableFuture<TsFileTableSizeCacheReader> future = new
CompletableFuture<>();
public StartReadOperation(String database, int regionId) {
@@ -168,6 +169,13 @@ public class TableDiskUsageCache {
TsFileTableDiskUsageCacheWriter writer =
tableDiskUsageCache.writerMap.computeIfAbsent(
regionId, k -> new TsFileTableDiskUsageCacheWriter(database,
regionId));
+ if (writer.getRemovedFuture() != null) {
+ // region is removed
+ future.complete(
+ new TsFileTableSizeCacheReader(
+ 0, writer.getKeyFile(), 0, writer.getValueFile(), regionId));
+ return;
+ }
writer.flush();
writer.increaseActiveReaderNum();
future.complete(
@@ -190,10 +198,16 @@ public class TableDiskUsageCache {
@Override
public void apply(TableDiskUsageCache tableDiskUsageCache) throws
IOException {
- TsFileTableDiskUsageCacheWriter writer =
- tableDiskUsageCache.writerMap.computeIfAbsent(
- regionId, k -> new TsFileTableDiskUsageCacheWriter(database,
regionId));
+ TsFileTableDiskUsageCacheWriter writer =
tableDiskUsageCache.writerMap.get(regionId);
+ if (writer == null) {
+ return;
+ }
writer.decreaseActiveReaderNum();
+ if (writer.getRemovedFuture() != null) {
+ tableDiskUsageCache.writerMap.remove(regionId);
+ writer.setRemovedFuture(null);
+ writer.getRemovedFuture().complete(null);
+ }
}
}
@@ -246,11 +260,16 @@ public class TableDiskUsageCache {
@Override
public void apply(TableDiskUsageCache tableDiskUsageCache) throws
IOException {
- TsFileTableDiskUsageCacheWriter writer =
tableDiskUsageCache.writerMap.remove(regionId);
- if (writer != null) {
- writer.close();
- }
- future.complete(null);
+ tableDiskUsageCache.writerMap.computeIfPresent(
+ regionId,
+ (k, writer) -> {
+ writer.close();
+ if (writer.getActiveReaderNum() > 0) {
+ writer.setRemovedFuture(future);
+ return writer;
+ }
+ return null;
+ });
}
}