This is an automated email from the ASF dual-hosted git repository.

justinchen 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 9854f01be7a fix: MeasurementSchema not initialized after automatic 
metadata creation failed (#16300)
9854f01be7a is described below

commit 9854f01be7a25d2e69cf7b8efb563d7169b0cc78
Author: Zhenyu Luo <[email protected]>
AuthorDate: Fri Aug 29 15:49:47 2025 +0800

    fix: MeasurementSchema not initialized after automatic metadata creation 
failed (#16300)
    
    * fix: MeasurementSchema not initialized after automatic metadata creation 
failed
    
    * fix
    
    * update
    
    * update
    
    * add IT
    
    * add IT
    
    * update
---
 .../iotdb/session/it/IoTDBSessionComplexIT.java    | 49 ++++++++++++++++++++++
 .../plan/analyze/schema/NormalSchemaFetcher.java   | 10 +++--
 2 files changed, 56 insertions(+), 3 deletions(-)

diff --git 
a/integration-test/src/test/java/org/apache/iotdb/session/it/IoTDBSessionComplexIT.java
 
b/integration-test/src/test/java/org/apache/iotdb/session/it/IoTDBSessionComplexIT.java
index 585c767006c..b4e2b9400ac 100644
--- 
a/integration-test/src/test/java/org/apache/iotdb/session/it/IoTDBSessionComplexIT.java
+++ 
b/integration-test/src/test/java/org/apache/iotdb/session/it/IoTDBSessionComplexIT.java
@@ -38,6 +38,7 @@ import org.apache.tsfile.write.record.Tablet;
 import org.apache.tsfile.write.schema.IMeasurementSchema;
 import org.apache.tsfile.write.schema.MeasurementSchema;
 import org.junit.After;
+import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
@@ -550,6 +551,54 @@ public class IoTDBSessionComplexIT {
     }
   }
 
+  @Test
+  public void insertNotAutoCreateSchemaTest() {
+
+    try (ISession session = EnvFactory.getEnv().getSessionConnection()) {
+      session.executeNonQueryStatement("SET CONFIGURATION 
'enable_auto_create_schema'='false'");
+      session.createDatabase("root.sg1");
+      session.createDatabase("root.sg2");
+      session.createDatabase("root.sg3");
+
+      try {
+        insertTablet(session, "root.sg1.d1");
+      } catch (Exception e) {
+        Assert.assertTrue(
+            e.getMessage() != null
+                && e.getMessage().contains("Path [root.sg1.d1.s1] does not 
exist"));
+      }
+
+      try {
+        insertRecords(session, Arrays.asList("root.sg1.d1", "root.sg1.d2"));
+      } catch (Exception e) {
+        Assert.assertTrue(
+            e.getMessage() != null
+                    && e.getMessage().contains("Path [root.sg1.d2.s1] does not 
exist")
+                || e.getMessage().contains("Path [root.sg1.d1.s1] does not 
exist"));
+      }
+
+      try {
+        insertMultiTablets(session, Arrays.asList("root.sg2.d1", 
"root.sg2.d2"));
+      } catch (Exception e) {
+        Assert.assertTrue(
+            e.getMessage() != null
+                    && e.getMessage().contains("Path [root.sg2.d2.s1] does not 
exist")
+                || e.getMessage().contains("Path [root.sg2.d1.s1] does not 
exist"));
+      }
+
+      try {
+        insertRecordsOfOneDevice(session, "root.sg3.d1");
+      } catch (Exception e) {
+        Assert.assertTrue(
+            e.getMessage() != null
+                && e.getMessage().contains("Path [root.sg3.d1.s1] does not 
exist"));
+      }
+
+    } catch (Exception e) {
+      fail(e.getMessage());
+    }
+  }
+
   @Test
   public void testAuth() {
     // auth test
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/NormalSchemaFetcher.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/NormalSchemaFetcher.java
index 7b414fa5dc5..f423a3b80e3 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/NormalSchemaFetcher.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/NormalSchemaFetcher.java
@@ -324,6 +324,8 @@ class NormalSchemaFetcher {
       return;
     }
 
+    List<Integer> copyOfIndexOfDevicesNeedAutoCreateSchema =
+        new ArrayList<>(indexOfDevicesNeedAutoCreateSchema);
     if (!config.isAutoCreateSchemaEnabled()) {
       // keep auto-creation for system series
       indexOfDevicesNeedAutoCreateSchema.removeIf(
@@ -371,14 +373,16 @@ class NormalSchemaFetcher {
           context);
       indexOfDevicesWithMissingMeasurements = new ArrayList<>();
       indexOfMissingMeasurementsList = new ArrayList<>();
-      for (int i = 0; i < indexOfDevicesNeedAutoCreateSchema.size(); i++) {
+      for (int i = 0; i < copyOfIndexOfDevicesNeedAutoCreateSchema.size(); 
i++) {
         schemaComputationWithAutoCreation =
-            
schemaComputationWithAutoCreationList.get(indexOfDevicesNeedAutoCreateSchema.get(i));
+            schemaComputationWithAutoCreationList.get(
+                copyOfIndexOfDevicesNeedAutoCreateSchema.get(i));
         indexOfMissingMeasurements =
             schemaTree.compute(
                 schemaComputationWithAutoCreation, 
indexOfMeasurementsNeedAutoCreate.get(i));
         if (!indexOfMissingMeasurements.isEmpty()) {
-          
indexOfDevicesWithMissingMeasurements.add(indexOfDevicesNeedAutoCreateSchema.get(i));
+          indexOfDevicesWithMissingMeasurements.add(
+              copyOfIndexOfDevicesNeedAutoCreateSchema.get(i));
           indexOfMissingMeasurementsList.add(indexOfMissingMeasurements);
         }
       }

Reply via email to