You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by xi...@apache.org on 2023/04/08 06:42:48 UTC
[iotdb] branch master updated: Fix NPE when abort fragment instance (#9560)
This is an automated email from the ASF dual-hosted git repository.
xiangweiwei 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 0c0ae29a5c Fix NPE when abort fragment instance (#9560)
0c0ae29a5c is described below
commit 0c0ae29a5c61a468b700c475104a8150c8c4fb6b
Author: Xiangwei Wei <34...@users.noreply.github.com>
AuthorDate: Sat Apr 8 14:42:39 2023 +0800
Fix NPE when abort fragment instance (#9560)
---
.../db/mpp/execution/schedule/DriverScheduler.java | 30 +++++++++++++---------
1 file changed, 18 insertions(+), 12 deletions(-)
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/execution/schedule/DriverScheduler.java b/server/src/main/java/org/apache/iotdb/db/mpp/execution/schedule/DriverScheduler.java
index 25a8b66cc0..50862859e6 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/execution/schedule/DriverScheduler.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/execution/schedule/DriverScheduler.java
@@ -269,18 +269,24 @@ public class DriverScheduler implements IDriverScheduler, IService {
@Override
public void abortFragmentInstance(FragmentInstanceId instanceId) {
- Set<DriverTask> instanceRelatedTasks = queryMap.get(instanceId.getQueryId()).remove(instanceId);
- if (instanceRelatedTasks != null) {
- for (DriverTask task : instanceRelatedTasks) {
- if (task == null) {
- return;
- }
- task.lock();
- try {
- task.setAbortCause(DriverTaskAbortedException.BY_FRAGMENT_ABORT_CALLED);
- clearDriverTask(task);
- } finally {
- task.unlock();
+ Map<FragmentInstanceId, Set<DriverTask>> queryRelatedTasks =
+ queryMap.get(instanceId.getQueryId());
+ if (queryRelatedTasks != null) {
+ Set<DriverTask> instanceRelatedTasks = queryRelatedTasks.remove(instanceId);
+ if (instanceRelatedTasks != null) {
+ synchronized (instanceRelatedTasks) {
+ for (DriverTask task : instanceRelatedTasks) {
+ if (task == null) {
+ return;
+ }
+ task.lock();
+ try {
+ task.setAbortCause(DriverTaskAbortedException.BY_FRAGMENT_ABORT_CALLED);
+ clearDriverTask(task);
+ } finally {
+ task.unlock();
+ }
+ }
}
}
}