From fc500cb25daa1a8a1a26cd1cbf7980c1143d14fe Mon Sep 17 00:00:00 2001 From: meiyi Date: Mon, 11 Nov 2024 21:55:11 +0800 Subject: [PATCH] [fix](group commit) fix NPE in group commit select backend (#43629) Problem Summary: ``` 2024-11-11 12:00:12,200 WARN (mysql-nio-pool-24123|259) execute Exception. stmt[15559118, 7d88d2401de44f4b-8325fbee3de50791] java.lang.NullPointerException: Cannot invoke "org.apache.doris.system.Backend.isActive()" because "backend" is null at org.apache.doris.load.GroupCommitManager.getCachedBackend(GroupCommitManager.java:305) ~[doris-fe.jar:1.2-SNAPSHOT] at org.apache.doris.load.GroupCommitManager.selectBackendForCloudGroupCommitInternal(GroupCommitManager.java:251) ~[doris-fe.jar:1.2-SNAPSHOT] at org.apache.doris.load.GroupCommitManager.selectBackendForGroupCommitInternal(GroupCommitManager.java:239) ~[doris-fe.jar:1.2-SNAPSHOT] at org.apache.doris.load.GroupCommitManager.selectBackendForGroupCommit(GroupCommitManager.java:203) ~[doris-fe.jar:1.2-SNAPSHOT] at org.apache.doris.cloud.planner.CloudGroupCommitPlanner.selectBackends(CloudGroupCommitPlanner.java:49) ~[doris-fe.jar:1.2-SNAPSHOT] ``` Co-authored-by: meiyi --- .../java/org/apache/doris/load/GroupCommitManager.java | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/load/GroupCommitManager.java b/fe/fe-core/src/main/java/org/apache/doris/load/GroupCommitManager.java index 3177f96cb86905..3b108ed638aff9 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/load/GroupCommitManager.java +++ b/fe/fe-core/src/main/java/org/apache/doris/load/GroupCommitManager.java @@ -328,13 +328,11 @@ private Long getCachedBackend(String cluster, long tableId) { // Another thread gets the same tableId but can not find this tableId. // So another thread needs to get the random backend. Long backendId = tableToBeMap.get(encode(cluster, tableId)); - Backend backend; - if (backendId != null) { - backend = Env.getCurrentSystemInfo().getBackend(backendId); - } else { + if (backendId == null) { return null; } - if (backend.isActive() && !backend.isDecommissioned()) { + Backend backend = Env.getCurrentSystemInfo().getBackend(backendId); + if (backend != null && backend.isActive() && !backend.isDecommissioned()) { return backend.getId(); } else { tableToBeMap.remove(encode(cluster, tableId));