Skip to content

Commit 9854f01

Browse files
authored
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
1 parent dae4a2e commit 9854f01

2 files changed

Lines changed: 56 additions & 3 deletions

File tree

integration-test/src/test/java/org/apache/iotdb/session/it/IoTDBSessionComplexIT.java

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
import org.apache.tsfile.write.schema.IMeasurementSchema;
3939
import org.apache.tsfile.write.schema.MeasurementSchema;
4040
import org.junit.After;
41+
import org.junit.Assert;
4142
import org.junit.Before;
4243
import org.junit.Test;
4344
import org.junit.experimental.categories.Category;
@@ -550,6 +551,54 @@ public void insertWithMultipleTimeSlotsTest() {
550551
}
551552
}
552553

554+
@Test
555+
public void insertNotAutoCreateSchemaTest() {
556+
557+
try (ISession session = EnvFactory.getEnv().getSessionConnection()) {
558+
session.executeNonQueryStatement("SET CONFIGURATION 'enable_auto_create_schema'='false'");
559+
session.createDatabase("root.sg1");
560+
session.createDatabase("root.sg2");
561+
session.createDatabase("root.sg3");
562+
563+
try {
564+
insertTablet(session, "root.sg1.d1");
565+
} catch (Exception e) {
566+
Assert.assertTrue(
567+
e.getMessage() != null
568+
&& e.getMessage().contains("Path [root.sg1.d1.s1] does not exist"));
569+
}
570+
571+
try {
572+
insertRecords(session, Arrays.asList("root.sg1.d1", "root.sg1.d2"));
573+
} catch (Exception e) {
574+
Assert.assertTrue(
575+
e.getMessage() != null
576+
&& e.getMessage().contains("Path [root.sg1.d2.s1] does not exist")
577+
|| e.getMessage().contains("Path [root.sg1.d1.s1] does not exist"));
578+
}
579+
580+
try {
581+
insertMultiTablets(session, Arrays.asList("root.sg2.d1", "root.sg2.d2"));
582+
} catch (Exception e) {
583+
Assert.assertTrue(
584+
e.getMessage() != null
585+
&& e.getMessage().contains("Path [root.sg2.d2.s1] does not exist")
586+
|| e.getMessage().contains("Path [root.sg2.d1.s1] does not exist"));
587+
}
588+
589+
try {
590+
insertRecordsOfOneDevice(session, "root.sg3.d1");
591+
} catch (Exception e) {
592+
Assert.assertTrue(
593+
e.getMessage() != null
594+
&& e.getMessage().contains("Path [root.sg3.d1.s1] does not exist"));
595+
}
596+
597+
} catch (Exception e) {
598+
fail(e.getMessage());
599+
}
600+
}
601+
553602
@Test
554603
public void testAuth() {
555604
// auth test

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/NormalSchemaFetcher.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -324,6 +324,8 @@ void processNormalTimeSeries(
324324
return;
325325
}
326326

327+
List<Integer> copyOfIndexOfDevicesNeedAutoCreateSchema =
328+
new ArrayList<>(indexOfDevicesNeedAutoCreateSchema);
327329
if (!config.isAutoCreateSchemaEnabled()) {
328330
// keep auto-creation for system series
329331
indexOfDevicesNeedAutoCreateSchema.removeIf(
@@ -371,14 +373,16 @@ void processNormalTimeSeries(
371373
context);
372374
indexOfDevicesWithMissingMeasurements = new ArrayList<>();
373375
indexOfMissingMeasurementsList = new ArrayList<>();
374-
for (int i = 0; i < indexOfDevicesNeedAutoCreateSchema.size(); i++) {
376+
for (int i = 0; i < copyOfIndexOfDevicesNeedAutoCreateSchema.size(); i++) {
375377
schemaComputationWithAutoCreation =
376-
schemaComputationWithAutoCreationList.get(indexOfDevicesNeedAutoCreateSchema.get(i));
378+
schemaComputationWithAutoCreationList.get(
379+
copyOfIndexOfDevicesNeedAutoCreateSchema.get(i));
377380
indexOfMissingMeasurements =
378381
schemaTree.compute(
379382
schemaComputationWithAutoCreation, indexOfMeasurementsNeedAutoCreate.get(i));
380383
if (!indexOfMissingMeasurements.isEmpty()) {
381-
indexOfDevicesWithMissingMeasurements.add(indexOfDevicesNeedAutoCreateSchema.get(i));
384+
indexOfDevicesWithMissingMeasurements.add(
385+
copyOfIndexOfDevicesNeedAutoCreateSchema.get(i));
382386
indexOfMissingMeasurementsList.add(indexOfMissingMeasurements);
383387
}
384388
}

0 commit comments

Comments
 (0)