This is an automated email from the ASF dual-hosted git repository.

jackietien pushed a commit to branch dev/1.3
in repository https://gitbox.apache.org/repos/asf/iotdb.git


The following commit(s) were added to refs/heads/dev/1.3 by this push:
     new 5b27bf3a780 [To dev/1.3] Ignore not exist when storage is not ready
5b27bf3a780 is described below

commit 5b27bf3a7809b9f74c99523474b01bbe836c8256
Author: shuwenwei <[email protected]>
AuthorDate: Wed Jun 4 14:03:11 2025 +0800

    [To dev/1.3] Ignore not exist when storage is not ready
---
 .../execution/fragment/FragmentInstanceContext.java      | 10 ++++++++++
 .../execution/operator/source/FileLoaderUtils.java       | 16 ++++++++++------
 2 files changed, 20 insertions(+), 6 deletions(-)

diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/fragment/FragmentInstanceContext.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/fragment/FragmentInstanceContext.java
index ae63887e645..84797cbfad9 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/fragment/FragmentInstanceContext.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/fragment/FragmentInstanceContext.java
@@ -34,6 +34,7 @@ import 
org.apache.iotdb.db.queryengine.metric.SeriesScanCostMetricSet;
 import 
org.apache.iotdb.db.queryengine.plan.planner.memory.MemoryReservationManager;
 import 
org.apache.iotdb.db.queryengine.plan.planner.memory.ThreadSafeMemoryReservationManager;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.TimePredicate;
+import org.apache.iotdb.db.storageengine.StorageEngine;
 import org.apache.iotdb.db.storageengine.dataregion.DataRegion;
 import org.apache.iotdb.db.storageengine.dataregion.IDataRegionForQuery;
 import org.apache.iotdb.db.storageengine.dataregion.read.IQueryDataSource;
@@ -97,6 +98,10 @@ public class FragmentInstanceContext extends QueryContext {
   // empty for zero time partitions
   private List<Long> timePartitions;
 
+  // An optimization during restart changes the time index from FILE TIME INDEX
+  // to DEVICE TIME INDEX, which may cause a related validation false positive.
+  private boolean ignoreNotExistsDevice = false;
+
   private QueryDataSourceType queryDataSourceType = 
QueryDataSourceType.SERIES_SCAN;
 
   private final AtomicLong startNanos = new AtomicLong();
@@ -289,6 +294,7 @@ public class FragmentInstanceContext extends QueryContext {
 
   public void start() {
     long now = System.currentTimeMillis();
+    ignoreNotExistsDevice = 
!StorageEngine.getInstance().isReadyForNonReadWriteFunctions();
     executionStartTime.compareAndSet(null, now);
     startNanos.compareAndSet(0, System.nanoTime());
 
@@ -903,4 +909,8 @@ public class FragmentInstanceContext extends QueryContext {
   public long getUnclosedSeqFileNum() {
     return unclosedSeqFileNum;
   }
+
+  public boolean ignoreNotExistsDevice() {
+    return ignoreNotExistsDevice;
+  }
 }
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/FileLoaderUtils.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/FileLoaderUtils.java
index ab582283b80..c472b9ca607 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/FileLoaderUtils.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/FileLoaderUtils.java
@@ -21,6 +21,7 @@ package 
org.apache.iotdb.db.queryengine.execution.operator.source;
 
 import org.apache.iotdb.commons.path.AlignedPath;
 import org.apache.iotdb.commons.path.PartialPath;
+import 
org.apache.iotdb.db.queryengine.execution.fragment.FragmentInstanceContext;
 import org.apache.iotdb.db.queryengine.execution.fragment.QueryContext;
 import org.apache.iotdb.db.queryengine.metric.SeriesScanCostMetricSet;
 import org.apache.iotdb.db.storageengine.buffer.TimeSeriesMetadataCache;
@@ -77,7 +78,7 @@ public class FileLoaderUtils {
   public static TimeseriesMetadata loadTimeSeriesMetadata(
       TsFileResource resource,
       PartialPath seriesPath,
-      QueryContext context,
+      FragmentInstanceContext context,
       Filter globalTimeFilter,
       Set<String> allSensors,
       boolean isSeq)
@@ -100,7 +101,8 @@ public class FileLoaderUtils {
                         new PlainDeviceID(seriesPath.getDevice()),
                         seriesPath.getMeasurement()),
                     allSensors,
-                    resource.getTimeIndexType() == 
ITimeIndex.FILE_TIME_INDEX_TYPE,
+                    context.ignoreNotExistsDevice()
+                        || resource.getTimeIndexType() == 
ITimeIndex.FILE_TIME_INDEX_TYPE,
                     context.isDebug(),
                     context);
         if (timeSeriesMetadata != null) {
@@ -175,7 +177,7 @@ public class FileLoaderUtils {
   public static AlignedTimeSeriesMetadata loadAlignedTimeSeriesMetadata(
       TsFileResource resource,
       AlignedPath alignedPath,
-      QueryContext context,
+      FragmentInstanceContext context,
       Filter globalTimeFilter,
       boolean isSeq)
       throws IOException {
@@ -248,7 +250,7 @@ public class FileLoaderUtils {
   private static AlignedTimeSeriesMetadata 
loadAlignedTimeSeriesMetadataFromDisk(
       TsFileResource resource,
       AlignedPath alignedPath,
-      QueryContext context,
+      FragmentInstanceContext context,
       Filter globalTimeFilter)
       throws IOException {
     AlignedTimeSeriesMetadata alignedTimeSeriesMetadata = null;
@@ -270,7 +272,8 @@ public class FileLoaderUtils {
             filePath,
             new TimeSeriesMetadataCacheKey(resource.getTsFileID(), deviceId, 
""),
             allSensors,
-            resource.getTimeIndexType() == ITimeIndex.FILE_TIME_INDEX_TYPE,
+            context.ignoreNotExistsDevice()
+                || resource.getTimeIndexType() == 
ITimeIndex.FILE_TIME_INDEX_TYPE,
             isDebug,
             context);
     if (timeColumn != null) {
@@ -293,7 +296,8 @@ public class FileLoaderUtils {
                   new TimeSeriesMetadataCacheKey(
                       resource.getTsFileID(), deviceId, valueMeasurement),
                   allSensors,
-                  resource.getTimeIndexType() == 
ITimeIndex.FILE_TIME_INDEX_TYPE,
+                  context.ignoreNotExistsDevice()
+                      || resource.getTimeIndexType() == 
ITimeIndex.FILE_TIME_INDEX_TYPE,
                   isDebug,
                   context);
           exist = (exist || (valueColumn != null));

Reply via email to