You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by li...@apache.org on 2014/02/21 20:18:23 UTC

svn commit: r1570673 - /hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/client/HTable.java

Author: liyin
Date: Fri Feb 21 19:18:22 2014
New Revision: 1570673

URL: http://svn.apache.org/r1570673
Log:
[HBase-10360] Revert to the original semantics of HTable.getHRegionInfo()

Author: liyintang

Summary: HTable.getHRegionInfo()  has been changed recently that it only returns the regions which have been assigned. This causes multiple unit tests failure. This diff is to revert to the original behavior.

Test Plan: mvn test -Dtest=TestHFileOutputFormat

Reviewers: manukranthk

Reviewed By: manukranthk

CC: hbase-dev@, adela, daviddeng

Differential Revision: https://phabricator.fb.com/D1181058

Modified:
    hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/client/HTable.java

Modified: hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/client/HTable.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/client/HTable.java?rev=1570673&r1=1570672&r2=1570673&view=diff
==============================================================================
--- hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/client/HTable.java (original)
+++ hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/client/HTable.java Fri Feb 21 19:18:22 2014
@@ -450,26 +450,51 @@ public class HTable implements HTableInt
   }
 
   /**
-   * Gets all the regions and their address for this table.
+   * Gets all the regions (assigned and unassigned) and their address for this table.
+   * If the region is not assigned, then the associated  address will be an empty
+   * HServerAddress.
    * <p>
    * This is mainly useful for the MapReduce integration.
    * @return A map of HRegionInfo with it's server address
    * @throws IOException if a remote or network exception occurs
    */
   public NavigableMap<HRegionInfo, HServerAddress> getRegionsInfo()
-      throws IOException {
+    throws IOException {
     final NavigableMap<HRegionInfo, HServerAddress> regionMap =
       new TreeMap<HRegionInfo, HServerAddress>();
 
-    for (HRegionLocation location : getCachedHRegionLocations(true)) {
-      regionMap.put(location.getRegionInfo(), location.getServerAddress());
-    }
+    MetaScannerVisitor visitor = new MetaScannerVisitor() {
+      public boolean processRow(Result rowResult) throws IOException {
+        HRegionInfo info = Writables.getHRegionInfo(
+          rowResult.getValue(HConstants.CATALOG_FAMILY,
+            HConstants.REGIONINFO_QUALIFIER));
+
+        if (!(Bytes.equals(info.getTableDesc().getName(), getTableName()))) {
+          return false;
+        }
+
+        HServerAddress server = new HServerAddress();
+        byte [] value = rowResult.getValue(HConstants.CATALOG_FAMILY,
+          HConstants.SERVER_QUALIFIER);
+        if (value != null && value.length > 0) {
+          String address = Bytes.toString(value);
+          server = new HServerAddress(address);
+        }
+
+        if (!(info.isOffline() || info.isSplit())) {
+          regionMap.put(new UnmodifyableHRegionInfo(info), server);
+        }
+        return true;
+      }
 
+    };
+    MetaScanner.metaScan(configuration, visitor, tableName);
     return regionMap;
   }
 
   /**
-   * Get all the cached HRegionLocations.
+   * Get all the cached HRegionLocations. If the region is not assigned,
+   * then it won't be included.
    * @param forceRefresh
    * @return
    */