From 2c3ba7781feab7e074d24b81073753383329e576 Mon Sep 17 00:00:00 2001 From: gengjun-git Date: Wed, 13 Mar 2024 19:15:34 +0800 Subject: [PATCH] [BugFix] Fix observer node recovery bug (#40815) ## Why I'm doing: When cluster is recovered from observer node, the `show frontends` will throw exception ``` 2024-02-05 17:39:14,562 WARN (starrocks-mysql-nio-pool-2|206) [StmtExecutor.execute():681] execute Exception, sql show proc '/frontends' java.lang.NullPointerException: null at com.sleepycat.je.rep.util.ReplicationGroupAdmin.getMasterSocket(ReplicationGroupAdmin.java:191) ~[starrocks-bdb-je-18.3.16.jar:?] at com.sleepycat.je.rep.util.ReplicationGroupAdmin.doMessageExchange(ReplicationGroupAdmin.java:607) ~[starrocks-bdb-je-18.3.16.jar:?] at com.sleepycat.je.rep.util.ReplicationGroupAdmin.getGroup(ReplicationGroupAdmin.java:406) ~[starrocks-bdb-je-18.3.16.jar:?] at com.starrocks.ha.BDBHA.getElectableNodes(BDBHA.java:178) ~[starrocks-fe.jar:?] at com.starrocks.common.proc.FrontendsProcNode.getFrontendsInfo(FrontendsProcNode.java:96) ~[starrocks-fe.jar:?] at com.starrocks.common.proc.FrontendsProcNode.fetchResult(FrontendsProcNode.java:80) ~[starrocks-fe.jar:?] at com.starrocks.sql.ast.ShowProcStmt.getMetaData(ShowProcStmt.java:73) ~[starrocks-fe.jar:?] at com.starrocks.qe.ShowExecutor.handleShowProc(ShowExecutor.java:840) ~[starrocks-fe.jar:?] at com.starrocks.qe.ShowExecutor.execute(ShowExecutor.java:291) ~[starrocks-fe.jar:?] at com.starrocks.qe.StmtExecutor.handleShow(StmtExecutor.java:1517) ~[starrocks-fe.jar:?] at com.starrocks.qe.StmtExecutor.execute(StmtExecutor.java:621) ~[starrocks-fe.jar:?] at com.starrocks.qe.ConnectProcessor.handleQuery(ConnectProcessor.java:403) ~[starrocks-fe.jar:?] at com.starrocks.qe.ConnectProcessor.dispatch(ConnectProcessor.java:598) ~[starrocks-fe.jar:?] at com.starrocks.qe.ConnectProcessor.processOnce(ConnectProcessor.java:883) ~[starrocks-fe.jar:?] at com.starrocks.mysql.nio.ReadListener.lambda$handleEvent$0(ReadListener.java:69) ~[starrocks-fe.jar:?] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[?:?] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[?:?] at java.lang.Thread.run(Thread.java:834) ~[?:?] ``` ## What I'm doing: Add all type of nodes to ReplicationGroupAdmin. Signed-off-by: gengjun-git (cherry picked from commit 16618427d6b560d47143626fbffa878bf1a03b36) # Conflicts: # fe/fe-core/src/main/java/com/starrocks/journal/bdbje/BDBEnvironment.java --- .../java/com/starrocks/journal/bdbje/BDBEnvironment.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/fe/fe-core/src/main/java/com/starrocks/journal/bdbje/BDBEnvironment.java b/fe/fe-core/src/main/java/com/starrocks/journal/bdbje/BDBEnvironment.java index a0c6decf8ee24..9736dfbb2f76b 100644 --- a/fe/fe-core/src/main/java/com/starrocks/journal/bdbje/BDBEnvironment.java +++ b/fe/fe-core/src/main/java/com/starrocks/journal/bdbje/BDBEnvironment.java @@ -398,8 +398,13 @@ public void refreshLog(InsufficientLogException insufficientLogEx) { } public ReplicationGroupAdmin getReplicationGroupAdmin() { +<<<<<<< HEAD Set addrs = GlobalStateMgr.getCurrentState() .getFrontends(FrontendNodeType.FOLLOWER) +======= + Set addrs = GlobalStateMgr.getCurrentState().getNodeMgr() + .getFrontends(null) +>>>>>>> 16618427d6 ([BugFix] Fix observer node recovery bug (#40815)) .stream() .filter(Frontend::isAlive) .map(fe -> new InetSocketAddress(fe.getHost(), fe.getEditLogPort()))