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)); } }
