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

rong pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iotdb.git


The following commit(s) were added to refs/heads/master by this push:
     new 76066d41df0 Pipe: Fix filter issue when both tree extraction and table 
extraction are enabled and one extraction has non default pattern (#14184)
76066d41df0 is described below

commit 76066d41df0404005c0ec30032641aa441b3d5c6
Author: Steve Yurong Su <[email protected]>
AuthorDate: Sat Nov 23 00:10:08 2024 +0800

    Pipe: Fix filter issue when both tree extraction and table extraction are 
enabled and one extraction has non default pattern (#14184)
---
 ...oricalDataRegionTsFileAndDeletionExtractor.java | 26 +++++++++++++++++++---
 .../realtime/PipeRealtimeDataRegionExtractor.java  |  5 ++---
 2 files changed, 25 insertions(+), 6 deletions(-)

diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/extractor/dataregion/historical/PipeHistoricalDataRegionTsFileAndDeletionExtractor.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/extractor/dataregion/historical/PipeHistoricalDataRegionTsFileAndDeletionExtractor.java
index 8ad6bda37c4..c10d2ebefc3 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/extractor/dataregion/historical/PipeHistoricalDataRegionTsFileAndDeletionExtractor.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/extractor/dataregion/historical/PipeHistoricalDataRegionTsFileAndDeletionExtractor.java
@@ -133,6 +133,7 @@ public class 
PipeHistoricalDataRegionTsFileAndDeletionExtractor
   private TreePattern treePattern;
   private TablePattern tablePattern;
   private boolean isDbNameCoveredByPattern = false;
+  private boolean isModelDetected = false;
 
   private boolean isHistoricalExtractorEnabled = false;
   private long historicalDataExtractionStartTime = Long.MIN_VALUE; // Event 
time
@@ -336,10 +337,9 @@ public class 
PipeHistoricalDataRegionTsFileAndDeletionExtractor
       final String databaseName = dataRegion.getDatabaseName();
       if (Objects.nonNull(databaseName)) {
         isDbNameCoveredByPattern =
-            treePattern.isTreeModelDataAllowedToBeCaptured() && 
treePattern.coversDb(databaseName)
+            treePattern.coversDb(databaseName)
                 // The database name is prefixed with "root."
-                || tablePattern.isTableModelDataAllowedToBeCaptured()
-                    && tablePattern.coversDb(databaseName.substring(5));
+                && tablePattern.coversDb(databaseName.substring(5));
       }
     }
 
@@ -673,6 +673,7 @@ public class 
PipeHistoricalDataRegionTsFileAndDeletionExtractor
                   || 
deviceID.getTableName().startsWith(TREE_MODEL_EVENT_TABLE_NAME_PREFIX)
                   || deviceID.getTableName().equals(PATH_ROOT)) {
                 // In case of tree model deviceID
+                updateIsDbNameCoveredByPattern(resource, false);
                 if (treePattern.isTreeModelDataAllowedToBeCaptured()
                     && treePattern.mayOverlapWithDevice(deviceID)) {
                   tsfile2IsTableModelMap.computeIfAbsent(
@@ -681,6 +682,7 @@ public class 
PipeHistoricalDataRegionTsFileAndDeletionExtractor
                 }
               } else {
                 // In case of table model deviceID
+                updateIsDbNameCoveredByPattern(resource, true);
                 if (tablePattern.isTableModelDataAllowedToBeCaptured()
                     // The database name in resource is prefixed with "root."
                     && 
tablePattern.matchesDatabase(resource.getDatabaseName().substring(5))
@@ -694,6 +696,24 @@ public class 
PipeHistoricalDataRegionTsFileAndDeletionExtractor
             });
   }
 
+  private void updateIsDbNameCoveredByPattern(
+      final TsFileResource resource, final boolean isTableModel) {
+    if (isModelDetected) {
+      return;
+    }
+
+    final String databaseName = resource.getDatabaseName();
+    if (Objects.nonNull(databaseName)) {
+      isDbNameCoveredByPattern =
+          isTableModel
+              ? tablePattern.isTableModelDataAllowedToBeCaptured()
+                  && tablePattern.coversDb(databaseName.substring(5))
+              : treePattern.isTreeModelDataAllowedToBeCaptured()
+                  && treePattern.coversDb(databaseName);
+      isModelDetected = true;
+    }
+  }
+
   private boolean isTsFileResourceOverlappedWithTimeRange(final TsFileResource 
resource) {
     return !(resource.getFileEndTime() < historicalDataExtractionStartTime
         || historicalDataExtractionEndTime < resource.getFileStartTime());
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/extractor/dataregion/realtime/PipeRealtimeDataRegionExtractor.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/extractor/dataregion/realtime/PipeRealtimeDataRegionExtractor.java
index 45661ad1246..568e863acf4 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/extractor/dataregion/realtime/PipeRealtimeDataRegionExtractor.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/extractor/dataregion/realtime/PipeRealtimeDataRegionExtractor.java
@@ -221,10 +221,9 @@ public abstract class PipeRealtimeDataRegionExtractor 
implements PipeExtractor {
       final String databaseName = dataRegion.getDatabaseName();
       if (databaseName != null) {
         isDbNameCoveredByPattern =
-            treePattern.isTreeModelDataAllowedToBeCaptured() && 
treePattern.coversDb(databaseName)
+            treePattern.coversDb(databaseName)
                 // The database name is prefixed with "root."
-                || tablePattern.isTableModelDataAllowedToBeCaptured()
-                    && tablePattern.coversDb(databaseName.substring(5));
+                && tablePattern.coversDb(databaseName.substring(5));
       }
     }
 

Reply via email to