Index: src/main/java/org/apache/hadoop/hbase/client/HConnectionManager.java =================================================================== --- src/main/java/org/apache/hadoop/hbase/client/HConnectionManager.java (revision 1294973) +++ src/main/java/org/apache/hadoop/hbase/client/HConnectionManager.java (working copy) @@ -772,8 +772,12 @@ @Override public List locateRegions(final byte [] tableName) throws IOException { - // TODO implement. use old stuff or new stuff? - return null; + SortedMap tableLocations = getTableLocations(tableName); + if (tableLocations.size() == 0) { + prefetchRegionCache(tableName, null); + tableLocations = getTableLocations(tableName); + } + return Collections.unmodifiableList(new ArrayList(tableLocations.values())); } public HRegionLocation locateRegion(final byte [] tableName, Index: src/main/java/org/apache/hadoop/hbase/client/HTable.java =================================================================== --- src/main/java/org/apache/hadoop/hbase/client/HTable.java (revision 1294973) +++ src/main/java/org/apache/hadoop/hbase/client/HTable.java (working copy) @@ -437,31 +437,19 @@ */ @SuppressWarnings("unchecked") public Pair getStartEndKeys() throws IOException { - final List startKeyList = new ArrayList(); - final List endKeyList = new ArrayList(); - MetaScannerVisitor visitor = new MetaScannerVisitor() { - public boolean processRow(Result rowResult) throws IOException { - byte [] bytes = rowResult.getValue(HConstants.CATALOG_FAMILY, - HConstants.REGIONINFO_QUALIFIER); - if (bytes == null) { - LOG.warn("Null " + HConstants.REGIONINFO_QUALIFIER + " cell in " + - rowResult); - return true; - } - HRegionInfo info = Writables.getHRegionInfo(bytes); - if (Bytes.equals(info.getTableName(), getTableName())) { - if (!(info.isOffline() || info.isSplit())) { - startKeyList.add(info.getStartKey()); - endKeyList.add(info.getEndKey()); - } - } - return true; + List startKeyList = new ArrayList(); + List endKeyList = new ArrayList(); + + for (HRegionLocation hrl : connection.locateRegions(this.tableName)) { + HRegionInfo info = hrl.getRegionInfo(); + if (!(info.isOffline() || info.isSplit())) { + startKeyList.add(info.getStartKey()); + endKeyList.add(info.getEndKey()); } - }; - MetaScanner.metaScan(configuration, visitor, this.tableName); - return new Pair( - startKeyList.toArray(new byte[startKeyList.size()][]), - endKeyList.toArray(new byte[endKeyList.size()][])); + } + + return new Pair(startKeyList.toArray(new byte[startKeyList.size()][]), + endKeyList.toArray(new byte[endKeyList.size()][])); } /**