Skip to content

Commit 6e5cfa2

Browse files
authored
Ignore not exist device when storage engine is not ready
1 parent 488686a commit 6e5cfa2

File tree

2 files changed

+20
-6
lines changed

2 files changed

+20
-6
lines changed

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/fragment/FragmentInstanceContext.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import org.apache.iotdb.db.queryengine.plan.planner.memory.MemoryReservationManager;
3737
import org.apache.iotdb.db.queryengine.plan.planner.memory.ThreadSafeMemoryReservationManager;
3838
import org.apache.iotdb.db.queryengine.plan.planner.plan.TimePredicate;
39+
import org.apache.iotdb.db.storageengine.StorageEngine;
3940
import org.apache.iotdb.db.storageengine.dataregion.IDataRegionForQuery;
4041
import org.apache.iotdb.db.storageengine.dataregion.read.IQueryDataSource;
4142
import org.apache.iotdb.db.storageengine.dataregion.read.QueryDataSource;
@@ -107,6 +108,10 @@ public class FragmentInstanceContext extends QueryContext {
107108
// empty for zero time partitions
108109
private List<Long> timePartitions;
109110

111+
// An optimization during restart changes the time index from FILE TIME INDEX
112+
// to DEVICE TIME INDEX, which may cause a related validation false positive.
113+
private boolean ignoreNotExistsDevice = false;
114+
110115
private QueryDataSourceType queryDataSourceType = QueryDataSourceType.SERIES_SCAN;
111116

112117
private final AtomicLong startNanos = new AtomicLong();
@@ -294,6 +299,7 @@ private FragmentInstanceContext(long queryId) {
294299

295300
public void start() {
296301
long now = System.currentTimeMillis();
302+
ignoreNotExistsDevice = !StorageEngine.getInstance().isReadyForNonReadWriteFunctions();
297303
executionStartTime.compareAndSet(null, now);
298304
startNanos.compareAndSet(0, System.nanoTime());
299305

@@ -939,4 +945,8 @@ public long getClosedUnseqFileNum() {
939945
public long getUnclosedSeqFileNum() {
940946
return unclosedSeqFileNum;
941947
}
948+
949+
public boolean ignoreNotExistsDevice() {
950+
return ignoreNotExistsDevice;
951+
}
942952
}

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/FileLoaderUtils.java

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121

2222
import org.apache.iotdb.commons.path.AlignedFullPath;
2323
import org.apache.iotdb.commons.path.NonAlignedFullPath;
24+
import org.apache.iotdb.db.queryengine.execution.fragment.FragmentInstanceContext;
2425
import org.apache.iotdb.db.queryengine.execution.fragment.QueryContext;
2526
import org.apache.iotdb.db.queryengine.metric.SeriesScanCostMetricSet;
2627
import org.apache.iotdb.db.storageengine.buffer.TimeSeriesMetadataCache;
@@ -78,7 +79,7 @@ private FileLoaderUtils() {
7879
public static TimeseriesMetadata loadTimeSeriesMetadata(
7980
TsFileResource resource,
8081
NonAlignedFullPath seriesPath,
81-
QueryContext context,
82+
FragmentInstanceContext context,
8283
Filter globalTimeFilter,
8384
Set<String> allSensors,
8485
boolean isSeq)
@@ -101,7 +102,8 @@ public static TimeseriesMetadata loadTimeSeriesMetadata(
101102
seriesPath.getDeviceId(),
102103
seriesPath.getMeasurement()),
103104
allSensors,
104-
resource.getTimeIndexType() == ITimeIndex.FILE_TIME_INDEX_TYPE,
105+
context.ignoreNotExistsDevice()
106+
|| resource.getTimeIndexType() == ITimeIndex.FILE_TIME_INDEX_TYPE,
105107
context.isDebug(),
106108
context);
107109
if (timeSeriesMetadata != null) {
@@ -178,7 +180,7 @@ public static TimeseriesMetadata loadTimeSeriesMetadata(
178180
public static AbstractAlignedTimeSeriesMetadata loadAlignedTimeSeriesMetadata(
179181
TsFileResource resource,
180182
AlignedFullPath alignedPath,
181-
QueryContext context,
183+
FragmentInstanceContext context,
182184
Filter globalTimeFilter,
183185
boolean isSeq,
184186
boolean ignoreAllNullRows)
@@ -254,7 +256,7 @@ public static AbstractAlignedTimeSeriesMetadata loadAlignedTimeSeriesMetadata(
254256
private static AbstractAlignedTimeSeriesMetadata loadAlignedTimeSeriesMetadataFromDisk(
255257
TsFileResource resource,
256258
AlignedFullPath alignedPath,
257-
QueryContext context,
259+
FragmentInstanceContext context,
258260
Filter globalTimeFilter,
259261
boolean ignoreAllNullRows)
260262
throws IOException {
@@ -276,7 +278,8 @@ private static AbstractAlignedTimeSeriesMetadata loadAlignedTimeSeriesMetadataFr
276278
filePath,
277279
new TimeSeriesMetadataCacheKey(resource.getTsFileID(), deviceId, ""),
278280
allSensors,
279-
resource.getTimeIndexType() == ITimeIndex.FILE_TIME_INDEX_TYPE,
281+
context.ignoreNotExistsDevice()
282+
|| resource.getTimeIndexType() == ITimeIndex.FILE_TIME_INDEX_TYPE,
280283
isDebug,
281284
context);
282285
if (timeColumn != null) {
@@ -305,7 +308,8 @@ private static AbstractAlignedTimeSeriesMetadata loadAlignedTimeSeriesMetadataFr
305308
new TimeSeriesMetadataCacheKey(
306309
resource.getTsFileID(), deviceId, valueMeasurement),
307310
allSensors,
308-
resource.getTimeIndexType() == ITimeIndex.FILE_TIME_INDEX_TYPE,
311+
context.ignoreNotExistsDevice()
312+
|| resource.getTimeIndexType() == ITimeIndex.FILE_TIME_INDEX_TYPE,
309313
isDebug,
310314
context);
311315
exist = (exist || (valueColumn != null));

0 commit comments

Comments
 (0)