This is an automated email from the ASF dual-hosted git repository.
jt2594838 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 dd3153e4038 Fix tree schema snapshot database creation on master
(#17964)
dd3153e4038 is described below
commit dd3153e4038aabfe7e07bfe2e50fc4209b472f10
Author: Caideyipi <[email protected]>
AuthorDate: Wed Jun 17 11:23:15 2026 +0800
Fix tree schema snapshot database creation on master (#17964)
---
.../protocol/thrift/IoTDBDataNodeReceiver.java | 37 ++++++++++++++++++----
.../protocol/thrift/IoTDBDataNodeReceiverTest.java | 10 ++++++
2 files changed, 40 insertions(+), 7 deletions(-)
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/protocol/thrift/IoTDBDataNodeReceiver.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/protocol/thrift/IoTDBDataNodeReceiver.java
index fb2eabb6c85..4f101e1796a 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/protocol/thrift/IoTDBDataNodeReceiver.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/protocol/thrift/IoTDBDataNodeReceiver.java
@@ -629,8 +629,16 @@ public class IoTDBDataNodeReceiver extends
IoTDBFileReceiver {
throws IllegalPathException, IOException {
final String databaseName = parameters.get(ColumnHeaderConstant.DATABASE);
final PartialPath databasePath =
PartialPath.getQualifiedDatabasePartialPath(databaseName);
+ final boolean isTreeModelDataAllowedToBeCaptured =
+
PipeTransferFileSealReqV2.isTreeModelDataAllowedToBeCaptured(parameters);
+ final TreePattern treePattern =
+ parseTreePattern(
+ parameters.get(ColumnHeaderConstant.PATH_PATTERN),
isTreeModelDataAllowedToBeCaptured);
if (!PathUtils.isTableModelDatabase(databaseName)) {
+ if (!shouldLoadTreeSchemaSnapshotDatabase(treePattern, databaseName)) {
+ return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
+ }
final TSStatus createDatabaseStatus =
createSchemaSnapshotDatabaseIfNecessary(databasePath);
if (createDatabaseStatus.getCode() !=
TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
return createDatabaseStatus;
@@ -650,13 +658,6 @@ public class IoTDBDataNodeReceiver extends
IoTDBFileReceiver {
final Set<StatementType> executionTypes =
PipeSchemaRegionSnapshotEvent.getStatementTypeSet(
parameters.get(ColumnHeaderConstant.TYPE));
- final boolean isTreeModelDataAllowedToBeCaptured =
-
PipeTransferFileSealReqV2.isTreeModelDataAllowedToBeCaptured(parameters);
- final TreePattern treePattern =
- TreePattern.parsePatternFromString(
- parameters.get(ColumnHeaderConstant.PATH_PATTERN),
- isTreeModelDataAllowedToBeCaptured,
- p -> new IoTDBTreePattern(isTreeModelDataAllowedToBeCaptured, p));
final TablePattern tablePattern =
new TablePattern(
PipeTransferFileSealReqV2.isTableModelDataAllowedToBeCaptured(parameters),
@@ -707,6 +708,28 @@ public class IoTDBDataNodeReceiver extends
IoTDBFileReceiver {
return PipeReceiverStatusHandler.getPriorStatus(results);
}
+ static boolean shouldLoadTreeSchemaSnapshotDatabase(
+ final String pathPattern,
+ final boolean isTreeModelDataAllowedToBeCaptured,
+ final String databaseName) {
+ return shouldLoadTreeSchemaSnapshotDatabase(
+ parseTreePattern(pathPattern, isTreeModelDataAllowedToBeCaptured),
databaseName);
+ }
+
+ private static TreePattern parseTreePattern(
+ final String pathPattern, final boolean
isTreeModelDataAllowedToBeCaptured) {
+ return TreePattern.parsePatternFromString(
+ pathPattern,
+ isTreeModelDataAllowedToBeCaptured,
+ p -> new IoTDBTreePattern(isTreeModelDataAllowedToBeCaptured, p));
+ }
+
+ private static boolean shouldLoadTreeSchemaSnapshotDatabase(
+ final TreePattern treePattern, final String databaseName) {
+ return treePattern.isTreeModelDataAllowedToBeCaptured()
+ && treePattern.mayOverlapWithDb(databaseName);
+ }
+
private TSStatus createSchemaSnapshotDatabaseIfNecessary(final PartialPath
databasePath) {
final DatabaseSchemaStatement statement =
new
DatabaseSchemaStatement(DatabaseSchemaStatement.DatabaseSchemaStatementType.CREATE);
diff --git
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/pipe/receiver/protocol/thrift/IoTDBDataNodeReceiverTest.java
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/pipe/receiver/protocol/thrift/IoTDBDataNodeReceiverTest.java
index 1e279a18feb..7f9197dfa04 100644
---
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/pipe/receiver/protocol/thrift/IoTDBDataNodeReceiverTest.java
+++
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/pipe/receiver/protocol/thrift/IoTDBDataNodeReceiverTest.java
@@ -110,6 +110,16 @@ public class IoTDBDataNodeReceiverTest {
}
}
+ @Test
+ public void testTreeSchemaSnapshotDatabaseIsFilteredByPattern() {
+ Assert.assertTrue(
+
IoTDBDataNodeReceiver.shouldLoadTreeSchemaSnapshotDatabase("root.ln.**", true,
"root.ln"));
+ Assert.assertFalse(
+
IoTDBDataNodeReceiver.shouldLoadTreeSchemaSnapshotDatabase("root.ln.**", true,
"root.db"));
+ Assert.assertFalse(
+
IoTDBDataNodeReceiver.shouldLoadTreeSchemaSnapshotDatabase("root.ln.**", false,
"root.ln"));
+ }
+
@Test
public void testLoadTsFileSyncStatementVerifiesSchemaWhenConvertingType()
throws Exception {
final Path tsFile =
Files.createTempFile("pipe-load-convert-verify-schema", ".tsfile");