Index: src/main/java/org/apache/hadoop/hbase/regionserver/handler/OpenRegionHandler.java =================================================================== --- src/main/java/org/apache/hadoop/hbase/regionserver/handler/OpenRegionHandler.java (revision 1332076) +++ src/main/java/org/apache/hadoop/hbase/regionserver/handler/OpenRegionHandler.java (working copy) @@ -86,6 +86,7 @@ @Override public void process() throws IOException { + boolean openedRegion = false; try { final String name = regionInfo.getRegionNameAsString(); if (this.server.isStopped() || this.rsServices.isStopping()) { @@ -125,6 +126,11 @@ return; } + // If catalog tables add to online regions + // before transitioning to opened. + if (region.getRegionInfo().isMetaTable()) { + this.rsServices.addToOnlineRegions(region); + } if (!transitionToOpened(region)) { // If we fail to transition to opened, it's because of one of two cases: // (a) we lost our ZK lease @@ -136,12 +142,18 @@ return; } // Successful region open, and add it to OnlineRegions - this.rsServices.addToOnlineRegions(region); + if (!region.getRegionInfo().isMetaTable()) { + this.rsServices.addToOnlineRegions(region); + } + openedRegion = true; // Done! Successful region open LOG.debug("Opened " + name + " on server:" + this.server.getServerName()); } finally { + if (!openedRegion && regionInfo.isMetaTable()) { + this.rsServices.removeFromOnlineRegions(regionInfo.getEncodedName()); + } this.rsServices.getRegionsInTransitionInRS(). remove(this.regionInfo.getEncodedNameAsBytes()); }