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 dfc79290caf use ServiceLoader
dfc79290caf is described below

commit dfc79290caf53ef596b758f4ced48659b0121c10
Author: shuwenwei <[email protected]>
AuthorDate: Tue Jan 20 16:21:55 2026 +0800

    use ServiceLoader
---
 .../storageengine/dataregion/tsfile/TsFileID.java  |  2 +
 .../dataregion/tsfile/TsFileResource.java          |  2 +-
 .../utils/TableDiskUsageStatisticUtil.java         |  4 --
 .../DefaultTableDiskUsageCacheProvider.java        | 28 ++++++++++
 .../tableDiskUsageCache/TableDiskUsageCache.java   | 63 ++++++++++++++--------
 .../TableDiskUsageCacheProvider.java               | 24 +++++++++
 .../TableDiskUsageCacheReader.java                 | 41 +++++++++++++-
 .../TimePartitionTableSizeQueryContext.java        | 29 +++++++++-
 ...r.java => TsFileTableDiskUsageCacheWriter.java} | 17 +++---
 .../TsFileTableSizeCacheReader.java                |  4 +-
 .../TsFileTableSizeCacheWriter.java                |  4 +-
 .../utils/TsFileTableSizeCacheWriterTest.java      | 14 ++---
 .../apache/iotdb/db/utils/EnvironmentUtils.java    |  2 +
 13 files changed, 184 insertions(+), 50 deletions(-)

diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/tsfile/TsFileID.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/tsfile/TsFileID.java
index c9656382e3d..5c77fa78f54 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/tsfile/TsFileID.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/tsfile/TsFileID.java
@@ -26,6 +26,8 @@ import static 
org.apache.tsfile.utils.FilePathUtils.splitTsFilePath;
 
 public class TsFileID {
 
+  public static final long SHALLOW_SIZE = TsFileID.SHALLOW_SIZE;
+
   public final int regionId;
   public final long timePartitionId;
   public final long timestamp;
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/tsfile/TsFileResource.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/tsfile/TsFileResource.java
index b84cce9e8d2..4a0f1e4b72c 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/tsfile/TsFileResource.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/tsfile/TsFileResource.java
@@ -101,7 +101,7 @@ public class TsFileResource implements PersistentResource, 
Cloneable {
   private static final long INSTANCE_SIZE =
       RamUsageEstimator.shallowSizeOfInstance(TsFileResource.class)
           + RamUsageEstimator.shallowSizeOfInstance(TsFileRepairStatus.class)
-          + RamUsageEstimator.shallowSizeOfInstance(TsFileID.class);
+          + TsFileID.SHALLOW_SIZE;
 
   private static final Logger LOGGER = 
LoggerFactory.getLogger(TsFileResource.class);
 
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/TableDiskUsageStatisticUtil.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/TableDiskUsageStatisticUtil.java
index 2f0e5b48045..f5b11e446ef 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/TableDiskUsageStatisticUtil.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/TableDiskUsageStatisticUtil.java
@@ -86,10 +86,6 @@ public class TableDiskUsageStatisticUtil extends 
DiskUsageStatisticUtil {
     return true;
   }
 
-  public List<Pair<TsFileID, Long>> getTsFilesToQueryInCache() {
-    return tsFilesToQueryInCache;
-  }
-
   @Override
   protected void calculateNextFile(TsFileResource tsFileResource, 
TsFileSequenceReader reader)
       throws IOException {
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
new file mode 100644
index 00000000000..5cd17a6ef3e
--- /dev/null
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/DefaultTableDiskUsageCacheProvider.java
@@ -0,0 +1,28 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.iotdb.db.storageengine.dataregion.utils.tableDiskUsageCache;
+
+public class DefaultTableDiskUsageCacheProvider implements 
TableDiskUsageCacheProvider {
+
+  @Override
+  public TableDiskUsageCache create() {
+    return 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 5b216876f07..8a1a6112f33 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
@@ -29,6 +29,7 @@ import org.slf4j.LoggerFactory;
 import java.io.IOException;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.ServiceLoader;
 import java.util.concurrent.BlockingQueue;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.LinkedBlockingQueue;
@@ -36,19 +37,19 @@ import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.TimeUnit;
 
 public class TableDiskUsageCache {
-  private static final Logger LOGGER = 
LoggerFactory.getLogger(TableDiskUsageCache.class);
-  private final BlockingQueue<Operation> queue = new LinkedBlockingQueue<>();
-  private final Map<Integer, TableDiskUsageCacheWriter> writerMap = new 
HashMap<>();
-  private final ScheduledExecutorService scheduledExecutorService;
+  protected static final Logger LOGGER = 
LoggerFactory.getLogger(TableDiskUsageCache.class);
+  protected final BlockingQueue<Operation> queue = new LinkedBlockingQueue<>();
+  protected final Map<Integer, TsFileTableDiskUsageCacheWriter> writerMap = 
new HashMap<>();
+  protected final ScheduledExecutorService scheduledExecutorService;
 
-  private TableDiskUsageCache() {
+  protected TableDiskUsageCache() {
     scheduledExecutorService =
         IoTDBThreadPoolFactory.newSingleThreadScheduledExecutor(
             ThreadName.FILE_TIME_INDEX_RECORD.getName());
     scheduledExecutorService.submit(this::run);
   }
 
-  private void run() {
+  protected void run() {
     try {
       while (!Thread.currentThread().isInterrupted()) {
         try {
@@ -66,13 +67,13 @@ public class TableDiskUsageCache {
         }
       }
     } finally {
-      writerMap.values().forEach(TableDiskUsageCacheWriter::close);
+      writerMap.values().forEach(TsFileTableDiskUsageCacheWriter::close);
     }
   }
 
-  private void checkAndMayCompact(long maxRunTime) {
+  protected void checkAndMayCompact(long maxRunTime) {
     long startTime = System.currentTimeMillis();
-    for (TableDiskUsageCacheWriter writer : writerMap.values()) {
+    for (TsFileTableDiskUsageCacheWriter writer : writerMap.values()) {
       if (System.currentTimeMillis() - startTime > maxRunTime) {
         break;
       }
@@ -82,8 +83,8 @@ public class TableDiskUsageCache {
     }
   }
 
-  private void checkAndMayCloseIdleWriter() {
-    for (TableDiskUsageCacheWriter writer : writerMap.values()) {
+  protected void checkAndMayCloseIdleWriter() {
+    for (TsFileTableDiskUsageCacheWriter writer : writerMap.values()) {
       writer.closeIfIdle();
     }
   }
@@ -96,7 +97,7 @@ public class TableDiskUsageCache {
   }
 
   public void write(String database, TsFileID originTsFileID, TsFileID 
newTsFileID) {
-    queue.add(new ReplaceOperation(database, originTsFileID, newTsFileID));
+    queue.add(new ReplaceTsFileOperation(database, originTsFileID, 
newTsFileID));
   }
 
   public CompletableFuture<TsFileTableSizeCacheReader> startRead(String 
database, int regionId) {
@@ -121,7 +122,14 @@ public class TableDiskUsageCache {
     }
   }
 
-  public abstract static class Operation {
+  public void close() {
+    if (scheduledExecutorService != null) {
+      scheduledExecutorService.shutdownNow();
+    }
+    writerMap.values().forEach(TsFileTableDiskUsageCacheWriter::close);
+  }
+
+  protected abstract static class Operation {
     protected final String database;
     protected final int regionId;
 
@@ -143,9 +151,9 @@ public class TableDiskUsageCache {
     @Override
     public void apply(TableDiskUsageCache tableDiskUsageCache) throws 
IOException {
       try {
-        TableDiskUsageCacheWriter writer =
+        TsFileTableDiskUsageCacheWriter writer =
             tableDiskUsageCache.writerMap.computeIfAbsent(
-                regionId, k -> new TableDiskUsageCacheWriter(database, 
regionId));
+                regionId, k -> new TsFileTableDiskUsageCacheWriter(database, 
regionId));
         writer.flush();
         writer.increaseActiveReaderNum();
         future.complete(
@@ -168,9 +176,9 @@ public class TableDiskUsageCache {
 
     @Override
     public void apply(TableDiskUsageCache tableDiskUsageCache) throws 
IOException {
-      TableDiskUsageCacheWriter writer =
+      TsFileTableDiskUsageCacheWriter writer =
           tableDiskUsageCache.writerMap.computeIfAbsent(
-              regionId, k -> new TableDiskUsageCacheWriter(database, 
regionId));
+              regionId, k -> new TsFileTableDiskUsageCacheWriter(database, 
regionId));
       writer.decreaseActiveReaderNum();
     }
   }
@@ -190,16 +198,16 @@ public class TableDiskUsageCache {
     public void apply(TableDiskUsageCache tableDiskUsageCache) throws 
IOException {
       tableDiskUsageCache
           .writerMap
-          .computeIfAbsent(regionId, k -> new 
TableDiskUsageCacheWriter(database, regionId))
+          .computeIfAbsent(regionId, k -> new 
TsFileTableDiskUsageCacheWriter(database, regionId))
           .write(tsFileID, tableSizeMap);
     }
   }
 
-  private static class ReplaceOperation extends Operation {
+  private static class ReplaceTsFileOperation extends Operation {
     private final TsFileID originTsFileID;
     private final TsFileID newTsFileID;
 
-    public ReplaceOperation(String database, TsFileID originTsFileID, TsFileID 
newTsFileID) {
+    public ReplaceTsFileOperation(String database, TsFileID originTsFileID, 
TsFileID newTsFileID) {
       super(database, originTsFileID.regionId);
       this.originTsFileID = originTsFileID;
       this.newTsFileID = newTsFileID;
@@ -207,7 +215,7 @@ public class TableDiskUsageCache {
 
     @Override
     public void apply(TableDiskUsageCache tableDiskUsageCache) throws 
IOException {
-      TableDiskUsageCacheWriter writer = 
tableDiskUsageCache.writerMap.get(regionId);
+      TsFileTableDiskUsageCacheWriter writer = 
tableDiskUsageCache.writerMap.get(regionId);
       if (writer != null) {
         writer.write(originTsFileID, newTsFileID);
       }
@@ -224,7 +232,7 @@ public class TableDiskUsageCache {
 
     @Override
     public void apply(TableDiskUsageCache tableDiskUsageCache) throws 
IOException {
-      TableDiskUsageCacheWriter writer = 
tableDiskUsageCache.writerMap.remove(regionId);
+      TsFileTableDiskUsageCacheWriter writer = 
tableDiskUsageCache.writerMap.remove(regionId);
       if (writer != null) {
         writer.close();
       }
@@ -239,6 +247,15 @@ public class TableDiskUsageCache {
   private static class InstanceHolder {
     private InstanceHolder() {}
 
-    private static final TableDiskUsageCache INSTANCE = new 
TableDiskUsageCache();
+    private static final TableDiskUsageCache INSTANCE = loadInstance();
+
+    private static TableDiskUsageCache loadInstance() {
+      ServiceLoader<TableDiskUsageCacheProvider> loader =
+          ServiceLoader.load(TableDiskUsageCacheProvider.class);
+      for (TableDiskUsageCacheProvider provider : loader) {
+        return provider.create();
+      }
+      return new DefaultTableDiskUsageCacheProvider().create();
+    }
   }
 }
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/TableDiskUsageCacheProvider.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/TableDiskUsageCacheProvider.java
new file mode 100644
index 00000000000..cba896ed781
--- /dev/null
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/TableDiskUsageCacheProvider.java
@@ -0,0 +1,24 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.iotdb.db.storageengine.dataregion.utils.tableDiskUsageCache;
+
+public interface TableDiskUsageCacheProvider {
+  TableDiskUsageCache create();
+}
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 ad801dedaf9..81f4b76b0d3 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
@@ -20,11 +20,13 @@
 package org.apache.iotdb.db.storageengine.dataregion.utils.tableDiskUsageCache;
 
 import 
org.apache.iotdb.db.queryengine.execution.fragment.FragmentInstanceContext;
+import 
org.apache.iotdb.db.queryengine.plan.planner.memory.MemoryReservationManager;
 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.tsfile.utils.Pair;
+import org.apache.tsfile.utils.RamUsageEstimator;
 
 import java.io.Closeable;
 import java.io.IOException;
@@ -43,6 +45,8 @@ public class TableDiskUsageCacheReader implements Closeable {
   private final Map<Long, TimePartitionTableSizeQueryContext> 
timePartitionQueryContexts;
   private CompletableFuture<TsFileTableSizeCacheReader> future;
   private TsFileTableSizeCacheReader cacheFileReader;
+  private long acquiredMemory;
+  private boolean tsFileIdKeysPrepared = false;
 
   private final Iterator<Map.Entry<Long, TimePartitionTableSizeQueryContext>> 
timePartitionIterator;
 
@@ -64,9 +68,17 @@ public class TableDiskUsageCacheReader implements Closeable {
     this.currentDatabaseOnlyHasOneTable = databaseHasOnlyOneTable;
     this.context = context;
     this.timePartitionIterator = 
timePartitionQueryContexts.entrySet().iterator();
+    reserveMemory(
+        RamUsageEstimator.sizeOfMapWithKnownShallowSize(
+            timePartitionQueryContexts,
+            RamUsageEstimator.SHALLOW_SIZE_OF_HASHMAP,
+            RamUsageEstimator.SHALLOW_SIZE_OF_HASHMAP_ENTRY));
   }
 
   public boolean prepareCachedTsFileIDKeys(long startTime, long maxRunTime) 
throws Exception {
+    if (tsFileIdKeysPrepared) {
+      return true;
+    }
     if (this.cacheFileReader == null) {
       this.future =
           this.future == null
@@ -90,7 +102,15 @@ public class TableDiskUsageCacheReader implements Closeable 
{
     if (this.cacheFileReader == null) {
       return false;
     }
-    return cacheFileReader.readFromKeyFile(timePartitionQueryContexts, 
startTime, maxRunTime);
+    if (cacheFileReader.readFromKeyFile(timePartitionQueryContexts, startTime, 
maxRunTime)) {
+      reserveMemory(
+          timePartitionQueryContexts.values().stream()
+              
.mapToLong(TimePartitionTableSizeQueryContext::ramBytesUsedOfTsFileIDOffsetMap)
+              .sum());
+      tsFileIdKeysPrepared = true;
+      return true;
+    }
+    return false;
   }
 
   public boolean calculateNextFile() {
@@ -132,15 +152,34 @@ public class TableDiskUsageCacheReader implements 
Closeable {
     return dataRegion;
   }
 
+  private void reserveMemory(long size) {
+    if (context.isPresent()) {
+      MemoryReservationManager memoryReservationContext =
+          context.get().getMemoryReservationContext();
+      memoryReservationContext.reserveMemoryCumulatively(size);
+      memoryReservationContext.reserveMemoryImmediately();
+      acquiredMemory += size;
+    }
+  }
+
   @Override
   public void close() throws IOException {
     if (future != null) {
       TableDiskUsageCache.getInstance().endRead(dataRegion.getDatabaseName(), 
regionId);
       future = null;
     }
+    releaseMemory();
     if (cacheFileReader != null) {
       cacheFileReader.closeCurrentFile();
       cacheFileReader = null;
     }
   }
+
+  private void releaseMemory() {
+    if (!context.isPresent()) {
+      return;
+    }
+    
context.get().getMemoryReservationContext().releaseMemoryCumulatively(acquiredMemory);
+    acquiredMemory = 0;
+  }
 }
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/TimePartitionTableSizeQueryContext.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/TimePartitionTableSizeQueryContext.java
index bc7f8271d99..9c5f1e35352 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/TimePartitionTableSizeQueryContext.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/TimePartitionTableSizeQueryContext.java
@@ -21,10 +21,15 @@ package 
org.apache.iotdb.db.storageengine.dataregion.utils.tableDiskUsageCache;
 
 import org.apache.iotdb.db.storageengine.dataregion.tsfile.TsFileID;
 
+import org.apache.tsfile.utils.Accountable;
+import org.apache.tsfile.utils.RamUsageEstimator;
+
 import java.util.HashMap;
 import java.util.Map;
 
-public class TimePartitionTableSizeQueryContext {
+public class TimePartitionTableSizeQueryContext implements Accountable {
+  private static final long SHALLOW_SIZE =
+      
RamUsageEstimator.shallowSizeOf(TimePartitionTableSizeQueryContext.class);
   private final Map<String, Long> tableSizeResultMap;
   Map<TsFileID, Long> tsFileIDOffsetInValueFileMap;
 
@@ -65,4 +70,26 @@ public class TimePartitionTableSizeQueryContext {
   public Long getCachedTsFileIdOffset(TsFileID tsFileID) {
     return tsFileIDOffsetInValueFileMap == null ? null : 
tsFileIDOffsetInValueFileMap.get(tsFileID);
   }
+
+  @Override
+  public long ramBytesUsed() {
+    return SHALLOW_SIZE
+        + RamUsageEstimator.sizeOfMapWithKnownShallowSize(
+            tableSizeResultMap,
+            RamUsageEstimator.SHALLOW_SIZE_OF_HASHMAP,
+            RamUsageEstimator.SHALLOW_SIZE_OF_HASHMAP_ENTRY)
+        + ramBytesUsedOfTsFileIDOffsetMap();
+  }
+
+  // tsFileIDOffsetInValueFileMap should be null af first
+  public long ramBytesUsedOfTsFileIDOffsetMap() {
+    if (tsFileIDOffsetInValueFileMap == null) {
+      return 0;
+    }
+    return RamUsageEstimator.SHALLOW_SIZE_OF_HASHMAP
+        + tsFileIDOffsetInValueFileMap.size()
+            * (RamUsageEstimator.SHALLOW_SIZE_OF_HASHMAP_ENTRY
+                + Long.BYTES
+                + TsFileID.SHALLOW_SIZE);
+  }
 }
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/TableDiskUsageCacheWriter.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/TsFileTableDiskUsageCacheWriter.java
similarity index 97%
rename from 
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/TableDiskUsageCacheWriter.java
rename to 
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/TsFileTableDiskUsageCacheWriter.java
index dd6bd887111..fd1c79b06ed 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/TableDiskUsageCacheWriter.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/TsFileTableDiskUsageCacheWriter.java
@@ -42,8 +42,9 @@ import java.util.Map;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Stream;
 
-public class TableDiskUsageCacheWriter {
-  private static final Logger logger = 
LoggerFactory.getLogger(TableDiskUsageCacheWriter.class);
+public class TsFileTableDiskUsageCacheWriter {
+  private static final Logger logger =
+      LoggerFactory.getLogger(TsFileTableDiskUsageCacheWriter.class);
   private static final String TSFILE_CACHE_KEY_FILENAME_PREFIX = 
"TableSizeKeyFile_";
   private static final String TSFILE_CACHE_VALUE_FILENAME_PREFIX = 
"TableSizeValueFile_";
   public static final int KEY_FILE_OFFSET_RECORD_LENGTH = 5 * Long.BYTES + 1;
@@ -60,7 +61,7 @@ public class TableDiskUsageCacheWriter {
   private final File dir;
   private TsFileTableSizeCacheWriter tsFileTableSizeCacheWriter;
 
-  public TableDiskUsageCacheWriter(String database, int regionId) {
+  public TsFileTableDiskUsageCacheWriter(String database, int regionId) {
     this.regionId = regionId;
     this.dir = StorageEngine.getDataRegionSystemDir(database, regionId + "");
     recoverTsFileTableSizeIndexFile(true);
@@ -176,7 +177,7 @@ public class TableDiskUsageCacheWriter {
     int fileNum = tsFileManager.size(true) + tsFileManager.size(false);
     int estimatedEntryNumInCacheFile = (int) (keyFileLength() / 
KEY_FILE_OFFSET_RECORD_LENGTH);
     int delta = estimatedEntryNumInCacheFile - fileNum;
-    return delta > 0.2 * estimatedEntryNumInCacheFile || delta >= 1000;
+    return delta >= 1000;
   }
 
   public void compact() {
@@ -318,11 +319,9 @@ public class TableDiskUsageCacheWriter {
   }
 
   public void decreaseActiveReaderNum() {
-    activeReaderNum--;
-  }
-
-  public int getActiveReaderNum() {
-    return activeReaderNum;
+    if (activeReaderNum > 0) {
+      activeReaderNum--;
+    }
   }
 
   public void removeFiles() {}
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/TsFileTableSizeCacheReader.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/TsFileTableSizeCacheReader.java
index 7895cee705a..74127625057 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/TsFileTableSizeCacheReader.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/TsFileTableSizeCacheReader.java
@@ -177,10 +177,10 @@ public class TsFileTableSizeCacheReader {
     TsFileID tsFileID =
         new TsFileID(regionId, timePartition, timestamp, fileVersion, 
compactionVersion);
     KeyFileEntry keyFileEntry;
-    if (type == TableDiskUsageCacheWriter.KEY_FILE_RECORD_TYPE_OFFSET) {
+    if (type == TsFileTableDiskUsageCacheWriter.KEY_FILE_RECORD_TYPE_OFFSET) {
       long offset = ReadWriteIOUtils.readLong(inputStream);
       keyFileEntry = new KeyFileEntry(tsFileID, offset);
-    } else if (type == 
TableDiskUsageCacheWriter.KEY_FILE_RECORD_TYPE_REDIRECT) {
+    } else if (type == 
TsFileTableDiskUsageCacheWriter.KEY_FILE_RECORD_TYPE_REDIRECT) {
       long originTimestamp = ReadWriteIOUtils.readLong(inputStream);
       long originFileVersion = ReadWriteIOUtils.readLong(inputStream);
       long originCompactionVersion = ReadWriteIOUtils.readLong(inputStream);
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/TsFileTableSizeCacheWriter.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/TsFileTableSizeCacheWriter.java
index 29287eb2af2..b073a5f2204 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/TsFileTableSizeCacheWriter.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/TsFileTableSizeCacheWriter.java
@@ -33,8 +33,8 @@ import java.nio.channels.FileChannel;
 import java.nio.file.StandardOpenOption;
 import java.util.Map;
 
-import static 
org.apache.iotdb.db.storageengine.dataregion.utils.tableDiskUsageCache.TableDiskUsageCacheWriter.KEY_FILE_RECORD_TYPE_OFFSET;
-import static 
org.apache.iotdb.db.storageengine.dataregion.utils.tableDiskUsageCache.TableDiskUsageCacheWriter.KEY_FILE_RECORD_TYPE_REDIRECT;
+import static 
org.apache.iotdb.db.storageengine.dataregion.utils.tableDiskUsageCache.TsFileTableDiskUsageCacheWriter.KEY_FILE_RECORD_TYPE_OFFSET;
+import static 
org.apache.iotdb.db.storageengine.dataregion.utils.tableDiskUsageCache.TsFileTableDiskUsageCacheWriter.KEY_FILE_RECORD_TYPE_REDIRECT;
 
 public class TsFileTableSizeCacheWriter {
   private final int regionId;
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/utils/TsFileTableSizeCacheWriterTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/utils/TsFileTableSizeCacheWriterTest.java
index 53cf08ab747..6517ff466d8 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/utils/TsFileTableSizeCacheWriterTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/utils/TsFileTableSizeCacheWriterTest.java
@@ -27,7 +27,7 @@ import 
org.apache.iotdb.db.storageengine.dataregion.DataRegion;
 import 
org.apache.iotdb.db.storageengine.dataregion.compaction.AbstractCompactionTest;
 import org.apache.iotdb.db.storageengine.dataregion.tsfile.TsFileManager;
 import org.apache.iotdb.db.storageengine.dataregion.tsfile.TsFileResource;
-import 
org.apache.iotdb.db.storageengine.dataregion.utils.tableDiskUsageCache.TableDiskUsageCacheWriter;
+import 
org.apache.iotdb.db.storageengine.dataregion.utils.tableDiskUsageCache.TsFileTableDiskUsageCacheWriter;
 import 
org.apache.iotdb.db.storageengine.dataregion.utils.tableDiskUsageCache.TsFileTableSizeCacheReader;
 
 import org.apache.tsfile.exception.write.WriteProcessException;
@@ -62,8 +62,8 @@ public class TsFileTableSizeCacheWriterTest extends 
AbstractCompactionTest {
     StorageEngine.getInstance().setDataRegion(new DataRegionId(0), dataRegion);
     TsFileManager tsFileManager = new TsFileManager("root.test", "0", "");
     Mockito.when(dataRegion.getTsFileManager()).thenReturn(tsFileManager);
-    TableDiskUsageCacheWriter writer =
-        new TableDiskUsageCacheWriter(dataRegion.getDatabaseName(), 0);
+    TsFileTableDiskUsageCacheWriter writer =
+        new TsFileTableDiskUsageCacheWriter(dataRegion.getDatabaseName(), 0);
     File oldKeyFile = writer.getKeyFile();
     File oldValueFile = writer.getValueFile();
     Assert.assertEquals("TableSizeKeyFile_0", oldKeyFile.getName());
@@ -92,8 +92,8 @@ public class TsFileTableSizeCacheWriterTest extends 
AbstractCompactionTest {
     StorageEngine.getInstance().setDataRegion(new DataRegionId(0), dataRegion);
     TsFileManager tsFileManager = new TsFileManager("root.test", "0", "");
     Mockito.when(dataRegion.getTsFileManager()).thenReturn(tsFileManager);
-    TableDiskUsageCacheWriter writer =
-        new TableDiskUsageCacheWriter(dataRegion.getDatabaseName(), 0);
+    TsFileTableDiskUsageCacheWriter writer =
+        new TsFileTableDiskUsageCacheWriter(dataRegion.getDatabaseName(), 0);
     File oldKeyFile = writer.getKeyFile();
     File oldValueFile = writer.getValueFile();
     Assert.assertEquals("TableSizeKeyFile_0", oldKeyFile.getName());
@@ -140,8 +140,8 @@ public class TsFileTableSizeCacheWriterTest extends 
AbstractCompactionTest {
     StorageEngine.getInstance().setDataRegion(new DataRegionId(0), dataRegion);
     TsFileManager tsFileManager = new TsFileManager("root.test", "0", "");
     Mockito.when(dataRegion.getTsFileManager()).thenReturn(tsFileManager);
-    TableDiskUsageCacheWriter writer =
-        new TableDiskUsageCacheWriter(dataRegion.getDatabaseName(), 0);
+    TsFileTableDiskUsageCacheWriter writer =
+        new TsFileTableDiskUsageCacheWriter(dataRegion.getDatabaseName(), 0);
     File oldKeyFile = writer.getKeyFile();
     File oldValueFile = writer.getValueFile();
     Assert.assertEquals("TableSizeKeyFile_0", oldKeyFile.getName());
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/utils/EnvironmentUtils.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/utils/EnvironmentUtils.java
index ebd4d3b7ae0..0de593390f4 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/utils/EnvironmentUtils.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/utils/EnvironmentUtils.java
@@ -39,6 +39,7 @@ import 
org.apache.iotdb.db.storageengine.dataregion.flush.FlushManager;
 import 
org.apache.iotdb.db.storageengine.dataregion.read.control.FileReaderManager;
 import 
org.apache.iotdb.db.storageengine.dataregion.read.control.QueryResourceManager;
 import 
org.apache.iotdb.db.storageengine.dataregion.tsfile.timeindex.FileTimeIndexCacheRecorder;
+import 
org.apache.iotdb.db.storageengine.dataregion.utils.tableDiskUsageCache.TableDiskUsageCache;
 import org.apache.iotdb.db.storageengine.dataregion.wal.WALManager;
 import 
org.apache.iotdb.db.storageengine.dataregion.wal.recover.WALRecoverManager;
 import org.apache.iotdb.db.storageengine.rescon.disk.TierManager;
@@ -228,6 +229,7 @@ public class EnvironmentUtils {
       cleanDir(path);
     }
     FileTimeIndexCacheRecorder.getInstance().close();
+    TableDiskUsageCache.getInstance().close();
     // delete system info
     cleanDir(config.getSystemDir());
     // delete query

Reply via email to