This is an automated email from the ASF dual-hosted git repository.
jiangtian pushed a commit to branch dev/1.3
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/dev/1.3 by this push:
new 9168f155d72 Fixed the NPE caused by concurrent "check for
createTimeSeries" and deleteTimeSeries (#16742) (#16745)
9168f155d72 is described below
commit 9168f155d72916037e34eede423147ef3609b0cd
Author: Caideyipi <[email protected]>
AuthorDate: Thu Nov 13 12:21:29 2025 +0800
Fixed the NPE caused by concurrent "check for createTimeSeries" and
deleteTimeSeries (#16742) (#16745)
* befix
* shi
---
.../apache/iotdb/db/schemaengine/schemaregion/ISchemaRegion.java | 5 ++++-
.../db/schemaengine/schemaregion/impl/SchemaRegionMemoryImpl.java | 6 +++++-
.../db/schemaengine/schemaregion/impl/SchemaRegionPBTreeImpl.java | 6 +++++-
3 files changed, 14 insertions(+), 3 deletions(-)
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/ISchemaRegion.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/ISchemaRegion.java
index 12630a147c0..7afca7bcc58 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/ISchemaRegion.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/ISchemaRegion.java
@@ -131,7 +131,10 @@ public interface ISchemaRegion {
* @param aliasList a list of alias that you want to check
* @return returns a map contains index of the measurements or alias that
threw the exception, and
* exception details. The exceptions describe whether the measurement or
alias exists. For
- * example, a MeasurementAlreadyExistException means this measurement
exists.
+ * example, a MeasurementAlreadyExistException means this measurement
exists. If there are
+ * exceptions during check, this may return an empty map, then all the
measurements will be
+ * re-checked under consensus layer, which guarantees safety(Yet may
cause unnecessary replay
+ * of raft log)
*/
Map<Integer, MetadataException> checkMeasurementExistence(
PartialPath devicePath, List<String> measurementList, List<String>
aliasList);
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/impl/SchemaRegionMemoryImpl.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/impl/SchemaRegionMemoryImpl.java
index 06a00c64e03..a789bda9290 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/impl/SchemaRegionMemoryImpl.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/impl/SchemaRegionMemoryImpl.java
@@ -758,7 +758,11 @@ public class SchemaRegionMemoryImpl implements
ISchemaRegion {
@Override
public Map<Integer, MetadataException> checkMeasurementExistence(
PartialPath devicePath, List<String> measurementList, List<String>
aliasList) {
- return mtree.checkMeasurementExistence(devicePath, measurementList,
aliasList);
+ try {
+ return mtree.checkMeasurementExistence(devicePath, measurementList,
aliasList);
+ } catch (final Exception e) {
+ return Collections.emptyMap();
+ }
}
@Override
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/impl/SchemaRegionPBTreeImpl.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/impl/SchemaRegionPBTreeImpl.java
index 7c05e864b81..78cae77750b 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/impl/SchemaRegionPBTreeImpl.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/impl/SchemaRegionPBTreeImpl.java
@@ -844,7 +844,11 @@ public class SchemaRegionPBTreeImpl implements
ISchemaRegion {
@Override
public Map<Integer, MetadataException> checkMeasurementExistence(
PartialPath devicePath, List<String> measurementList, List<String>
aliasList) {
- return mtree.checkMeasurementExistence(devicePath, measurementList,
aliasList);
+ try {
+ return mtree.checkMeasurementExistence(devicePath, measurementList,
aliasList);
+ } catch (final Exception e) {
+ return Collections.emptyMap();
+ }
}
@Override