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;
+          });
     }
   }
 

Reply via email to