From a25eac67c77dcc320b6a1ef593e5f4e363786362 Mon Sep 17 00:00:00 2001 From: tjq Date: Fri, 27 Jan 2023 13:13:56 +0800 Subject: [PATCH] fix: create TaskTracker failed causes HashMap to deadlock --- .../core/tracker/manager/LightTaskTrackerManager.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/powerjob-worker/src/main/java/tech/powerjob/worker/core/tracker/manager/LightTaskTrackerManager.java b/powerjob-worker/src/main/java/tech/powerjob/worker/core/tracker/manager/LightTaskTrackerManager.java index eef65f39..5ed0f60e 100644 --- a/powerjob-worker/src/main/java/tech/powerjob/worker/core/tracker/manager/LightTaskTrackerManager.java +++ b/powerjob-worker/src/main/java/tech/powerjob/worker/core/tracker/manager/LightTaskTrackerManager.java @@ -21,8 +21,11 @@ public class LightTaskTrackerManager { return INSTANCE_ID_2_TASK_TRACKER.get(instanceId); } - public static LightTaskTracker removeTaskTracker(Long instanceId) { - return INSTANCE_ID_2_TASK_TRACKER.remove(instanceId); + public static void removeTaskTracker(Long instanceId) { + // 忽略印度的 IDE 警告,这个判断非常有用!!!不加这个判断会导致:如果创建 TT(先执行 computeIfAbsent 正在将TT添加到 HashMap) 时报错,TT 主动调用 destroy 销毁(从 HashMap移除该 TT)时死锁 + if (INSTANCE_ID_2_TASK_TRACKER.containsKey(instanceId)) { + INSTANCE_ID_2_TASK_TRACKER.remove(instanceId); + } } public static void atomicCreateTaskTracker(Long instanceId, Function creator) {