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

Caideyipi pushed a commit to branch schema-existence-fix-pr
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit 84462af01d4ce7c98c8fa68fe00cd69a6708205a
Author: Caideyipi <[email protected]>
AuthorDate: Tue Sep 29 11:21:48 2026 +0800

    Fix schema existence check fail-open behavior
---
 .../iotdb/db/schemaengine/schemaregion/ISchemaRegion.java      | 10 ++++------
 .../schemaengine/schemaregion/impl/SchemaRegionMemoryImpl.java |  8 +++++---
 .../schemaengine/schemaregion/impl/SchemaRegionPBTreeImpl.java |  8 +++++---
 .../schemaregion/mtree/impl/pbtree/MTreeBelowSGCachedImpl.java |  4 +++-
 4 files changed, 17 insertions(+), 13 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 540d5d4274c..7ae4dae0d94 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
@@ -77,7 +77,7 @@ import java.util.concurrent.atomic.AtomicInteger;
  * <p>The interfaces are divided as following:
  *
  * <ol>
- *   <li>Interfaces for initialization、recover and clear
+ *   <li>Interfaces for initialization閵嗕购ecover and clear
  *   <li>Interfaces for schema region Info query and operation
  *   <li>Interfaces for Timeseries operation
  *   <li>Interfaces for metadata info Query
@@ -91,7 +91,7 @@ import java.util.concurrent.atomic.AtomicInteger;
  */
 public interface ISchemaRegion {
 
-  // region Interfaces for initialization、recover and clear
+  // region Interfaces for initialization閵嗕购ecover and clear
   void init() throws MetadataException;
 
   /** clear all metadata components of this schemaRegion */
@@ -154,10 +154,8 @@ 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. 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)
+   *     example, a MeasurementAlreadyExistException means this measurement 
exists. An empty map
+   *     means that no measurement exists and can be created.
    */
   Map<Integer, MetadataException> checkMeasurementExistence(
       final PartialPath devicePath,
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 7c6fd4d7e53..2536c2f4bb0 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
@@ -182,7 +182,7 @@ import static 
org.apache.tsfile.common.constant.TsFileConstant.PATH_SEPARATOR;
  * <p>The codes are divided into the following code regions:
  *
  * <ol>
- *   <li>Interfaces and Implementation for initialization、recover and clear
+ *   <li>Interfaces and Implementation for initialization閵嗕购ecover and clear
  *   <li>Interfaces and Implementation for schema region Info query and 
operation
  *   <li>Interfaces and Implementation for Timeseries operation
  *   <li>Interfaces for auto create device
@@ -228,7 +228,7 @@ public class SchemaRegionMemoryImpl implements 
ISchemaRegion {
   private IDeviceAttributeStore deviceAttributeStore;
   private DeviceAttributeCacheUpdater deviceAttributeCacheUpdater;
 
-  // region Interfaces and Implementation of initialization、snapshot、recover 
and clear
+  // region Interfaces and Implementation of initialization閵嗕够napshot閵嗕购ecover 
and clear
   public SchemaRegionMemoryImpl(final ISchemaRegionParams schemaRegionParams)
       throws MetadataException {
 
@@ -895,8 +895,10 @@ public class SchemaRegionMemoryImpl implements 
ISchemaRegion {
       PartialPath devicePath, List<String> measurementList, List<String> 
aliasList) {
     try {
       return mTree.checkMeasurementExistence(devicePath, measurementList, 
aliasList);
-    } catch (final Exception e) {
+    } catch (final PathNotExistException e) {
       return Collections.emptyMap();
+    } catch (final MetadataException e) {
+      return Collections.singletonMap(0, e);
     }
   }
 
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 502afed74ea..dba71f86cff 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
@@ -143,7 +143,7 @@ import static 
org.apache.tsfile.common.constant.TsFileConstant.PATH_SEPARATOR;
  * <p>The codes are divided into the following code regions:
  *
  * <ol>
- *   <li>Interfaces and Implementation for initialization、recover and clear
+ *   <li>Interfaces and Implementation for initialization閵嗕购ecover and clear
  *   <li>Interfaces and Implementation for schema region Info query and 
operation
  *   <li>Interfaces and Implementation for Timeseries operation
  *   <li>Interfaces for auto create device
@@ -186,7 +186,7 @@ public class SchemaRegionPBTreeImpl implements 
ISchemaRegion {
   private MTreeBelowSGCachedImpl mtree;
   private TagManager tagManager;
 
-  // region Interfaces and Implementation of initialization、snapshot、recover 
and clear
+  // region Interfaces and Implementation of initialization閵嗕够napshot閵嗕购ecover 
and clear
   public SchemaRegionPBTreeImpl(ISchemaRegionParams schemaRegionParams) throws 
MetadataException {
 
     storageGroupFullPath = schemaRegionParams.getDatabase();
@@ -878,8 +878,10 @@ public class SchemaRegionPBTreeImpl implements 
ISchemaRegion {
       PartialPath devicePath, List<String> measurementList, List<String> 
aliasList) {
     try {
       return mtree.checkMeasurementExistence(devicePath, measurementList, 
aliasList);
-    } catch (final Exception e) {
+    } catch (final PathNotExistException e) {
       return Collections.emptyMap();
+    } catch (final MetadataException e) {
+      return Collections.singletonMap(0, e);
     }
   }
 
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/pbtree/MTreeBelowSGCachedImpl.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/pbtree/MTreeBelowSGCachedImpl.java
index 188620ef6a5..51cf4df049f 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/pbtree/MTreeBelowSGCachedImpl.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/pbtree/MTreeBelowSGCachedImpl.java
@@ -608,8 +608,10 @@ public class MTreeBelowSGCachedImpl {
     ICachedMNode device;
     try {
       device = getNodeByPath(devicePath);
-    } catch (MetadataException e) {
+    } catch (PathNotExistException e) {
       return Collections.emptyMap();
+    } catch (MetadataException e) {
+      return Collections.singletonMap(0, e);
     }
     try {
       if (!device.isDevice()) {

Reply via email to