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