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

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

commit 4a7375d006ef53f69affdcd0758c774353f8434d
Author: Steve Yurong Su <[email protected]>
AuthorDate: Fri Nov 22 19:41:37 2024 +0800

    Pipe: Fix filter issue when both tree extraction and table extraction are 
enabled and one extraction has non default pattern
---
 ...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..5251107bf17 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));
       }
     }
 
@@ -677,6 +677,7 @@ public class 
PipeHistoricalDataRegionTsFileAndDeletionExtractor
                     && treePattern.mayOverlapWithDevice(deviceID)) {
                   tsfile2IsTableModelMap.computeIfAbsent(
                       resource, (tsFileResource) -> Boolean.FALSE);
+                  updateIsDbNameCoveredByPattern(resource, false);
                   return true;
                 }
               } else {
@@ -687,6 +688,7 @@ public class 
PipeHistoricalDataRegionTsFileAndDeletionExtractor
                     && tablePattern.matchesTable(deviceID.getTableName())) {
                   tsfile2IsTableModelMap.computeIfAbsent(
                       resource, (tsFileResource) -> Boolean.TRUE);
+                  updateIsDbNameCoveredByPattern(resource, true);
                   return true;
                 }
               }
@@ -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