Skip to content

Commit dd3153e

Browse files
authored
Fix tree schema snapshot database creation on master (#17964)
1 parent db27f78 commit dd3153e

2 files changed

Lines changed: 40 additions & 7 deletions

File tree

‎iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/protocol/thrift/IoTDBDataNodeReceiver.java‎

Lines changed: 30 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -629,8 +629,16 @@ private TSStatus loadSchemaSnapShot(
629629
throws IllegalPathException, IOException {
630630
final String databaseName = parameters.get(ColumnHeaderConstant.DATABASE);
631631
final PartialPath databasePath = PartialPath.getQualifiedDatabasePartialPath(databaseName);
632+
final boolean isTreeModelDataAllowedToBeCaptured =
633+
PipeTransferFileSealReqV2.isTreeModelDataAllowedToBeCaptured(parameters);
634+
final TreePattern treePattern =
635+
parseTreePattern(
636+
parameters.get(ColumnHeaderConstant.PATH_PATTERN), isTreeModelDataAllowedToBeCaptured);
632637

633638
if (!PathUtils.isTableModelDatabase(databaseName)) {
639+
if (!shouldLoadTreeSchemaSnapshotDatabase(treePattern, databaseName)) {
640+
return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
641+
}
634642
final TSStatus createDatabaseStatus = createSchemaSnapshotDatabaseIfNecessary(databasePath);
635643
if (createDatabaseStatus.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
636644
return createDatabaseStatus;
@@ -650,13 +658,6 @@ private TSStatus loadSchemaSnapShot(
650658
final Set<StatementType> executionTypes =
651659
PipeSchemaRegionSnapshotEvent.getStatementTypeSet(
652660
parameters.get(ColumnHeaderConstant.TYPE));
653-
final boolean isTreeModelDataAllowedToBeCaptured =
654-
PipeTransferFileSealReqV2.isTreeModelDataAllowedToBeCaptured(parameters);
655-
final TreePattern treePattern =
656-
TreePattern.parsePatternFromString(
657-
parameters.get(ColumnHeaderConstant.PATH_PATTERN),
658-
isTreeModelDataAllowedToBeCaptured,
659-
p -> new IoTDBTreePattern(isTreeModelDataAllowedToBeCaptured, p));
660661
final TablePattern tablePattern =
661662
new TablePattern(
662663
PipeTransferFileSealReqV2.isTableModelDataAllowedToBeCaptured(parameters),
@@ -707,6 +708,28 @@ private TSStatus loadSchemaSnapShot(
707708
return PipeReceiverStatusHandler.getPriorStatus(results);
708709
}
709710

711+
static boolean shouldLoadTreeSchemaSnapshotDatabase(
712+
final String pathPattern,
713+
final boolean isTreeModelDataAllowedToBeCaptured,
714+
final String databaseName) {
715+
return shouldLoadTreeSchemaSnapshotDatabase(
716+
parseTreePattern(pathPattern, isTreeModelDataAllowedToBeCaptured), databaseName);
717+
}
718+
719+
private static TreePattern parseTreePattern(
720+
final String pathPattern, final boolean isTreeModelDataAllowedToBeCaptured) {
721+
return TreePattern.parsePatternFromString(
722+
pathPattern,
723+
isTreeModelDataAllowedToBeCaptured,
724+
p -> new IoTDBTreePattern(isTreeModelDataAllowedToBeCaptured, p));
725+
}
726+
727+
private static boolean shouldLoadTreeSchemaSnapshotDatabase(
728+
final TreePattern treePattern, final String databaseName) {
729+
return treePattern.isTreeModelDataAllowedToBeCaptured()
730+
&& treePattern.mayOverlapWithDb(databaseName);
731+
}
732+
710733
private TSStatus createSchemaSnapshotDatabaseIfNecessary(final PartialPath databasePath) {
711734
final DatabaseSchemaStatement statement =
712735
new DatabaseSchemaStatement(DatabaseSchemaStatement.DatabaseSchemaStatementType.CREATE);

‎iotdb-core/datanode/src/test/java/org/apache/iotdb/db/pipe/receiver/protocol/thrift/IoTDBDataNodeReceiverTest.java‎

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,16 @@ public void testRepeatedStatementExceptionLogIsReduced() throws Exception {
110110
}
111111
}
112112

113+
@Test
114+
public void testTreeSchemaSnapshotDatabaseIsFilteredByPattern() {
115+
Assert.assertTrue(
116+
IoTDBDataNodeReceiver.shouldLoadTreeSchemaSnapshotDatabase("root.ln.**", true, "root.ln"));
117+
Assert.assertFalse(
118+
IoTDBDataNodeReceiver.shouldLoadTreeSchemaSnapshotDatabase("root.ln.**", true, "root.db"));
119+
Assert.assertFalse(
120+
IoTDBDataNodeReceiver.shouldLoadTreeSchemaSnapshotDatabase("root.ln.**", false, "root.ln"));
121+
}
122+
113123
@Test
114124
public void testLoadTsFileSyncStatementVerifiesSchemaWhenConvertingType() throws Exception {
115125
final Path tsFile = Files.createTempFile("pipe-load-convert-verify-schema", ".tsfile");

0 commit comments

Comments
 (0)