diff --git a/src/main/java/org/apache/hadoop/hbase/master/handler/ServerShutdownHandler.java b/src/main/java/org/apache/hadoop/hbase/master/handler/ServerShutdownHandler.java index 1625fbd..d306770 100644 --- a/src/main/java/org/apache/hadoop/hbase/master/handler/ServerShutdownHandler.java +++ b/src/main/java/org/apache/hadoop/hbase/master/handler/ServerShutdownHandler.java @@ -137,13 +137,15 @@ public class ServerShutdownHandler extends EventHandler { // Skip regions that were in transition unless CLOSING or PENDING_CLOSE for (RegionState rit : regionsInTransition) { if (!rit.isClosing() && !rit.isPendingClose()) { + LOG.debug("Removed " + rit.getRegion().getRegionNameAsString() + + " from list of regions to assign because in RIT"); hris.remove(rit.getRegion()); } } - LOG.info("Reassigning " + hris.size() + " region(s) that " + serverName - + " was carrying (skipping " + regionsInTransition.size() + - " regions(s) that are already in transition)"); + LOG.info("Reassigning " + hris.size() + " region(s) that " + serverName + + " was carrying (skipping " + regionsInTransition.size() + + " regions(s) that are already in transition)"); // Iterate regions that were on this server and assign them for (Map.Entry e: hris.entrySet()) { @@ -175,6 +177,8 @@ public class ServerShutdownHandler extends EventHandler { hri.getTableDesc().getNameAsString()); if (disabled) return false; if (hri.isOffline() && hri.isSplit()) { + LOG.debug("Offlined and split region " + hri.getRegionNameAsString() + + "; checking daughter presence"); fixupDaughters(result, assignmentManager, catalogTracker); return false; } @@ -208,13 +212,16 @@ public class ServerShutdownHandler extends EventHandler { throws IOException { byte [] bytes = result.getValue(HConstants.CATALOG_FAMILY, qualifier); if (bytes == null || bytes.length <= 0) return; - HRegionInfo hri = Writables.getHRegionInfo(bytes); + HRegionInfo hri = Writables.getHRegionInfoOrNull(bytes); + if (hri == null) return; Pair pair = MetaReader.getRegion(catalogTracker, hri.getRegionName()); if (pair == null || pair.getFirst() == null) { LOG.info("Fixup; missing daughter " + hri.getEncodedName()); MetaEditor.addDaughter(catalogTracker, hri, null); assignmentManager.assign(hri, true); + } else { + LOG.debug("Daughter " + hri.getRegionNameAsString() + " present"); } } } diff --git a/src/main/java/org/apache/hadoop/hbase/regionserver/handler/OpenRegionHandler.java b/src/main/java/org/apache/hadoop/hbase/regionserver/handler/OpenRegionHandler.java index d3c78e1..0730fe1 100644 --- a/src/main/java/org/apache/hadoop/hbase/regionserver/handler/OpenRegionHandler.java +++ b/src/main/java/org/apache/hadoop/hbase/regionserver/handler/OpenRegionHandler.java @@ -165,7 +165,7 @@ public class OpenRegionHandler extends EventHandler { } // Was there an exception opening the region? This should trigger on // InterruptedException too. If so, we failed. - return t.getException() == null; + return !t.interrupted() && t.getException() == null; } /** diff --git a/src/main/java/org/apache/hadoop/hbase/util/HBaseFsck.java b/src/main/java/org/apache/hadoop/hbase/util/HBaseFsck.java index f20c28c..6a4b078 100644 --- a/src/main/java/org/apache/hadoop/hbase/util/HBaseFsck.java +++ b/src/main/java/org/apache/hadoop/hbase/util/HBaseFsck.java @@ -385,7 +385,9 @@ public class HBaseFsck { boolean deploymentMatchesMeta = hasMetaAssignment && isDeployed && !isMultiplyDeployed && hbi.metaEntry.regionServer.equals(hbi.deployedOn.get(0)); - boolean shouldBeDeployed = inMeta && !isTableDisabled(hbi.metaEntry); + boolean splitParent = + (hbi.metaEntry == null)? false: hbi.metaEntry.isSplit() && hbi.metaEntry.isOffline(); + boolean shouldBeDeployed = inMeta && !isTableDisabled(hbi.metaEntry) && !splitParent; boolean recentlyModified = hbi.foundRegionDir != null && hbi.foundRegionDir.getModificationTime() + timelag > System.currentTimeMillis(); @@ -397,7 +399,8 @@ public class HBaseFsck { return; } else if (inMeta && !shouldBeDeployed && !isDeployed) { // offline regions shouldn't cause complaints - LOG.debug("Region " + descriptiveName + " offline, ignoring."); + LOG.debug("Region " + descriptiveName + " offline, splitParent=" + splitParent + + ", ignoring."); return; } else if (recentlyModified) { LOG.info("Region " + descriptiveName + " was recently modified -- skipping");