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);
+ }
}
}