From 3dc0990cbb9e9e4049fa26d9df563d054ff98f2d Mon Sep 17 00:00:00 2001 From: terrytlu Date: Fri, 22 Dec 2023 11:00:14 +0800 Subject: [PATCH] HBASE-28276 Change zookeeper.zone.parent and restart hbase cluster, hmaster will be stuck waiting for hbase:meta online --- .../apache/hadoop/hbase/master/HMaster.java | 24 ++++++++++++++----- 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java index 78c982c14c..bd4572616c 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java @@ -49,6 +49,7 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; import java.util.concurrent.atomic.AtomicInteger; import java.util.function.Function; +import java.util.function.Predicate; import java.util.regex.Pattern; import java.util.stream.Collectors; import javax.servlet.ServletException; @@ -1016,12 +1017,23 @@ public class HMaster extends HRegionServer implements MasterServices { if (rs.isOffline()) { Optional optProc = procedureExecutor.getProcedures().stream() .filter(p -> p instanceof InitMetaProcedure).map(o -> (InitMetaProcedure) o).findAny(); - initMetaProc = optProc.orElseGet(() -> { - // schedule an init meta procedure if meta has not been deployed yet - InitMetaProcedure temp = new InitMetaProcedure(); - procedureExecutor.submitProcedure(temp); - return temp; - }); + + Optional> optRitProc = procedureExecutor.getProcedures().stream() + .filter(p -> p instanceof TransitRegionStateProcedure) + .filter(o -> + Integer.valueOf( ((TransitRegionStateProcedure) o).getTableName().compareTo(TableName.META_TABLE_NAME)).equals(0)) + .findAny(); + if(optRitProc.isPresent()){ + LOG.info("TransitRegionStateProcedure for hbase:meta already exists, skip submit InitMetaProcedure."); + initMetaProc = null; + }else{ + initMetaProc = optProc.orElseGet(() -> { + // schedule an init meta procedure if meta has not been deployed yet + InitMetaProcedure temp = new InitMetaProcedure(); + procedureExecutor.submitProcedure(temp); + return temp; + }); + } } if (this.balancer instanceof FavoredNodesPromoter) { favoredNodesManager = new FavoredNodesManager(this); -- 2.34.1