diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/handler/MetaServerShutdownHandler.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/handler/MetaServerShutdownHandler.java index f4bc8c3..957548e 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/handler/MetaServerShutdownHandler.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/handler/MetaServerShutdownHandler.java @@ -91,13 +91,21 @@ public class MetaServerShutdownHandler extends ServerShutdownHandler { LOG.info("Server " + serverName + " was carrying META. Trying to assign."); am.regionOffline(HRegionInfo.FIRST_META_REGIONINFO); verifyAndAssignMetaWithRetries(); - } else if (!server.getMetaTableLocator().isLocationAvailable(this.server.getZooKeeper())) { - // the meta location as per master is null. This could happen in case when meta assignment - // in previous run failed, while meta znode has been updated to null. We should try to - // assign the meta again. - verifyAndAssignMetaWithRetries(); } else { - LOG.info("META has been assigned to otherwhere, skip assigning."); + final ServerName serverNameInZK = + server.getMetaTableLocator().getMetaRegionLocation(this.server.getZooKeeper()); + LOG.info("Zookeeper indicates that the META region was on server=" + + (serverNameInZK == null ? "null" : serverNameInZK) + + " We expected in server=" + serverName + " Trying to assign if server name matching"); + if (serverNameInZK == null || + serverNameInZK.equals(serverName)) { + // Note: the meta location as per master could be null when meta assignment + // in previous run failed, while meta znode has been updated to null. We should try to + // assign the meta again. + verifyAndAssignMetaWithRetries(); + } else { + LOG.info("META has been assigned to otherwhere, skip assigning."); + } } try {