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

tanxinyu 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 db103faa21a Fixed the NPE caused by concurrent alter of SchemaRegion 
#15331
db103faa21a is described below

commit db103faa21a194ae4f77251f6e88a56eabb02537
Author: Caideyipi <[email protected]>
AuthorDate: Mon Apr 14 15:22:53 2025 +0800

    Fixed the NPE caused by concurrent alter of SchemaRegion #15331
---
 .../execution/executor/RegionWriteExecutor.java    | 94 ++++++++++++++++++----
 1 file changed, 79 insertions(+), 15 deletions(-)

diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/executor/RegionWriteExecutor.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/executor/RegionWriteExecutor.java
index fc3013b6240..46a7cdbf7d0 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/executor/RegionWriteExecutor.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/executor/RegionWriteExecutor.java
@@ -49,11 +49,13 @@ import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.metadata.write.Bat
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.metadata.write.CreateAlignedTimeSeriesNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.metadata.write.CreateMultiTimeSeriesNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.metadata.write.CreateTimeSeriesNode;
+import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.metadata.write.DeleteTimeSeriesNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.metadata.write.InternalBatchActivateTemplateNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.metadata.write.InternalCreateMultiTimeSeriesNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.metadata.write.InternalCreateTimeSeriesNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.metadata.write.MeasurementGroup;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.metadata.write.view.CreateLogicalViewNode;
+import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.metadata.write.view.DeleteLogicalViewNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.pipe.PipeEnrichedDeleteDataNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.pipe.PipeEnrichedInsertNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.pipe.PipeEnrichedWritePlanNode;
@@ -366,6 +368,28 @@ public class RegionWriteExecutor {
       }
     }
 
+    @Override
+    public RegionExecutionResult visitDeleteTimeseries(
+        final DeleteTimeSeriesNode node, final WritePlanNodeExecutionContext 
context) {
+      context.getRegionWriteValidationRWLock().writeLock().lock();
+      try {
+        return super.visitDeleteTimeseries(node, context);
+      } finally {
+        context.getRegionWriteValidationRWLock().writeLock().unlock();
+      }
+    }
+
+    @Override
+    public RegionExecutionResult visitDeleteLogicalView(
+        final DeleteLogicalViewNode node, final WritePlanNodeExecutionContext 
context) {
+      context.getRegionWriteValidationRWLock().writeLock().lock();
+      try {
+        return super.visitDeleteLogicalView(node, context);
+      } finally {
+        context.getRegionWriteValidationRWLock().writeLock().unlock();
+      }
+    }
+
     @Override
     public RegionExecutionResult visitCreateTimeSeries(
         final CreateTimeSeriesNode node, final WritePlanNodeExecutionContext 
context) {
@@ -407,9 +431,17 @@ public class RegionWriteExecutor {
           context.getRegionWriteValidationRWLock().writeLock().unlock();
         }
       } else {
-        return receivedFromPipe
-            ? super.visitPipeEnrichedWritePlanNode(new 
PipeEnrichedWritePlanNode(node), context)
-            : super.visitCreateTimeSeries(node, context);
+        if (receivedFromPipe) {
+          context.getRegionWriteValidationRWLock().writeLock().lock();
+          try {
+            return super.visitPipeEnrichedWritePlanNode(
+                new PipeEnrichedWritePlanNode(node), context);
+          } finally {
+            context.getRegionWriteValidationRWLock().writeLock().unlock();
+          }
+        } else {
+          return super.visitCreateTimeSeries(node, context);
+        }
       }
     }
 
@@ -454,9 +486,17 @@ public class RegionWriteExecutor {
           context.getRegionWriteValidationRWLock().writeLock().unlock();
         }
       } else {
-        return receivedFromPipe
-            ? super.visitPipeEnrichedWritePlanNode(new 
PipeEnrichedWritePlanNode(node), context)
-            : super.visitCreateAlignedTimeSeries(node, context);
+        if (receivedFromPipe) {
+          context.getRegionWriteValidationRWLock().writeLock().lock();
+          try {
+            return super.visitPipeEnrichedWritePlanNode(
+                new PipeEnrichedWritePlanNode(node), context);
+          } finally {
+            context.getRegionWriteValidationRWLock().writeLock().unlock();
+          }
+        } else {
+          return super.visitCreateAlignedTimeSeries(node, context);
+        }
       }
     }
 
@@ -511,9 +551,17 @@ public class RegionWriteExecutor {
           context.getRegionWriteValidationRWLock().writeLock().unlock();
         }
       } else {
-        return receivedFromPipe
-            ? super.visitPipeEnrichedWritePlanNode(new 
PipeEnrichedWritePlanNode(node), context)
-            : super.visitCreateMultiTimeSeries(node, context);
+        if (receivedFromPipe) {
+          context.getRegionWriteValidationRWLock().writeLock().lock();
+          try {
+            return super.visitPipeEnrichedWritePlanNode(
+                new PipeEnrichedWritePlanNode(node), context);
+          } finally {
+            context.getRegionWriteValidationRWLock().writeLock().unlock();
+          }
+        } else {
+          return super.visitCreateMultiTimeSeries(node, context);
+        }
       }
     }
 
@@ -641,9 +689,17 @@ public class RegionWriteExecutor {
           context.getRegionWriteValidationRWLock().writeLock().unlock();
         }
       } else {
-        return receivedFromPipe
-            ? super.visitPipeEnrichedWritePlanNode(new 
PipeEnrichedWritePlanNode(node), context)
-            : super.visitInternalCreateTimeSeries(node, context);
+        if (receivedFromPipe) {
+          context.getRegionWriteValidationRWLock().writeLock().lock();
+          try {
+            return super.visitPipeEnrichedWritePlanNode(
+                new PipeEnrichedWritePlanNode(node), context);
+          } finally {
+            context.getRegionWriteValidationRWLock().writeLock().unlock();
+          }
+        } else {
+          return super.visitInternalCreateTimeSeries(node, context);
+        }
       }
     }
 
@@ -731,9 +787,17 @@ public class RegionWriteExecutor {
           context.getRegionWriteValidationRWLock().writeLock().unlock();
         }
       } else {
-        return receivedFromPipe
-            ? super.visitPipeEnrichedWritePlanNode(new 
PipeEnrichedWritePlanNode(node), context)
-            : super.visitInternalCreateMultiTimeSeries(node, context);
+        if (receivedFromPipe) {
+          context.getRegionWriteValidationRWLock().writeLock().lock();
+          try {
+            return super.visitPipeEnrichedWritePlanNode(
+                new PipeEnrichedWritePlanNode(node), context);
+          } finally {
+            context.getRegionWriteValidationRWLock().writeLock().unlock();
+          }
+        } else {
+          return super.visitInternalCreateMultiTimeSeries(node, context);
+        }
       }
     }
 

Reply via email to