Index: hbase-client/src/main/java/org/apache/hadoop/hbase/client/HConnectionManager.java =================================================================== --- hbase-client/src/main/java/org/apache/hadoop/hbase/client/HConnectionManager.java (revision 1507104) +++ hbase-client/src/main/java/org/apache/hadoop/hbase/client/HConnectionManager.java (working copy) @@ -677,7 +677,7 @@ return true; } }; - MetaScanner.metaScan(conf, visitor, tableName); + MetaScanner.metaScan(conf, this, visitor, tableName); return available.get() && (regionCount.get() > 0); } @@ -717,7 +717,7 @@ return true; } }; - MetaScanner.metaScan(conf, visitor, tableName); + MetaScanner.metaScan(conf, this, visitor, tableName); // +1 needs to be added so that the empty start row is also taken into account return available.get() && (regionCount.get() == splitKeys.length + 1); } @@ -746,8 +746,8 @@ @Override public List locateRegions(final byte[] tableName, final boolean useCache, final boolean offlined) throws IOException { - NavigableMap regions = MetaScanner.allTableRegions(conf, tableName, - offlined); + NavigableMap regions = MetaScanner.allTableRegions(conf, this, + tableName, offlined); final List locations = new ArrayList(); for (HRegionInfo regionInfo : regions.keySet()) { locations.add(locateRegion(tableName, regionInfo.getStartKey(), useCache, true)); @@ -838,8 +838,8 @@ }; try { // pre-fetch certain number of regions info at region cache. - MetaScanner.metaScan(conf, visitor, tableName, row, - this.prefetchRegionLimit); + MetaScanner.metaScan(conf, this, visitor, tableName, row, + this.prefetchRegionLimit, HConstants.META_TABLE_NAME); } catch (IOException e) { LOG.warn("Encountered problems when prefetch META table: ", e); } Index: hbase-client/src/main/java/org/apache/hadoop/hbase/client/HTable.java =================================================================== --- hbase-client/src/main/java/org/apache/hadoop/hbase/client/HTable.java (revision 1507104) +++ hbase-client/src/main/java/org/apache/hadoop/hbase/client/HTable.java (working copy) @@ -227,9 +227,6 @@ */ public HTable(final byte[] tableName, final HConnection connection, final ExecutorService pool) throws IOException { - if (pool == null || pool.isShutdown()) { - throw new IllegalArgumentException("Pool is null or shut down."); - } if (connection == null || connection.isClosed()) { throw new IllegalArgumentException("Connection is null or closed."); } @@ -501,7 +498,7 @@ */ public NavigableMap getRegionLocations() throws IOException { // TODO: Odd that this returns a Map of HRI to SN whereas getRegionLocation, singular, returns an HRegionLocation. - return MetaScanner.allTableRegions(getConfiguration(), getTableName(), false); + return MetaScanner.allTableRegions(getConfiguration(), getConnection(), getTableName(), false); } /** Index: hbase-client/src/main/java/org/apache/hadoop/hbase/client/MetaScanner.java =================================================================== --- hbase-client/src/main/java/org/apache/hadoop/hbase/client/MetaScanner.java (revision 1507104) +++ hbase-client/src/main/java/org/apache/hadoop/hbase/client/MetaScanner.java (working copy) @@ -82,6 +82,24 @@ /** * Scans the meta table and calls a visitor on each RowResult. Uses a table + * name to locate meta regions. + * + * @param configuration config + * @param connection connection to use internally (null to use a new instance) + * @param visitor visitor object + * @param userTableName User table name in meta table to start scan at. Pass + * null if not interested in a particular table. + * @throws IOException e + */ + public static void metaScan(Configuration configuration, HConnection connection, + MetaScannerVisitor visitor, byte [] userTableName) + throws IOException { + metaScan(configuration, connection, visitor, userTableName, null, Integer.MAX_VALUE, + HConstants.META_TABLE_NAME); + } + + /** + * Scans the meta table and calls a visitor on each RowResult. Uses a table * name and a row name to locate meta regions. And it only scans at most * rowLimit of rows. * @@ -99,7 +117,7 @@ MetaScannerVisitor visitor, byte [] userTableName, byte[] row, int rowLimit) throws IOException { - metaScan(configuration, visitor, userTableName, row, rowLimit, + metaScan(configuration, null, visitor, userTableName, row, rowLimit, HConstants.META_TABLE_NAME); } @@ -109,6 +127,7 @@ * rowLimit of rows. * * @param configuration HBase configuration. + * @param connection connection to use internally (null to use a new instance) * @param visitor Visitor object. Closes the visitor before returning. * @param tableName User table name in meta table to start scan at. Pass * null if not interested in a particular table. @@ -119,12 +138,17 @@ * @param metaTableName Meta table to scan, root or meta. * @throws IOException e */ - public static void metaScan(Configuration configuration, + public static void metaScan(Configuration configuration, HConnection connection, final MetaScannerVisitor visitor, final byte[] tableName, final byte[] row, final int rowLimit, final byte[] metaTableName) throws IOException { int rowUpperLimit = rowLimit > 0 ? rowLimit: Integer.MAX_VALUE; - HTable metaTable = new HTable(configuration, HConstants.META_TABLE_NAME); + HTable metaTable; + if (connection == null) { + metaTable = new HTable(configuration, HConstants.META_TABLE_NAME, null); + } else { + metaTable = new HTable(HConstants.META_TABLE_NAME, connection, null); + } // Calculate startrow for scan. byte[] startRow; ResultScanner scanner = null; @@ -268,6 +292,7 @@ * @throws IOException */ public static NavigableMap allTableRegions(Configuration conf, + HConnection connection, final byte [] tablename, final boolean offlined) throws IOException { final NavigableMap regions = new TreeMap(); @@ -280,7 +305,7 @@ return true; } }; - metaScan(conf, visitor, tablename); + metaScan(conf, connection, visitor, tablename); return regions; } Index: hbase-server/src/main/java/org/apache/hadoop/hbase/rest/RegionsResource.java =================================================================== --- hbase-server/src/main/java/org/apache/hadoop/hbase/rest/RegionsResource.java (revision 1507104) +++ hbase-server/src/main/java/org/apache/hadoop/hbase/rest/RegionsResource.java (working copy) @@ -77,7 +77,7 @@ String tableName = tableResource.getName(); TableInfoModel model = new TableInfoModel(tableName); Map regions = MetaScanner.allTableRegions( - servlet.getConfiguration(), Bytes.toBytes(tableName), false); + servlet.getConfiguration(), null, Bytes.toBytes(tableName), false); for (Map.Entry e: regions.entrySet()) { HRegionInfo hri = e.getKey(); ServerName addr = e.getValue(); Index: hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestMetaScanner.java =================================================================== --- hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestMetaScanner.java (revision 1507104) +++ hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestMetaScanner.java (working copy) @@ -188,7 +188,7 @@ while(!isStopped()) { try { NavigableMap regions = - MetaScanner.allTableRegions(TEST_UTIL.getConfiguration(), TABLENAME, false); + MetaScanner.allTableRegions(TEST_UTIL.getConfiguration(), null, TABLENAME, false); LOG.info("-------"); byte[] lastEndKey = HConstants.EMPTY_START_ROW; Index: hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestEndToEndSplitTransaction.java =================================================================== --- hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestEndToEndSplitTransaction.java (revision 1507104) +++ hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestEndToEndSplitTransaction.java (working copy) @@ -222,7 +222,8 @@ try { Random random = new Random(); for (int i=0; i< 5; i++) { - NavigableMap regions = MetaScanner.allTableRegions(conf, tableName, false); + NavigableMap regions = MetaScanner.allTableRegions(conf, null, + tableName, false); if (regions.size() == 0) { continue; } @@ -294,8 +295,8 @@ void verifyRegionsUsingMetaScanner() throws Exception { //MetaScanner.allTableRegions() - NavigableMap regions = MetaScanner.allTableRegions(conf, tableName, - false); + NavigableMap regions = MetaScanner.allTableRegions(conf, null, + tableName, false); verifyTableRegions(regions.keySet()); //MetaScanner.listAllRegions()