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