diff --git a/src/main/java/org/apache/hadoop/hbase/catalog/MetaReader.java b/src/main/java/org/apache/hadoop/hbase/catalog/MetaReader.java index 8556595..9f295ae 100644 --- a/src/main/java/org/apache/hadoop/hbase/catalog/MetaReader.java +++ b/src/main/java/org/apache/hadoop/hbase/catalog/MetaReader.java @@ -325,9 +325,10 @@ public class MetaReader { */ public static Pair metaRowToRegionPairWithInfo( Result data) throws IOException { - HRegionInfo info = Writables.getHRegionInfo( - data.getValue(HConstants.CATALOG_FAMILY, - HConstants.REGIONINFO_QUALIFIER)); + byte [] bytes = data.getValue(HConstants.CATALOG_FAMILY, + HConstants.REGIONINFO_QUALIFIER); + if (bytes == null) return null; + HRegionInfo info = Writables.getHRegionInfo(bytes); final byte[] value = data.getValue(HConstants.CATALOG_FAMILY, HConstants.SERVER_QUALIFIER); if (value != null && value.length > 0) { @@ -529,4 +530,4 @@ public class MetaReader { */ public boolean visit(final Result r) throws IOException; } -} \ No newline at end of file +} diff --git a/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java b/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java index a6cca48..1c6fbf0 100644 --- a/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java +++ b/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java @@ -737,11 +737,21 @@ public class HBaseAdmin implements Abortable { HServerAddress hsa = new HServerAddress(hostAndPort); Pair pair = MetaReader.getRegion(ct, regionname); - closeRegion(hsa, pair.getFirst()); + if (pair == null || pair.getSecond() == null) { + LOG.info("No server in .META. for " + + Bytes.toString(regionname) + "; pair=" + pair); + } else { + closeRegion(hsa, pair.getFirst()); + } } else { Pair pair = MetaReader.getRegion(ct, regionname); - closeRegion(pair.getSecond(), pair.getFirst()); + if (pair == null || pair.getSecond() == null) { + LOG.info("No server in .META. for " + + Bytes.toString(regionname) + "; pair=" + pair); + } else { + closeRegion(pair.getSecond(), pair.getFirst()); + } } } finally { cleanupCatalogTracker(ct); @@ -783,12 +793,18 @@ public class HBaseAdmin implements Abortable { if (isRegionName) { Pair pair = MetaReader.getRegion(getCatalogTracker(), tableNameOrRegionName); - flush(pair.getSecond(), pair.getFirst()); + if (pair == null || pair.getSecond() == null) { + LOG.info("No server in .META. for " + + Bytes.toString(tableNameOrRegionName) + "; pair=" + pair); + } else { + flush(pair.getSecond(), pair.getFirst()); + } } else { List> pairs = MetaReader.getTableRegionsAndLocations(getCatalogTracker(), Bytes.toString(tableNameOrRegionName)); for (Pair pair: pairs) { + if (pair.getSecond() == null) continue; flush(pair.getSecond(), pair.getFirst()); } } @@ -871,12 +887,18 @@ public class HBaseAdmin implements Abortable { if (isRegionName(tableNameOrRegionName)) { Pair pair = MetaReader.getRegion(ct, tableNameOrRegionName); - compact(pair.getSecond(), pair.getFirst(), major); + if (pair == null || pair.getSecond() == null) { + LOG.info("No server in .META. for " + + Bytes.toString(tableNameOrRegionName) + "; pair=" + pair); + } else { + compact(pair.getSecond(), pair.getFirst(), major); + } } else { List> pairs = MetaReader.getTableRegionsAndLocations(ct, Bytes.toString(tableNameOrRegionName)); for (Pair pair: pairs) { + if (pair.getSecond() == null) continue; compact(pair.getSecond(), pair.getFirst(), major); } } @@ -956,12 +978,19 @@ public class HBaseAdmin implements Abortable { // Its a possible region name. Pair pair = MetaReader.getRegion(getCatalogTracker(), tableNameOrRegionName); - split(pair.getSecond(), pair.getFirst()); + if (pair == null || pair.getSecond() == null) { + LOG.info("No server in .META. for " + + Bytes.toString(tableNameOrRegionName) + "; pair=" + pair); + } else { + split(pair.getSecond(), pair.getFirst()); + } } else { List> pairs = MetaReader.getTableRegionsAndLocations(getCatalogTracker(), Bytes.toString(tableNameOrRegionName)); for (Pair pair: pairs) { + // May not be a server for a particular row + if (pair.getSecond() == null) continue; split(pair.getSecond(), pair.getFirst()); } } diff --git a/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java b/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java index d383e2b..4504737 100644 --- a/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java +++ b/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java @@ -1199,6 +1199,7 @@ public class AssignmentManager extends ZooKeeperListener { for (Result result : results) { Pair region = MetaReader.metaRowToRegionPairWithInfo(result); + if (region == null) continue; HServerInfo regionLocation = region.getSecond(); HRegionInfo regionInfo = region.getFirst(); if (regionLocation == null) {