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 3a91c805a56 refactor
3a91c805a56 is described below
commit 3a91c805a56c186d3c6e0f5d6103b9d40aad34a8
Author: shuwenwei <[email protected]>
AuthorDate: Thu Jan 22 18:57:32 2026 +0800
refactor
---
.../AbstractTableSizeCacheWriter.java | 4 ++++
.../tableDiskUsageCache/TableDiskUsageCache.java | 27 +++++++++++++++++-----
.../TableDiskUsageCacheReader.java | 1 +
.../object/IObjectTableSizeCacheReader.java | 2 +-
.../TsFileTableDiskUsageCacheWriter.java | 11 ++++-----
.../{ => tsfile}/TsFileTableSizeCacheReader.java | 3 ++-
.../TsFileTableSizeIndexFileWriter.java | 6 ++---
.../utils/TsFileTableSizeCacheWriterTest.java | 4 ++--
8 files changed, 39 insertions(+), 19 deletions(-)
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 37137ba1959..1ffcdeb7c68 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
@@ -40,6 +40,10 @@ public abstract class AbstractTableSizeCacheWriter {
this.dir = StorageEngine.getDataRegionSystemDir(database, regionId + "");
}
+ protected void failedToRecover(Exception e) {
+ TableDiskUsageCache.getInstance().failedToRecover(e);
+ }
+
protected void deleteOldVersionFiles(int maxVersion, String prefix,
List<File> files) {
for (File file : files) {
try {
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 081d5d116e7..132d39a3a74 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
@@ -24,6 +24,8 @@ 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.apache.iotdb.db.storageengine.dataregion.utils.tableDiskUsageCache.tsfile.TsFileTableDiskUsageCacheWriter;
+import
org.apache.iotdb.db.storageengine.dataregion.utils.tableDiskUsageCache.tsfile.TsFileTableSizeCacheReader;
import org.apache.tsfile.utils.Pair;
import org.slf4j.Logger;
@@ -44,6 +46,7 @@ public class TableDiskUsageCache {
protected final BlockingQueue<Operation> queue = new LinkedBlockingQueue<>();
protected final Map<Integer, DataRegionTableSizeCacheWriter> writerMap = new
HashMap<>();
protected final ScheduledExecutorService scheduledExecutorService;
+ protected volatile boolean failedToRecover = false;
protected TableDiskUsageCache() {
scheduledExecutorService =
@@ -75,6 +78,11 @@ public class TableDiskUsageCache {
}
}
+ protected void failedToRecover(Exception e) {
+ failedToRecover = true;
+ LOGGER.error("Failed to recover TableDiskUsageCache", e);
+ }
+
protected void checkAndMaySyncObjectDeltaToFile() {}
protected void checkAndMayCompact(long maxRunTime) {
@@ -102,11 +110,11 @@ public class TableDiskUsageCache {
if (tableSizeMap == null || tableSizeMap.isEmpty()) {
return;
}
- queue.add(new WriteOperation(database, tsFileID, tableSizeMap));
+ addOperationToQueue(new WriteOperation(database, tsFileID, tableSizeMap));
}
public void write(String database, TsFileID originTsFileID, TsFileID
newTsFileID) {
- queue.add(new ReplaceTsFileOperation(database, originTsFileID,
newTsFileID));
+ addOperationToQueue(new ReplaceTsFileOperation(database, originTsFileID,
newTsFileID));
}
public void writeObjectDelta(
@@ -118,23 +126,23 @@ public class TableDiskUsageCache {
String database, int regionId, boolean readTsFileCache, boolean
readObjectFileCache) {
StartReadOperation operation =
new StartReadOperation(database, regionId, readTsFileCache,
readObjectFileCache);
- queue.add(operation);
+ addOperationToQueue(operation);
return operation.future;
}
public void endRead(String database, int regionId) {
EndReadOperation operation = new EndReadOperation(database, regionId);
- queue.add(operation);
+ addOperationToQueue(operation);
}
public void registerRegion(String database, int regionId) {
RegisterRegionOperation operation = new RegisterRegionOperation(database,
regionId);
- queue.add(operation);
+ addOperationToQueue(operation);
}
public void remove(String database, int regionId) {
RemoveRegionOperation operation = new RemoveRegionOperation(database,
regionId);
- queue.add(operation);
+ addOperationToQueue(operation);
try {
operation.future.get(5, TimeUnit.SECONDS);
} catch (InterruptedException e) {
@@ -143,6 +151,13 @@ public class TableDiskUsageCache {
}
}
+ protected void addOperationToQueue(Operation operation) {
+ if (failedToRecover) {
+ return;
+ }
+ queue.add(operation);
+ }
+
public void close() {
if (scheduledExecutorService != null) {
scheduledExecutorService.shutdownNow();
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 4c591f27266..7c6b8b713b1 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
@@ -25,6 +25,7 @@ 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.iotdb.db.storageengine.dataregion.utils.tableDiskUsageCache.tsfile.TsFileTableSizeCacheReader;
import org.apache.tsfile.utils.Pair;
import org.apache.tsfile.utils.RamUsageEstimator;
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/object/IObjectTableSizeCacheReader.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/object/IObjectTableSizeCacheReader.java
index cc38307f093..2953f37fc1b 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/object/IObjectTableSizeCacheReader.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/object/IObjectTableSizeCacheReader.java
@@ -23,7 +23,7 @@ import
org.apache.iotdb.db.storageengine.dataregion.utils.tableDiskUsageCache.Da
import java.io.IOException;
-public interface IObjectTableSizeCacheReader {
+public interface IObjectTableSizeCacheReader extends AutoCloseable {
boolean loadObjectFileTableSize(
DataRegionTableSizeQueryContext dataRegionContext, long startTime, long
maxRunTime)
throws IOException;
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/TsFileTableDiskUsageCacheWriter.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/tsfile/TsFileTableDiskUsageCacheWriter.java
similarity index 97%
rename from
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/TsFileTableDiskUsageCacheWriter.java
rename to
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/tsfile/TsFileTableDiskUsageCacheWriter.java
index 90c54526404..58011497a66 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/TsFileTableDiskUsageCacheWriter.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/tsfile/TsFileTableDiskUsageCacheWriter.java
@@ -17,7 +17,7 @@
* under the License.
*/
-package org.apache.iotdb.db.storageengine.dataregion.utils.tableDiskUsageCache;
+package
org.apache.iotdb.db.storageengine.dataregion.utils.tableDiskUsageCache.tsfile;
import org.apache.iotdb.commons.consensus.DataRegionId;
import org.apache.iotdb.db.storageengine.StorageEngine;
@@ -25,6 +25,8 @@ import
org.apache.iotdb.db.storageengine.dataregion.DataRegion;
import org.apache.iotdb.db.storageengine.dataregion.tsfile.TsFileID;
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.AbstractTableSizeCacheWriter;
+import
org.apache.iotdb.db.storageengine.dataregion.utils.tableDiskUsageCache.TimePartitionTableSizeQueryContext;
import org.apache.tsfile.utils.Pair;
import org.slf4j.Logger;
@@ -123,7 +125,8 @@ public class TsFileTableDiskUsageCacheWriter extends
AbstractTableSizeCacheWrite
this.tsFileTableSizeIndexFileWriter =
new TsFileTableSizeIndexFileWriter(
regionId, currentKeyIndexFile, currentValueIndexFile,
needRecover);
- } catch (IOException ignored) {
+ } catch (IOException e) {
+ failedToRecover(e);
}
}
@@ -229,13 +232,9 @@ public class TsFileTableDiskUsageCacheWriter extends
AbstractTableSizeCacheWrite
File targetValueFile = generateValueFile(currentIndexFileVersion + 1,
false);
targetFileWriter.getKeyFile().renameTo(targetKeyFile);
targetFileWriter.getValueFile().renameTo(targetValueFile);
- this.tsFileTableSizeIndexFileWriter.close();
} catch (Exception e) {
logger.error("Failed to execute compaction for tsfile table size cache
file", e);
} finally {
- if (tsFileTableSizeIndexFileWriter != null) {
- tsFileTableSizeIndexFileWriter.close();
- }
if (targetFileWriter != null) {
targetFileWriter.close();
}
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/tsfile/TsFileTableSizeCacheReader.java
similarity index 98%
rename from
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/TsFileTableSizeCacheReader.java
rename to
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/tsfile/TsFileTableSizeCacheReader.java
index 351c2b10e9f..d387032da18 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/tsfile/TsFileTableSizeCacheReader.java
@@ -17,10 +17,11 @@
* under the License.
*/
-package org.apache.iotdb.db.storageengine.dataregion.utils.tableDiskUsageCache;
+package
org.apache.iotdb.db.storageengine.dataregion.utils.tableDiskUsageCache.tsfile;
import org.apache.iotdb.commons.exception.IoTDBRuntimeException;
import org.apache.iotdb.db.storageengine.dataregion.tsfile.TsFileID;
+import
org.apache.iotdb.db.storageengine.dataregion.utils.tableDiskUsageCache.DataRegionTableSizeQueryContext;
import org.apache.iotdb.db.utils.MmapUtil;
import org.apache.iotdb.rpc.TSStatusCode;
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/TsFileTableSizeIndexFileWriter.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/tsfile/TsFileTableSizeIndexFileWriter.java
similarity index 97%
rename from
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/TsFileTableSizeIndexFileWriter.java
rename to
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/tsfile/TsFileTableSizeIndexFileWriter.java
index a5f6aba555d..99fcc9308b9 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/TsFileTableSizeIndexFileWriter.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/tsfile/TsFileTableSizeIndexFileWriter.java
@@ -17,7 +17,7 @@
* under the License.
*/
-package org.apache.iotdb.db.storageengine.dataregion.utils.tableDiskUsageCache;
+package
org.apache.iotdb.db.storageengine.dataregion.utils.tableDiskUsageCache.tsfile;
import org.apache.iotdb.db.storageengine.dataregion.tsfile.TsFileID;
@@ -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.TsFileTableDiskUsageCacheWriter.KEY_FILE_RECORD_TYPE_OFFSET;
-import static
org.apache.iotdb.db.storageengine.dataregion.utils.tableDiskUsageCache.TsFileTableDiskUsageCacheWriter.KEY_FILE_RECORD_TYPE_REDIRECT;
+import static
org.apache.iotdb.db.storageengine.dataregion.utils.tableDiskUsageCache.tsfile.TsFileTableDiskUsageCacheWriter.KEY_FILE_RECORD_TYPE_OFFSET;
+import static
org.apache.iotdb.db.storageengine.dataregion.utils.tableDiskUsageCache.tsfile.TsFileTableDiskUsageCacheWriter.KEY_FILE_RECORD_TYPE_REDIRECT;
public class TsFileTableSizeIndexFileWriter {
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 6517ff466d8..e65be56db80 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,8 +27,8 @@ 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.TsFileTableDiskUsageCacheWriter;
-import
org.apache.iotdb.db.storageengine.dataregion.utils.tableDiskUsageCache.TsFileTableSizeCacheReader;
+import
org.apache.iotdb.db.storageengine.dataregion.utils.tableDiskUsageCache.tsfile.TsFileTableDiskUsageCacheWriter;
+import
org.apache.iotdb.db.storageengine.dataregion.utils.tableDiskUsageCache.tsfile.TsFileTableSizeCacheReader;
import org.apache.tsfile.exception.write.WriteProcessException;
import org.junit.After;