Index: src/java/org/apache/hadoop/hbase/client/HTable.java =================================================================== --- src/java/org/apache/hadoop/hbase/client/HTable.java (revision 662835) +++ src/java/org/apache/hadoop/hbase/client/HTable.java (working copy) @@ -197,7 +197,7 @@ MetaScannerVisitor visitor = new MetaScannerVisitor() { @SuppressWarnings("unused") public boolean processRow(@SuppressWarnings("unused") RowResult rowResult, - @SuppressWarnings("unused") HRegionLocation metaLocation, + @SuppressWarnings("unused") HRegionLocation regionLocation, HRegionInfo info) throws IOException { if (!(Bytes.equals(info.getTableDesc().getName(), getTableName()))) { @@ -228,13 +228,14 @@ MetaScannerVisitor visitor = new MetaScannerVisitor() { @SuppressWarnings("unused") public boolean processRow(@SuppressWarnings("unused") RowResult rowResult, - HRegionLocation metaLocation, HRegionInfo info) + HRegionLocation regionLocation, HRegionInfo info) throws IOException { if (!(Bytes.equals(info.getTableDesc().getName(), getTableName()))) { return false; } + if (!(info.isOffline() || info.isSplit())) { - regionMap.put(info, metaLocation.getServerAddress()); + regionMap.put(info, regionLocation.getServerAddress()); } return true; } Index: src/java/org/apache/hadoop/hbase/client/HConnectionManager.java =================================================================== --- src/java/org/apache/hadoop/hbase/client/HConnectionManager.java (revision 662835) +++ src/java/org/apache/hadoop/hbase/client/HConnectionManager.java (working copy) @@ -268,7 +268,7 @@ MetaScannerVisitor visitor = new MetaScannerVisitor() { public boolean processRow(RowResult rowResult, - HRegionLocation metaLocation, HRegionInfo info) throws IOException { + HRegionLocation regionLocation, HRegionInfo info) throws IOException { // Only examine the rows where the startKey is zero length if (info.getStartKey().length == 0) { Index: src/java/org/apache/hadoop/hbase/client/MetaScanner.java =================================================================== --- src/java/org/apache/hadoop/hbase/client/MetaScanner.java (revision 662835) +++ src/java/org/apache/hadoop/hbase/client/MetaScanner.java (working copy) @@ -44,7 +44,6 @@ MetaScannerVisitor visitor, byte[] tableName) throws IOException { HConnection connection = HConnectionManager.getConnection(configuration); - HRegionLocation metaLocation = null; boolean toContinue = true; byte [] startRow = Bytes.equals(tableName, EMPTY_START_ROW)? tableName: HRegionInfo.createRegionName(tableName, null, NINES); @@ -57,15 +56,16 @@ try { // Open scanner connection.getRegionServerWithRetries(callable); - metaLocation = connection.locateRegion(META_TABLE_NAME, startRow); while (toContinue) { RowResult rowResult = connection.getRegionServerWithRetries(callable); if (rowResult == null || rowResult.size() == 0) { break; } - HRegionInfo info = Writables. - getHRegionInfo(rowResult.get(COL_REGIONINFO)); - toContinue = visitor.processRow(rowResult, metaLocation, info); + HRegionInfo info = Writables.getHRegionInfo(rowResult + .get(COL_REGIONINFO)); + HRegionLocation regionLocation = connection.locateRegion(HRegionInfo + .getTableNameFromRegionName(info.getRegionName()), startRow); + toContinue = visitor.processRow(rowResult, regionLocation, info); } // Advance the startRow to the end key of the current region startRow = callable.getHRegionInfo().getEndKey(); @@ -88,11 +88,11 @@ * unnecessary for some reason. * * @param rowResult - * @param metaLocation + * @param regionLocation * @return A boolean to know if it should continue to loop in the region * @throws IOException */ public boolean processRow(RowResult rowResult, - HRegionLocation metaLocation, HRegionInfo info) throws IOException; + HRegionLocation regionLocation, HRegionInfo info) throws IOException; } }