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 a07aeafc6a4a0..4721d27eff71c 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 @@ -888,7 +888,8 @@ private Callable recoverFilesInPartition( Callable asyncRecoverTask = null; for (TsFileResource tsFileResource : resourceList) { tsFileManager.add(tsFileResource, isSeq); - if (fileTimeIndexMap.containsKey(tsFileResource.getTsFileID())) { + if (fileTimeIndexMap.containsKey(tsFileResource.getTsFileID()) + && tsFileResource.resourceFileExists()) { tsFileResource.setTimeIndex(fileTimeIndexMap.get(tsFileResource.getTsFileID())); tsFileResource.setStatus(TsFileResourceStatus.NORMAL); resourceListForAsyncRecover.add(tsFileResource); diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/TsFileResourceUtils.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/TsFileResourceUtils.java index 4ab7f5f109b6c..05ee0d256a1ae 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/TsFileResourceUtils.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/TsFileResourceUtils.java @@ -19,10 +19,13 @@ package org.apache.iotdb.db.storageengine.dataregion.utils; +import org.apache.iotdb.db.conf.IoTDBConfig; +import org.apache.iotdb.db.conf.IoTDBDescriptor; import org.apache.iotdb.db.storageengine.dataregion.compaction.execute.utils.CompactionUtils; import org.apache.iotdb.db.storageengine.dataregion.tsfile.TsFileResource; import org.apache.iotdb.db.storageengine.dataregion.tsfile.TsFileResourceStatus; import org.apache.iotdb.db.storageengine.dataregion.tsfile.timeindex.DeviceTimeIndex; +import org.apache.iotdb.db.storageengine.dataregion.tsfile.timeindex.ITimeIndex; import org.apache.tsfile.common.conf.TSFileConfig; import org.apache.tsfile.common.conf.TSFileDescriptor; @@ -61,6 +64,7 @@ public class TsFileResourceUtils { private static final Logger logger = LoggerFactory.getLogger(TsFileResourceUtils.class); + private static final IoTDBConfig config = IoTDBDescriptor.getInstance().getConfig(); private static final String VALIDATE_FAILED = "validate failed,"; private TsFileResourceUtils() { @@ -425,14 +429,19 @@ public static void updateTsFileResource( public static void updateTsFileResource( Map> device2Metadata, TsFileResource tsFileResource) { + // For async recover tsfile, there might be a FileTimeIndex, we need a new newTimeIndex + ITimeIndex newTimeIndex = + tsFileResource.getTimeIndex().getTimeIndexType() == ITimeIndex.FILE_TIME_INDEX_TYPE + ? config.getTimeIndexLevel().getTimeIndex() + : tsFileResource.getTimeIndex(); for (Map.Entry> entry : device2Metadata.entrySet()) { for (TimeseriesMetadata timeseriesMetaData : entry.getValue()) { - tsFileResource.updateStartTime( + newTimeIndex.updateStartTime( entry.getKey(), timeseriesMetaData.getStatistics().getStartTime()); - tsFileResource.updateEndTime( - entry.getKey(), timeseriesMetaData.getStatistics().getEndTime()); + newTimeIndex.updateEndTime(entry.getKey(), timeseriesMetaData.getStatistics().getEndTime()); } } + tsFileResource.setTimeIndex(newTimeIndex); } /**