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 aafbb1c81c4 add interface for object file table size cache
aafbb1c81c4 is described below

commit aafbb1c81c4510af174ac7c0d761b985c947f0c8
Author: shuwenwei <[email protected]>
AuthorDate: Tue Jan 20 17:58:57 2026 +0800

    add interface for object file table size cache
---
 .../InformationSchemaContentSupplierFactory.java   |  4 ++
 .../DefaultTableDiskUsageCacheProvider.java        |  6 +-
 .../tableDiskUsageCache/TableDiskUsageCache.java   | 14 ++++
 .../TableDiskUsageCacheReader.java                 | 82 +++++++++++++++++-----
 .../EmptyObjectTableSizeCacheReader.java}          | 18 +++--
 .../IObjectTableSizeCacheReader.java}              | 17 +++--
 6 files changed, 111 insertions(+), 30 deletions(-)

diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/InformationSchemaContentSupplierFactory.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/InformationSchemaContentSupplierFactory.java
index ff06d787b5a..67b1aa8c1f9 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/InformationSchemaContentSupplierFactory.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/InformationSchemaContentSupplierFactory.java
@@ -1320,6 +1320,10 @@ public class InformationSchemaContentSupplierFactory {
       long start = System.nanoTime();
 
       try {
+        if (!currentDataRegionCacheReader.loadObjectFileTableSizeCache(start, 
maxRuntime)) {
+          return null;
+        }
+
         if (!currentDataRegionCacheReader.prepareCachedTsFileIDKeys(start, 
maxRuntime)) {
           return null;
         }
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/DefaultTableDiskUsageCacheProvider.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/DefaultTableDiskUsageCacheProvider.java
index 5cd17a6ef3e..87992040fb1 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/DefaultTableDiskUsageCacheProvider.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/DefaultTableDiskUsageCacheProvider.java
@@ -23,6 +23,10 @@ public class DefaultTableDiskUsageCacheProvider implements 
TableDiskUsageCachePr
 
   @Override
   public TableDiskUsageCache create() {
-    return new TableDiskUsageCache();
+    return Holder.INSTANCE;
+  }
+
+  private static class Holder {
+    private static final TableDiskUsageCache INSTANCE = new 
TableDiskUsageCache();
   }
 }
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 8a1a6112f33..b9901222216 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
@@ -22,6 +22,8 @@ package 
org.apache.iotdb.db.storageengine.dataregion.utils.tableDiskUsageCache;
 import org.apache.iotdb.commons.concurrent.IoTDBThreadPoolFactory;
 import org.apache.iotdb.commons.concurrent.ThreadName;
 import org.apache.iotdb.db.storageengine.dataregion.tsfile.TsFileID;
+import 
org.apache.iotdb.db.storageengine.dataregion.utils.tableDiskUsageCache.object.EmptyObjectTableSizeCacheReader;
+import 
org.apache.iotdb.db.storageengine.dataregion.utils.tableDiskUsageCache.object.IObjectTableSizeCacheReader;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -100,6 +102,11 @@ public class TableDiskUsageCache {
     queue.add(new ReplaceTsFileOperation(database, originTsFileID, 
newTsFileID));
   }
 
+  public void write(
+      String database, int regionId, String tableName, long timePartition, 
long objectFileSize) {
+    throw new UnsupportedOperationException();
+  }
+
   public CompletableFuture<TsFileTableSizeCacheReader> startRead(String 
database, int regionId) {
     StartReadOperation operation = new StartReadOperation(database, regionId);
     queue.add(operation);
@@ -111,6 +118,13 @@ public class TableDiskUsageCache {
     queue.add(operation);
   }
 
+  public CompletableFuture<IObjectTableSizeCacheReader> startReadObject(
+      String database, int regionId) {
+    return CompletableFuture.completedFuture(new 
EmptyObjectTableSizeCacheReader());
+  }
+
+  public void endReadObject(String database, int regionId) {}
+
   public void remove(String database, int regionId) {
     RemoveRegionOperation operation = new RemoveRegionOperation(database, 
regionId);
     queue.add(operation);
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/TableDiskUsageCacheReader.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/TableDiskUsageCacheReader.java
index 81f4b76b0d3..b2a61c7bf0c 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/TableDiskUsageCacheReader.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/TableDiskUsageCacheReader.java
@@ -24,6 +24,7 @@ import 
org.apache.iotdb.db.queryengine.plan.planner.memory.MemoryReservationMana
 import org.apache.iotdb.db.storageengine.dataregion.DataRegion;
 import org.apache.iotdb.db.storageengine.dataregion.tsfile.TsFileID;
 import 
org.apache.iotdb.db.storageengine.dataregion.utils.TableDiskUsageStatisticUtil;
+import 
org.apache.iotdb.db.storageengine.dataregion.utils.tableDiskUsageCache.object.IObjectTableSizeCacheReader;
 
 import org.apache.tsfile.utils.Pair;
 import org.apache.tsfile.utils.RamUsageEstimator;
@@ -43,8 +44,10 @@ public class TableDiskUsageCacheReader implements Closeable {
   private final DataRegion dataRegion;
   private final int regionId;
   private final Map<Long, TimePartitionTableSizeQueryContext> 
timePartitionQueryContexts;
-  private CompletableFuture<TsFileTableSizeCacheReader> future;
-  private TsFileTableSizeCacheReader cacheFileReader;
+  private CompletableFuture<TsFileTableSizeCacheReader> 
tsFileTableSizeCacheReaderFuture;
+  private TsFileTableSizeCacheReader tsFileTableSizeCacheReader;
+  private CompletableFuture<IObjectTableSizeCacheReader> 
objectTableSizeCacheReaderFuture;
+  private IObjectTableSizeCacheReader objectTableSizeCacheReader;
   private long acquiredMemory;
   private boolean tsFileIdKeysPrepared = false;
 
@@ -75,20 +78,52 @@ public class TableDiskUsageCacheReader implements Closeable 
{
             RamUsageEstimator.SHALLOW_SIZE_OF_HASHMAP_ENTRY));
   }
 
+  public boolean loadObjectFileTableSizeCache(long startTime, long maxRunTime) 
throws Exception {
+    if (this.objectTableSizeCacheReader == null) {
+      this.objectTableSizeCacheReaderFuture =
+          this.objectTableSizeCacheReaderFuture == null
+              ? TableDiskUsageCache.getInstance()
+                  .startReadObject(dataRegion.getDatabaseName(), regionId)
+              : objectTableSizeCacheReaderFuture;
+      do {
+        try {
+          if (objectTableSizeCacheReaderFuture.isDone()) {
+            this.objectTableSizeCacheReader = 
objectTableSizeCacheReaderFuture.get();
+            break;
+          } else {
+            Thread.sleep(1);
+          }
+        } catch (InterruptedException e) {
+          Thread.currentThread().interrupt();
+          return false;
+        }
+      } while (System.nanoTime() - startTime < maxRunTime);
+    }
+    if (this.objectTableSizeCacheReader == null) {
+      return false;
+    }
+    if (objectTableSizeCacheReader.loadObjectFileTableSize(
+        timePartitionQueryContexts, startTime, maxRunTime)) {
+      objectTableSizeCacheReader.close();
+      return true;
+    }
+    return false;
+  }
+
   public boolean prepareCachedTsFileIDKeys(long startTime, long maxRunTime) 
throws Exception {
     if (tsFileIdKeysPrepared) {
       return true;
     }
-    if (this.cacheFileReader == null) {
-      this.future =
-          this.future == null
+    if (this.tsFileTableSizeCacheReader == null) {
+      this.tsFileTableSizeCacheReaderFuture =
+          this.tsFileTableSizeCacheReaderFuture == null
               ? 
TableDiskUsageCache.getInstance().startRead(dataRegion.getDatabaseName(), 
regionId)
-              : future;
+              : tsFileTableSizeCacheReaderFuture;
       do {
         try {
-          if (future.isDone()) {
-            this.cacheFileReader = future.get();
-            this.cacheFileReader.openKeyFile();
+          if (tsFileTableSizeCacheReaderFuture.isDone()) {
+            this.tsFileTableSizeCacheReader = 
tsFileTableSizeCacheReaderFuture.get();
+            this.tsFileTableSizeCacheReader.openKeyFile();
             break;
           } else {
             Thread.sleep(1);
@@ -99,10 +134,11 @@ public class TableDiskUsageCacheReader implements 
Closeable {
         }
       } while (System.nanoTime() - startTime < maxRunTime);
     }
-    if (this.cacheFileReader == null) {
+    if (this.tsFileTableSizeCacheReader == null) {
       return false;
     }
-    if (cacheFileReader.readFromKeyFile(timePartitionQueryContexts, startTime, 
maxRunTime)) {
+    if (tsFileTableSizeCacheReader.readFromKeyFile(
+        timePartitionQueryContexts, startTime, maxRunTime)) {
       reserveMemory(
           timePartitionQueryContexts.values().stream()
               
.mapToLong(TimePartitionTableSizeQueryContext::ramBytesUsedOfTsFileIDOffsetMap)
@@ -142,9 +178,9 @@ public class TableDiskUsageCacheReader implements Closeable 
{
     if (this.tsFilesToQueryInCacheIterator == null) {
       
this.tsFilesToQueryInCache.sort(Comparator.comparingLong(Pair::getRight));
       this.tsFilesToQueryInCacheIterator = tsFilesToQueryInCache.iterator();
-      this.cacheFileReader.openValueFile();
+      this.tsFileTableSizeCacheReader.openValueFile();
     }
-    return cacheFileReader.readFromValueFile(
+    return tsFileTableSizeCacheReader.readFromValueFile(
         tsFilesToQueryInCacheIterator, timePartitionQueryContexts, startTime, 
maxRunTime);
   }
 
@@ -164,15 +200,23 @@ public class TableDiskUsageCacheReader implements 
Closeable {
 
   @Override
   public void close() throws IOException {
-    if (future != null) {
+    if (tsFileTableSizeCacheReader != null) {
+      tsFileTableSizeCacheReader.closeCurrentFile();
+      tsFileTableSizeCacheReader = null;
+    }
+    if (objectTableSizeCacheReader != null) {
+      objectTableSizeCacheReader.close();
+      objectTableSizeCacheReader = null;
+    }
+    if (objectTableSizeCacheReaderFuture != null) {
+      
TableDiskUsageCache.getInstance().endReadObject(dataRegion.getDatabaseName(), 
regionId);
+      objectTableSizeCacheReaderFuture = null;
+    }
+    if (tsFileTableSizeCacheReaderFuture != null) {
       TableDiskUsageCache.getInstance().endRead(dataRegion.getDatabaseName(), 
regionId);
-      future = null;
+      tsFileTableSizeCacheReaderFuture = null;
     }
     releaseMemory();
-    if (cacheFileReader != null) {
-      cacheFileReader.closeCurrentFile();
-      cacheFileReader = null;
-    }
   }
 
   private void releaseMemory() {
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/DefaultTableDiskUsageCacheProvider.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/object/EmptyObjectTableSizeCacheReader.java
similarity index 65%
copy from 
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/DefaultTableDiskUsageCacheProvider.java
copy to 
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/object/EmptyObjectTableSizeCacheReader.java
index 5cd17a6ef3e..d72ddc0212b 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/DefaultTableDiskUsageCacheProvider.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/object/EmptyObjectTableSizeCacheReader.java
@@ -17,12 +17,22 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.storageengine.dataregion.utils.tableDiskUsageCache;
+package 
org.apache.iotdb.db.storageengine.dataregion.utils.tableDiskUsageCache.object;
 
-public class DefaultTableDiskUsageCacheProvider implements 
TableDiskUsageCacheProvider {
+import 
org.apache.iotdb.db.storageengine.dataregion.utils.tableDiskUsageCache.TimePartitionTableSizeQueryContext;
+
+import java.util.Map;
+
+public class EmptyObjectTableSizeCacheReader implements 
IObjectTableSizeCacheReader {
 
   @Override
-  public TableDiskUsageCache create() {
-    return new TableDiskUsageCache();
+  public boolean loadObjectFileTableSize(
+      Map<Long, TimePartitionTableSizeQueryContext> timePartitionContexts,
+      long startTime,
+      long maxRunTime) {
+    return true;
   }
+
+  @Override
+  public void close() {}
 }
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/DefaultTableDiskUsageCacheProvider.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/object/IObjectTableSizeCacheReader.java
similarity index 69%
copy from 
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/DefaultTableDiskUsageCacheProvider.java
copy to 
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/object/IObjectTableSizeCacheReader.java
index 5cd17a6ef3e..bfea3db1297 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/DefaultTableDiskUsageCacheProvider.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/object/IObjectTableSizeCacheReader.java
@@ -17,12 +17,17 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.storageengine.dataregion.utils.tableDiskUsageCache;
+package 
org.apache.iotdb.db.storageengine.dataregion.utils.tableDiskUsageCache.object;
 
-public class DefaultTableDiskUsageCacheProvider implements 
TableDiskUsageCacheProvider {
+import 
org.apache.iotdb.db.storageengine.dataregion.utils.tableDiskUsageCache.TimePartitionTableSizeQueryContext;
 
-  @Override
-  public TableDiskUsageCache create() {
-    return new TableDiskUsageCache();
-  }
+import java.util.Map;
+
+public interface IObjectTableSizeCacheReader {
+  boolean loadObjectFileTableSize(
+      Map<Long, TimePartitionTableSizeQueryContext> timePartitionContexts,
+      long startTime,
+      long maxRunTime);
+
+  void close();
 }

Reply via email to