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 cd4837b29f7 fix bug
cd4837b29f7 is described below

commit cd4837b29f7d99ac74060a14d61f28f7310c109a
Author: shuwenwei <[email protected]>
AuthorDate: Fri Jan 23 18:47:33 2026 +0800

    fix bug
---
 .../InformationSchemaContentSupplierFactory.java   |  7 +++--
 .../db/storageengine/dataregion/DataRegion.java    |  4 +++
 .../utils/TableDiskUsageStatisticUtil.java         |  6 ++--
 .../AbstractTableSizeCacheWriter.java              | 11 +++++++
 .../DataRegionTableSizeQueryContext.java           | 20 ++++++-------
 .../tableDiskUsageCache/TableDiskUsageCache.java   |  8 +++--
 .../TableDiskUsageCacheReader.java                 | 23 ++++++--------
 .../TimePartitionTableSizeQueryContext.java        | 20 ++++++-------
 .../tsfile/TsFileTableDiskUsageCacheWriter.java    | 11 ++++---
 .../tsfile/TsFileTableSizeCacheReader.java         | 16 ++++++++--
 .../tsfile/TsFileTableSizeIndexFileWriter.java     | 35 ++++++++++++----------
 11 files changed, 93 insertions(+), 68 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 e4eb500319b..9349bc9dfdb 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
@@ -1192,7 +1192,6 @@ public class InformationSchemaContentSupplierFactory {
     private final Map<String, List<TTableInfo>> databaseTableInfoMap;
     private final Filter pushDownFilter;
     private final PaginationController paginationController;
-    private final OperatorContext operatorContext;
 
     private DataRegion currentDataRegion;
     private boolean currentDatabaseOnlyHasOneTable;
@@ -1212,7 +1211,6 @@ public class InformationSchemaContentSupplierFactory {
       this.dataTypes = dataTypes;
       this.pushDownFilter = pushDownFilter;
       this.paginationController = paginationController;
-      this.operatorContext = operatorContext;
       
AuthorityChecker.getAccessControl().checkUserGlobalSysPrivilege(userEntity);
       try (final ConfigNodeClient client =
           
ConfigNodeClientManager.getInstance().borrowClient(ConfigNodeInfo.CONFIG_REGION_ID))
 {
@@ -1290,7 +1288,7 @@ public class InformationSchemaContentSupplierFactory {
           row[0] = new Binary(dataRegion.getDatabaseName(), 
TSFileConfig.STRING_CHARSET);
           row[1] = new Binary(tTableInfo.getTableName(), 
TSFileConfig.STRING_CHARSET);
           row[2] = IoTDBDescriptor.getInstance().getConfig().getDataNodeId();
-          row[3] = Integer.parseInt(dataRegion.getDataRegionIdString());
+          row[3] = dataRegion.getDataRegionId().getId();
           row[4] = timePartition;
           if (!pushDownFilter.satisfyRow(0, row)) {
             continue;
@@ -1341,6 +1339,9 @@ public class InformationSchemaContentSupplierFactory {
           return null;
         }
         return buildTsBlock();
+      } catch (InterruptedException e) {
+        Thread.currentThread().interrupt();
+        return null;
       } catch (Exception e) {
         throw new IoTDBRuntimeException(
             e.getMessage(), e, 
TSStatusCode.INTERNAL_SERVER_ERROR.getStatusCode());
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/DataRegion.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/DataRegion.java
index 305f1a044a6..44a54c769e3 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/DataRegion.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/DataRegion.java
@@ -4402,6 +4402,10 @@ public class DataRegion implements IDataRegionForQuery {
     return dataRegionIdString;
   }
 
+  public DataRegionId getDataRegionId() {
+    return dataRegionId;
+  }
+
   /**
    * Get the storageGroupPath with dataRegionId.
    *
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 f5b11e446ef..a15d0d8ea27 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
@@ -77,7 +77,7 @@ public class TableDiskUsageStatisticUtil extends 
DiskUsageStatisticUtil {
       return false;
     }
     String table = 
tableSizeQueryContext.getTableSizeResultMap().keySet().iterator().next();
-    tableSizeQueryContext.updateResult(table, tsFileResource.getTsFileSize());
+    tableSizeQueryContext.updateResult(table, tsFileResource.getTsFileSize(), 
false);
     TableDiskUsageCache.getInstance()
         .write(
             database,
@@ -97,7 +97,7 @@ public class TableDiskUsageStatisticUtil extends 
DiskUsageStatisticUtil {
     if (tsFileMetadata.getTableMetadataIndexNodeMap().size() == 1) {
       String satisfiedTable =
           
tsFileMetadata.getTableMetadataIndexNodeMap().keySet().iterator().next();
-      tableSizeQueryContext.updateResult(satisfiedTable, 
tsFileResource.getTsFileSize());
+      tableSizeQueryContext.updateResult(satisfiedTable, 
tsFileResource.getTsFileSize(), false);
       TableDiskUsageCache.getInstance()
           .write(
               database,
@@ -132,7 +132,7 @@ public class TableDiskUsageStatisticUtil extends 
DiskUsageStatisticUtil {
       nextTable = iterator.hasNext() ? iterator.next() : null;
       long tableSize =
           calculateTableSize(tableOffsetMap, tsFileMetadata, reader, 
currentTable, nextTable);
-      tableSizeQueryContext.updateResult(currentTable, tableSize);
+      tableSizeQueryContext.updateResult(currentTable, tableSize, false);
       tsFileTableSizeMap.put(currentTable, tableSize);
       currentTable = nextTable;
     }
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 1ffcdeb7c68..84a017f474d 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
@@ -21,6 +21,9 @@ package 
org.apache.iotdb.db.storageengine.dataregion.utils.tableDiskUsageCache;
 
 import org.apache.iotdb.db.storageengine.StorageEngine;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 import java.io.File;
 import java.io.IOException;
 import java.nio.file.Files;
@@ -28,6 +31,8 @@ import java.util.List;
 import java.util.concurrent.TimeUnit;
 
 public abstract class AbstractTableSizeCacheWriter {
+  protected static final Logger logger =
+      LoggerFactory.getLogger(AbstractTableSizeCacheWriter.class);
   protected static final String TEMP_CACHE_FILE_SUBFIX = ".tmp";
   protected final int regionId;
   protected long previousCompactionTimestamp = System.currentTimeMillis();
@@ -52,6 +57,8 @@ public abstract class AbstractTableSizeCacheWriter {
           Files.deleteIfExists(file.toPath());
         }
       } catch (Exception e) {
+        logger.warn(
+            "Failed to delete old version table size cache file {}", 
file.getAbsolutePath());
       }
     }
   }
@@ -62,6 +69,10 @@ public abstract class AbstractTableSizeCacheWriter {
     }
   }
 
+  public void markWritten() {
+    lastWriteTimestamp = System.currentTimeMillis();
+  }
+
   public abstract boolean needCompact();
 
   public abstract void compact();
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/DataRegionTableSizeQueryContext.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/DataRegionTableSizeQueryContext.java
index 8e5ec508253..4a53faa797d 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/DataRegionTableSizeQueryContext.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/DataRegionTableSizeQueryContext.java
@@ -23,7 +23,6 @@ import 
org.apache.iotdb.db.queryengine.execution.fragment.FragmentInstanceContex
 import 
org.apache.iotdb.db.queryengine.plan.planner.memory.MemoryReservationManager;
 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;
@@ -31,7 +30,7 @@ import java.util.LinkedHashMap;
 import java.util.Map;
 import java.util.Optional;
 
-public class DataRegionTableSizeQueryContext implements Accountable {
+public class DataRegionTableSizeQueryContext {
 
   private final boolean needAllData;
 
@@ -39,8 +38,8 @@ public class DataRegionTableSizeQueryContext implements 
Accountable {
       timePartitionTableSizeQueryContextMap = new LinkedHashMap<>();
   private int objectFileNum = 0;
 
-  private long previousUsedTimePartition;
-  private TimePartitionTableSizeQueryContext previousUsedTimePartitionContext;
+  private long previousUsedTimePartition = Long.MIN_VALUE;
+  private TimePartitionTableSizeQueryContext previousUsedTimePartitionContext 
= null;
 
   private final Optional<FragmentInstanceContext> fragmentInstanceContext;
   private long acquiredMemory;
@@ -85,6 +84,10 @@ public class DataRegionTableSizeQueryContext implements 
Accountable {
     }
   }
 
+  /**
+   * useTimePartition must be called before accessing 
previousUsedTimePartitionContext. When it
+   * returns false, the caller must skip any operation on the context.
+   */
   private boolean useTimePartition(long currentTimePartition) {
     if (currentTimePartition != previousUsedTimePartition
         || previousUsedTimePartitionContext == null) {
@@ -117,7 +120,7 @@ public class DataRegionTableSizeQueryContext implements 
Accountable {
     long totalSize = 0;
     for (TimePartitionTableSizeQueryContext timePartitionContext :
         timePartitionTableSizeQueryContextMap.values()) {
-      totalSize += timePartitionContext.getObjectFileSize();
+      totalSize += 
timePartitionContext.getObjectFileSizeOfCurrentTimePartition();
     }
     return totalSize;
   }
@@ -155,7 +158,7 @@ public class DataRegionTableSizeQueryContext implements 
Accountable {
   }
 
   public void releaseMemory() {
-    if (!fragmentInstanceContext.isPresent()) {
+    if (!fragmentInstanceContext.isPresent() || acquiredMemory <= 0) {
       return;
     }
     fragmentInstanceContext
@@ -164,9 +167,4 @@ public class DataRegionTableSizeQueryContext implements 
Accountable {
         .releaseMemoryCumulatively(acquiredMemory);
     acquiredMemory = 0;
   }
-
-  @Override
-  public long ramBytesUsed() {
-    return 0;
-  }
 }
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 7555cba1171..7e7cdb94d9f 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
@@ -72,7 +72,7 @@ public class TableDiskUsageCache {
         } catch (InterruptedException e) {
           return;
         } catch (Exception e) {
-          LOGGER.error("Meet exception when apply TableDiskUsageCache.", e);
+          LOGGER.error("Meet exception when apply TableDiskUsageCache 
operation.", e);
         }
       }
     } finally {
@@ -86,6 +86,10 @@ public class TableDiskUsageCache {
     counter = 0;
   }
 
+  /**
+   * Any unrecoverable error in a single writer will mark the whole 
TableDiskUsageCache as failed
+   * and disable further operations.
+   */
   protected void failedToRecover(Exception e) {
     failedToRecover = true;
     LOGGER.error("Failed to recover TableDiskUsageCache", e);
@@ -262,8 +266,8 @@ public class TableDiskUsageCache {
           (k, writer) -> {
             writer.decreaseActiveReaderNum();
             if (writer.getRemovedFuture() != null) {
-              writer.setRemovedFuture(null);
               writer.getRemovedFuture().complete(null);
+              writer.setRemovedFuture(null);
               return null;
             }
             return writer;
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 155671de97f..cdd72fc064c 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
@@ -80,20 +80,15 @@ public class TableDiskUsageCacheReader implements Closeable 
{
                   .startRead(dataRegion.getDatabaseName(), regionId, true, 
true)
               : this.prepareReaderFuture;
       do {
-        try {
-          if (prepareReaderFuture.isDone()) {
-            Pair<TsFileTableSizeCacheReader, IObjectTableSizeCacheReader> 
readerPair =
-                prepareReaderFuture.get();
-            this.tsFileTableSizeCacheReader = readerPair.left;
-            this.tsFileTableSizeCacheReader.openKeyFile();
-            this.objectTableSizeCacheReader = readerPair.right;
-            break;
-          } else {
-            Thread.sleep(1);
-          }
-        } catch (InterruptedException e) {
-          Thread.currentThread().interrupt();
-          return false;
+        if (prepareReaderFuture.isDone()) {
+          Pair<TsFileTableSizeCacheReader, IObjectTableSizeCacheReader> 
readerPair =
+              prepareReaderFuture.get();
+          this.tsFileTableSizeCacheReader = readerPair.left;
+          this.tsFileTableSizeCacheReader.openKeyFile();
+          this.objectTableSizeCacheReader = readerPair.right;
+          break;
+        } else {
+          Thread.sleep(1);
         }
       } while (System.nanoTime() - startTime < maxRunTime);
     }
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 242bc65d9ec..19d3f023679 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
@@ -30,8 +30,15 @@ import java.util.Map;
 public class TimePartitionTableSizeQueryContext implements Accountable {
   private static final long SHALLOW_SIZE =
       
RamUsageEstimator.shallowSizeOf(TimePartitionTableSizeQueryContext.class);
+
+  /**
+   * tableSizeResultMap serves as both: 1) result container 2) table filter 
when needAllData is
+   * false
+   */
   private final Map<String, Long> tableSizeResultMap;
-  Map<TsFileID, Long> tsFileIDOffsetInValueFileMap;
+
+  // tsFileIDOffsetInValueFileMap should be null at first
+  private Map<TsFileID, Long> tsFileIDOffsetInValueFileMap;
 
   public TimePartitionTableSizeQueryContext(Map<String, Long> 
tableSizeResultMap) {
     this.tableSizeResultMap = tableSizeResultMap;
@@ -54,10 +61,6 @@ public class TimePartitionTableSizeQueryContext implements 
Accountable {
     }
   }
 
-  public void updateResult(String table, long size) {
-    tableSizeResultMap.computeIfPresent(table, (k, v) -> v + size);
-  }
-
   public void updateResult(String table, long size, boolean needAllData) {
     if (needAllData) {
       tableSizeResultMap.compute(table, (k, v) -> (v == null ? 0 : v) + size);
@@ -70,16 +73,11 @@ public class TimePartitionTableSizeQueryContext implements 
Accountable {
     return tableSizeResultMap;
   }
 
-  public boolean hasCachedTsFileID(TsFileID tsFileID) {
-    return tsFileIDOffsetInValueFileMap != null
-        && tsFileIDOffsetInValueFileMap.containsKey(tsFileID);
-  }
-
   public Long getCachedTsFileIdOffset(TsFileID tsFileID) {
     return tsFileIDOffsetInValueFileMap == null ? null : 
tsFileIDOffsetInValueFileMap.get(tsFileID);
   }
 
-  public long getObjectFileSize() {
+  public long getObjectFileSizeOfCurrentTimePartition() {
     long size = 0;
     for (Long value : tableSizeResultMap.values()) {
       size += value;
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/tsfile/TsFileTableDiskUsageCacheWriter.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/tsfile/TsFileTableDiskUsageCacheWriter.java
index 58011497a66..d4ef7ad5a95 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/tsfile/TsFileTableDiskUsageCacheWriter.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/tsfile/TsFileTableDiskUsageCacheWriter.java
@@ -29,8 +29,6 @@ import 
org.apache.iotdb.db.storageengine.dataregion.utils.tableDiskUsageCache.Ab
 import 
org.apache.iotdb.db.storageengine.dataregion.utils.tableDiskUsageCache.TimePartitionTableSizeQueryContext;
 
 import org.apache.tsfile.utils.Pair;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 import java.io.File;
 import java.io.IOException;
@@ -45,8 +43,6 @@ import java.util.concurrent.TimeUnit;
 import java.util.stream.Stream;
 
 public class TsFileTableDiskUsageCacheWriter extends 
AbstractTableSizeCacheWriter {
-  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;
@@ -132,10 +128,12 @@ public class TsFileTableDiskUsageCacheWriter extends 
AbstractTableSizeCacheWrite
 
   public void write(TsFileID tsFileID, Map<String, Long> tableSizeMap) throws 
IOException {
     tsFileTableSizeIndexFileWriter.write(tsFileID, tableSizeMap);
+    markWritten();
   }
 
   public void write(TsFileID originTsFileID, TsFileID newTsFileID) throws 
IOException {
     tsFileTableSizeIndexFileWriter.write(originTsFileID, newTsFileID);
+    markWritten();
   }
 
   @Override
@@ -182,6 +180,7 @@ public class TsFileTableDiskUsageCacheWriter extends 
AbstractTableSizeCacheWrite
         }
       }
     } catch (IOException e) {
+      logger.error("Failed to read key file during compaction", e);
       return;
     } finally {
       cacheFileReader.closeCurrentFile();
@@ -230,8 +229,8 @@ public class TsFileTableDiskUsageCacheWriter extends 
AbstractTableSizeCacheWrite
       // replace
       File targetKeyFile = generateKeyFile(currentIndexFileVersion + 1, false);
       File targetValueFile = generateValueFile(currentIndexFileVersion + 1, 
false);
-      targetFileWriter.getKeyFile().renameTo(targetKeyFile);
-      targetFileWriter.getValueFile().renameTo(targetValueFile);
+      Files.move(targetFileWriter.getKeyFile().toPath(), 
targetKeyFile.toPath());
+      Files.move(targetFileWriter.getValueFile().toPath(), 
targetValueFile.toPath());
     } catch (Exception e) {
       logger.error("Failed to execute compaction for tsfile table size cache 
file", e);
     } finally {
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/tsfile/TsFileTableSizeCacheReader.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/tsfile/TsFileTableSizeCacheReader.java
index d387032da18..c659502d05b 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/tsfile/TsFileTableSizeCacheReader.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/tsfile/TsFileTableSizeCacheReader.java
@@ -28,6 +28,8 @@ import org.apache.iotdb.rpc.TSStatusCode;
 import org.apache.tsfile.utils.Pair;
 import org.apache.tsfile.utils.ReadWriteForEncodingUtils;
 import org.apache.tsfile.utils.ReadWriteIOUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import java.io.File;
 import java.io.IOException;
@@ -44,6 +46,8 @@ import java.util.Map;
 
 public class TsFileTableSizeCacheReader {
 
+  private static final Logger logger = 
LoggerFactory.getLogger(TsFileTableSizeCacheReader.class);
+
   private final File keyFile;
   private final long keyFileLength;
   private final File valueFile;
@@ -94,7 +98,8 @@ public class TsFileTableSizeCacheReader {
         offsetsInKeyFile.add(keyFileEntry.offset);
         lastCompleteKeyOffsets.add(lastCompleteEntryEndOffsetInKeyFile);
       }
-    } catch (Exception ignored) {
+    } catch (Exception e) {
+      logger.warn("Failed to read table tsfile size cache file {}", keyFile, 
e);
     } finally {
       closeCurrentFile();
     }
@@ -121,7 +126,14 @@ public class TsFileTableSizeCacheReader {
         keyFileTruncateSize = endOffsetInKeyFile;
         valueFileTruncateSize = inputStream.position();
       }
-    } catch (Exception ignored) {
+    } catch (Exception e) {
+      logger.warn(
+          "Failed to read table tsfile size cache {} after position: {} and {} 
after position: {}",
+          keyFile,
+          valueFile,
+          keyFileTruncateSize,
+          valueFileTruncateSize,
+          e);
     } finally {
       closeCurrentFile();
     }
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/tsfile/TsFileTableSizeIndexFileWriter.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/tsfile/TsFileTableSizeIndexFileWriter.java
index 99fcc9308b9..06db0869a08 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/tsfile/TsFileTableSizeIndexFileWriter.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/tsfile/TsFileTableSizeIndexFileWriter.java
@@ -94,17 +94,8 @@ public class TsFileTableSizeIndexFileWriter {
   }
 
   public void write(TsFileID tsFileID, Map<String, Long> tableSizeMap) throws 
IOException {
-    if (keyFileOutputStream == null) {
-      keyFileOutputStream = new FileOutputStream(currentKeyIndexFile, true);
-      keyFileSize = currentKeyIndexFile.length();
-      keyBufferedOutputStream = new BufferedOutputStream(keyFileOutputStream);
-    }
-    if (valueFileOutputStream == null) {
-      valueFileOutputStream = new FileOutputStream(currentValueIndexFile, 
true);
-      valueFileSize = currentValueIndexFile.length();
-      valueBufferedOutputStream = new 
BufferedOutputStream(valueFileOutputStream);
-    }
-
+    ensureKeyFileOpened();
+    ensureValueFileOpened();
     long valueOffset = valueFileSize;
     valueFileSize +=
         ReadWriteForEncodingUtils.writeVarInt(tableSizeMap.size(), 
valueBufferedOutputStream);
@@ -121,11 +112,7 @@ public class TsFileTableSizeIndexFileWriter {
   }
 
   public void write(TsFileID originTsFileID, TsFileID newTsFileID) throws 
IOException {
-    if (keyFileOutputStream == null) {
-      keyFileOutputStream = new FileOutputStream(currentKeyIndexFile, true);
-      keyFileSize = currentKeyIndexFile.length();
-      keyBufferedOutputStream = new BufferedOutputStream(keyFileOutputStream);
-    }
+    ensureKeyFileOpened();
     keyFileSize += ReadWriteIOUtils.write(KEY_FILE_RECORD_TYPE_REDIRECT, 
keyBufferedOutputStream);
     keyFileSize += ReadWriteIOUtils.write(newTsFileID.timePartitionId, 
keyBufferedOutputStream);
     keyFileSize += ReadWriteIOUtils.write(newTsFileID.timestamp, 
keyBufferedOutputStream);
@@ -137,6 +124,22 @@ public class TsFileTableSizeIndexFileWriter {
         ReadWriteIOUtils.write(originTsFileID.compactionVersion, 
keyBufferedOutputStream);
   }
 
+  private void ensureKeyFileOpened() throws IOException {
+    if (keyFileOutputStream == null) {
+      keyFileOutputStream = new FileOutputStream(currentKeyIndexFile, true);
+      keyFileSize = currentKeyIndexFile.length();
+      keyBufferedOutputStream = new BufferedOutputStream(keyFileOutputStream);
+    }
+  }
+
+  private void ensureValueFileOpened() throws IOException {
+    if (valueFileOutputStream == null) {
+      valueFileOutputStream = new FileOutputStream(currentValueIndexFile, 
true);
+      valueFileSize = currentValueIndexFile.length();
+      valueBufferedOutputStream = new 
BufferedOutputStream(valueFileOutputStream);
+    }
+  }
+
   public void flush() throws IOException {
     if (valueBufferedOutputStream != null) {
       valueBufferedOutputStream.flush();

Reply via email to