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