Fix createView NPE issue when region migration #14746
Signed-off-by: OneSizeFitQuorum <tanxinyu@apache.org>
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/DataNodeRegionManager.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/DataNodeRegionManager.java
index 18ddd6d..1b474ac 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/DataNodeRegionManager.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/DataNodeRegionManager.java
@@ -100,8 +100,8 @@
public ReentrantReadWriteLock getRegionLock(ConsensusGroupId consensusGroupId) {
return consensusGroupId instanceof DataRegionId
- ? dataRegionLockMap.get((DataRegionId) consensusGroupId)
- : schemaRegionLockMap.get((SchemaRegionId) consensusGroupId);
+ ? dataRegionLockMap.get(consensusGroupId)
+ : schemaRegionLockMap.get(consensusGroupId);
}
public TSStatus createSchemaRegion(TRegionReplicaSet regionReplicaSet, String storageGroup) {
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 c518db0..666c53a 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
@@ -143,9 +143,14 @@
@SuppressWarnings("squid:S1181")
public RegionExecutionResult execute(ConsensusGroupId groupId, PlanNode planNode) {
try {
- WritePlanNodeExecutionContext context =
- new WritePlanNodeExecutionContext(groupId, regionManager.getRegionLock(groupId));
- return planNode.accept(executionVisitor, context);
+ ReentrantReadWriteLock lock = regionManager.getRegionLock(groupId);
+ if (lock == null) {
+ return RegionExecutionResult.create(
+ false,
+ "Failed to get the lock of the region because the region is not existed.",
+ RpcUtils.getStatus(TSStatusCode.NO_AVAILABLE_REGION_GROUP));
+ }
+ return planNode.accept(executionVisitor, new WritePlanNodeExecutionContext(groupId, lock));
} catch (Throwable e) {
LOGGER.warn(e.getMessage(), e);
return RegionExecutionResult.create(