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

Reply via email to