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