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

Reply via email to