From 0efbdef9a0b4b85674019284b51837d99d00c1b6 Mon Sep 17 00:00:00 2001 From: Kaijie Chen Date: Wed, 12 Jun 2024 22:02:06 +0800 Subject: [PATCH] [fix](load) fix NPE in LoadManager#jobRemovedTrigger() (#36173) ## Proposed changes fix NPE ``` LoadManager.removeLoadJobIf():490] end to removeOldLoadJob, removeJobNum:6 cost:0 ms 2024-06-11 15:09:58,188 ERROR (LoadLabelCleaner|100) [Daemon.run():118] daemon thread got exception. name: LoadLabelCleaner java.lang.NullPointerException: Cannot invoke "java.util.List.remove(Object)" because "list" is null at org.apache.doris.load.loadv2.LoadManager.jobRemovedTrigger(LoadManager.java:458) ~[doris-fe.jar:1.2-SNAPSHOT] at org.apache.doris.load.loadv2.LoadManager.removeLoadJobIf(LoadManager.java:483) ~[doris-fe.jar:1.2-SNAPSHOT] at org.apache.doris.load.loadv2.LoadManager.removeOldLoadJob(LoadManager.java:426) ~[doris-fe.jar:1.2-SNAPSHOT] at org.apache.doris.catalog.Env$1.runAfterCatalogReady(Env.java:2619) ~[doris-fe.jar:1.2-SNAPSHOT] at org.apache.doris.common.util.MasterDaemon.runOneCycle(MasterDaemon.java:58) ~[doris-fe.jar:1.2-SNAPSHOT] at org.apache.doris.common.util.Daemon.run(Daemon.java:116) ~[doris-fe.jar:1.2-SNAPSHOT] ``` --- .../org/apache/doris/load/loadv2/LoadManager.java | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/load/loadv2/LoadManager.java b/fe/fe-core/src/main/java/org/apache/doris/load/loadv2/LoadManager.java index f5aa1317e59f1d..122182c65c0968 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/load/loadv2/LoadManager.java +++ b/fe/fe-core/src/main/java/org/apache/doris/load/loadv2/LoadManager.java @@ -451,15 +451,21 @@ public void removeOverLimitLoadJob() { } private void jobRemovedTrigger(LoadJob job) { - Map> map = dbIdToLabelToLoadJobs.get(job.getDbId()); - List list = map.get(job.getLabel()); - list.remove(job); if (job instanceof SparkLoadJob) { ((SparkLoadJob) job).clearSparkLauncherLog(); } if (job instanceof BulkLoadJob) { ((BulkLoadJob) job).recycleProgress(); } + Map> map = dbIdToLabelToLoadJobs.get(job.getDbId()); + if (map == null) { + return; + } + List list = map.get(job.getLabel()); + if (list == null) { + return; + } + list.remove(job); if (list.isEmpty()) { map.remove(job.getLabel()); }