You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by ch...@apache.org on 2017/09/28 12:30:44 UTC

[14/19] hbase git commit: HBASE-18839 Apply RegionInfo to code base

http://git-wip-us.apache.org/repos/asf/hbase/blob/a11a35a1/hbase-server/src/main/java/org/apache/hadoop/hbase/master/RegionPlacementMaintainer.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/RegionPlacementMaintainer.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/RegionPlacementMaintainer.java
index d23cf7d..afd402b 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/RegionPlacementMaintainer.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/RegionPlacementMaintainer.java
@@ -40,31 +40,32 @@ import org.apache.commons.cli.ParseException;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.yetus.audience.InterfaceAudience;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.FileSystem;
+import org.apache.hadoop.hbase.ClusterStatus.Option;
 import org.apache.hadoop.hbase.HBaseConfiguration;
 import org.apache.hadoop.hbase.HConstants;
-import org.apache.hadoop.hbase.HRegionInfo;
 import org.apache.hadoop.hbase.ServerName;
 import org.apache.hadoop.hbase.TableName;
-import org.apache.hadoop.hbase.ClusterStatus.Option;
 import org.apache.hadoop.hbase.client.Admin;
 import org.apache.hadoop.hbase.client.ClusterConnection;
 import org.apache.hadoop.hbase.client.Connection;
 import org.apache.hadoop.hbase.client.ConnectionFactory;
+import org.apache.hadoop.hbase.client.RegionInfo;
 import org.apache.hadoop.hbase.favored.FavoredNodeAssignmentHelper;
 import org.apache.hadoop.hbase.favored.FavoredNodesPlan;
-import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface;
-import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;
-import org.apache.hadoop.hbase.shaded.protobuf.RequestConverter;
-import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateFavoredNodesRequest;
-import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateFavoredNodesResponse;
 import org.apache.hadoop.hbase.util.FSUtils;
 import org.apache.hadoop.hbase.util.MunkresAssignment;
 import org.apache.hadoop.hbase.util.Pair;
 import org.apache.log4j.Level;
 import org.apache.log4j.Logger;
+import org.apache.yetus.audience.InterfaceAudience;
+
+import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;
+import org.apache.hadoop.hbase.shaded.protobuf.RequestConverter;
+import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface;
+import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateFavoredNodesRequest;
+import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateFavoredNodesResponse;
 
 /**
  * A tool that is used for manipulating and viewing favored nodes information
@@ -197,12 +198,12 @@ public class RegionPlacementMaintainer {
       Map<String, Map<String, Float>> regionLocalityMap, FavoredNodesPlan plan,
       boolean munkresForSecondaryAndTertiary) throws IOException {
       // Get the all the regions for the current table
-      List<HRegionInfo> regions =
+      List<RegionInfo> regions =
         assignmentSnapshot.getTableToRegionMap().get(tableName);
       int numRegions = regions.size();
 
       // Get the current assignment map
-      Map<HRegionInfo, ServerName> currentAssignmentMap =
+      Map<RegionInfo, ServerName> currentAssignmentMap =
         assignmentSnapshot.getRegionToRegionServerMap();
 
       // Get the all the region servers
@@ -257,12 +258,12 @@ public class RegionPlacementMaintainer {
         // Compute the total rack locality for each region in each rack. The total
         // rack locality is the sum of the localities of a region on all servers in
         // a rack.
-        Map<String, Map<HRegionInfo, Float>> rackRegionLocality = new HashMap<>();
+        Map<String, Map<RegionInfo, Float>> rackRegionLocality = new HashMap<>();
         for (int i = 0; i < numRegions; i++) {
-          HRegionInfo region = regions.get(i);
+          RegionInfo region = regions.get(i);
           for (int j = 0; j < regionSlots; j += slotsPerServer) {
             String rack = rackManager.getRack(servers.get(j / slotsPerServer));
-            Map<HRegionInfo, Float> rackLocality = rackRegionLocality.get(rack);
+            Map<RegionInfo, Float> rackLocality = rackRegionLocality.get(rack);
             if (rackLocality == null) {
               rackLocality = new HashMap<>();
               rackRegionLocality.put(rack, rackLocality);
@@ -417,18 +418,18 @@ public class RegionPlacementMaintainer {
         LOG.info("Assignment plan for secondary and tertiary generated " +
             "using MunkresAssignment");
       } else {
-        Map<HRegionInfo, ServerName> primaryRSMap = new HashMap<>();
+        Map<RegionInfo, ServerName> primaryRSMap = new HashMap<>();
         for (int i = 0; i < numRegions; i++) {
           primaryRSMap.put(regions.get(i), servers.get(primaryAssignment[i] / slotsPerServer));
         }
         FavoredNodeAssignmentHelper favoredNodeHelper =
             new FavoredNodeAssignmentHelper(servers, conf);
         favoredNodeHelper.initialize();
-        Map<HRegionInfo, ServerName[]> secondaryAndTertiaryMap =
+        Map<RegionInfo, ServerName[]> secondaryAndTertiaryMap =
             favoredNodeHelper.placeSecondaryAndTertiaryWithRestrictions(primaryRSMap);
         for (int i = 0; i < numRegions; i++) {
           List<ServerName> favoredServers = new ArrayList<>(FavoredNodeAssignmentHelper.FAVORED_NODES_NUM);
-          HRegionInfo currentRegion = regions.get(i);
+          RegionInfo currentRegion = regions.get(i);
           ServerName s = primaryRSMap.get(currentRegion);
           favoredServers.add(ServerName.valueOf(s.getHostname(), s.getPort(),
               ServerName.NON_STARTCODE));
@@ -467,7 +468,7 @@ public class RegionPlacementMaintainer {
     FavoredNodesPlan plan = new FavoredNodesPlan();
 
     // Get the table to region mapping
-    Map<TableName, List<HRegionInfo>> tableToRegionMap =
+    Map<TableName, List<RegionInfo>> tableToRegionMap =
       assignmentSnapshot.getTableToRegionMap();
     LOG.info("Start to generate the new assignment plan for the " +
          + tableToRegionMap.keySet().size() + " tables" );
@@ -635,8 +636,8 @@ public class RegionPlacementMaintainer {
     try {
       LOG.info("Start to update the hbase:meta with the new assignment plan");
       Map<String, List<ServerName>> assignmentMap = plan.getAssignmentMap();
-      Map<HRegionInfo, List<ServerName>> planToUpdate = new HashMap<>(assignmentMap.size());
-      Map<String, HRegionInfo> regionToRegionInfoMap =
+      Map<RegionInfo, List<ServerName>> planToUpdate = new HashMap<>(assignmentMap.size());
+      Map<String, RegionInfo> regionToRegionInfoMap =
         getRegionAssignmentSnapshot().getRegionNameToRegionInfoMap();
       for (Map.Entry<String, List<ServerName>> entry : assignmentMap.entrySet()) {
         planToUpdate.put(regionToRegionInfoMap.get(entry.getKey()), entry.getValue());
@@ -659,21 +660,21 @@ public class RegionPlacementMaintainer {
   throws IOException{
     LOG.info("Start to update the region servers with the new assignment plan");
     // Get the region to region server map
-    Map<ServerName, List<HRegionInfo>> currentAssignment =
+    Map<ServerName, List<RegionInfo>> currentAssignment =
       this.getRegionAssignmentSnapshot().getRegionServerToRegionMap();
 
     // track of the failed and succeeded updates
     int succeededNum = 0;
     Map<ServerName, Exception> failedUpdateMap = new HashMap<>();
 
-    for (Map.Entry<ServerName, List<HRegionInfo>> entry :
+    for (Map.Entry<ServerName, List<RegionInfo>> entry :
       currentAssignment.entrySet()) {
-      List<Pair<HRegionInfo, List<ServerName>>> regionUpdateInfos = new ArrayList<>();
+      List<Pair<RegionInfo, List<ServerName>>> regionUpdateInfos = new ArrayList<>();
       try {
         // Keep track of the favored updates for the current region server
         FavoredNodesPlan singleServerPlan = null;
         // Find out all the updates for the current region server
-        for (HRegionInfo region : entry.getValue()) {
+        for (RegionInfo region : entry.getValue()) {
           List<ServerName> favoredServerList = plan.getFavoredNodes(region);
           if (favoredServerList != null &&
               favoredServerList.size() == FavoredNodeAssignmentHelper.FAVORED_NODES_NUM) {
@@ -746,7 +747,7 @@ public class RegionPlacementMaintainer {
       throws IOException {
     Map<TableName, Integer> movesPerTable = new HashMap<>();
     SnapshotOfRegionAssignmentFromMeta snapshot = this.getRegionAssignmentSnapshot();
-    Map<TableName, List<HRegionInfo>> tableToRegions = snapshot
+    Map<TableName, List<RegionInfo>> tableToRegions = snapshot
         .getTableToRegionMap();
     FavoredNodesPlan oldPlan = snapshot.getExistingAssignmentPlan();
     Set<TableName> tables = snapshot.getTableSet();
@@ -756,8 +757,8 @@ public class RegionPlacementMaintainer {
           && !this.targetTableSet.contains(table)) {
         continue;
       }
-      List<HRegionInfo> regions = tableToRegions.get(table);
-      for (HRegionInfo region : regions) {
+      List<RegionInfo> regions = tableToRegions.get(table);
+      for (RegionInfo region : regions) {
         List<ServerName> oldServers = oldPlan.getFavoredNodes(region);
         List<ServerName> newServers = newPlan.getFavoredNodes(region);
         if (oldServers != null && newServers != null) {
@@ -789,7 +790,7 @@ public class RegionPlacementMaintainer {
     SnapshotOfRegionAssignmentFromMeta snapshot = this.getRegionAssignmentSnapshot();
     FavoredNodesPlan oldPlan = snapshot.getExistingAssignmentPlan();
     Set<TableName> tables = snapshot.getTableSet();
-    Map<TableName, List<HRegionInfo>> tableToRegionsMap = snapshot.getTableToRegionMap();
+    Map<TableName, List<RegionInfo>> tableToRegionsMap = snapshot.getTableToRegionMap();
     for (TableName table : tables) {
       float[] deltaLocality = new float[3];
       float[] locality = new float[3];
@@ -797,13 +798,13 @@ public class RegionPlacementMaintainer {
           && !this.targetTableSet.contains(table)) {
         continue;
       }
-      List<HRegionInfo> regions = tableToRegionsMap.get(table);
+      List<RegionInfo> regions = tableToRegionsMap.get(table);
       System.out.println("==================================================");
       System.out.println("Assignment Plan Projection Report For Table: " + table);
       System.out.println("\t Total regions: " + regions.size());
       System.out.println("\t" + movesPerTable.get(table)
           + " primaries will move due to their primary has changed");
-      for (HRegionInfo currentRegion : regions) {
+      for (RegionInfo currentRegion : regions) {
         Map<String, Float> regionLocality = regionLocalityMap.get(currentRegion
             .getEncodedName());
         if (regionLocality == null) {
@@ -881,7 +882,7 @@ public class RegionPlacementMaintainer {
     SnapshotOfRegionAssignmentFromMeta snapshot = this.getRegionAssignmentSnapshot();
     FavoredNodesPlan assignmentPlan = snapshot.getExistingAssignmentPlan();
     Set<TableName> tables = snapshot.getTableSet();
-    Map<TableName, List<HRegionInfo>> tableToRegionsMap = snapshot
+    Map<TableName, List<RegionInfo>> tableToRegionsMap = snapshot
         .getTableToRegionMap();
     for (TableName table : tables) {
       float[] locality = new float[3];
@@ -889,8 +890,8 @@ public class RegionPlacementMaintainer {
           && !this.targetTableSet.contains(table)) {
         continue;
       }
-      List<HRegionInfo> regions = tableToRegionsMap.get(table);
-      for (HRegionInfo currentRegion : regions) {
+      List<RegionInfo> regions = tableToRegionsMap.get(table);
+      for (RegionInfo currentRegion : regions) {
         Map<String, Float> regionLocality = regionLocalityMap.get(currentRegion
             .getEncodedName());
         if (regionLocality == null) {
@@ -1094,7 +1095,7 @@ public class RegionPlacementMaintainer {
         LOG.info("Going to update the region " + regionName + " with the new favored nodes " +
             favoredNodesStr);
         List<ServerName> favoredNodes = null;
-        HRegionInfo regionInfo =
+        RegionInfo regionInfo =
             rp.getRegionAssignmentSnapshot().getRegionNameToRegionInfoMap().get(regionName);
         if (regionInfo == null) {
           LOG.error("Cannot find the region " + regionName + " from the META");

http://git-wip-us.apache.org/repos/asf/hbase/blob/a11a35a1/hbase-server/src/main/java/org/apache/hadoop/hbase/master/RegionPlan.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/RegionPlan.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/RegionPlan.java
index dbeaa58..10252df 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/RegionPlan.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/RegionPlan.java
@@ -20,10 +20,10 @@ package org.apache.hadoop.hbase.master;
 import java.io.Serializable;
 import java.util.Comparator;
 
+import org.apache.hadoop.hbase.ServerName;
+import org.apache.hadoop.hbase.client.RegionInfo;
 import org.apache.yetus.audience.InterfaceAudience;
 import org.apache.yetus.audience.InterfaceStability;
-import org.apache.hadoop.hbase.HRegionInfo;
-import org.apache.hadoop.hbase.ServerName;
 
 /**
  * Stores the plan for the move of an individual region.
@@ -38,7 +38,7 @@ import org.apache.hadoop.hbase.ServerName;
 @InterfaceAudience.LimitedPrivate("Coprocessors")
 @InterfaceStability.Evolving
 public class RegionPlan implements Comparable<RegionPlan> {
-  private final HRegionInfo hri;
+  private final RegionInfo hri;
   private final ServerName source;
   private ServerName dest;
 
@@ -66,7 +66,7 @@ public class RegionPlan implements Comparable<RegionPlan> {
    * @param source regionserver region should be moved from
    * @param dest regionserver region should be moved to
    */
-  public RegionPlan(final HRegionInfo hri, ServerName source, ServerName dest) {
+  public RegionPlan(final RegionInfo hri, ServerName source, ServerName dest) {
     this.hri = hri;
     this.source = source;
     this.dest = dest;
@@ -103,7 +103,7 @@ public class RegionPlan implements Comparable<RegionPlan> {
     return this.hri.getEncodedName();
   }
 
-  public HRegionInfo getRegionInfo() {
+  public RegionInfo getRegionInfo() {
     return this.hri;
   }
 

http://git-wip-us.apache.org/repos/asf/hbase/blob/a11a35a1/hbase-server/src/main/java/org/apache/hadoop/hbase/master/ServerManager.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/ServerManager.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/ServerManager.java
index 4dba66e..b63d55a 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/ServerManager.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/ServerManager.java
@@ -43,32 +43,32 @@ import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hbase.ClockOutOfSyncException;
 import org.apache.hadoop.hbase.HConstants;
-import org.apache.hadoop.hbase.HRegionInfo;
 import org.apache.hadoop.hbase.NotServingRegionException;
 import org.apache.hadoop.hbase.RegionLoad;
 import org.apache.hadoop.hbase.ServerLoad;
 import org.apache.hadoop.hbase.ServerName;
 import org.apache.hadoop.hbase.YouAreDeadException;
 import org.apache.hadoop.hbase.ZooKeeperConnectionException;
-import org.apache.yetus.audience.InterfaceAudience;
 import org.apache.hadoop.hbase.client.ClusterConnection;
+import org.apache.hadoop.hbase.client.RegionInfo;
 import org.apache.hadoop.hbase.client.RetriesExhaustedException;
 import org.apache.hadoop.hbase.ipc.HBaseRpcController;
 import org.apache.hadoop.hbase.ipc.RpcControllerFactory;
 import org.apache.hadoop.hbase.monitoring.MonitoredTask;
 import org.apache.hadoop.hbase.regionserver.HRegionServer;
-import org.apache.hadoop.hbase.shaded.com.google.protobuf.UnsafeByteOperations;
-import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;
-import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService;
-import org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.RegionStoreSequenceIds;
-import org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.StoreSequenceId;
-import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionServerStartupRequest;
 import org.apache.hadoop.hbase.util.Bytes;
 import org.apache.hadoop.hbase.zookeeper.ZKUtil;
 import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher;
+import org.apache.yetus.audience.InterfaceAudience;
 import org.apache.zookeeper.KeeperException;
 
 import org.apache.hadoop.hbase.shaded.com.google.common.annotations.VisibleForTesting;
+import org.apache.hadoop.hbase.shaded.com.google.protobuf.UnsafeByteOperations;
+import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;
+import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService;
+import org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.RegionStoreSequenceIds;
+import org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.StoreSequenceId;
+import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionServerStartupRequest;
 
 /**
  * The ServerManager class manages info about region servers.
@@ -257,7 +257,7 @@ public class ServerManager {
   private void updateLastFlushedSequenceIds(ServerName sn, ServerLoad hsl) {
     Map<byte[], RegionLoad> regionsLoad = hsl.getRegionsLoad();
     for (Entry<byte[], RegionLoad> entry : regionsLoad.entrySet()) {
-      byte[] encodedRegionName = Bytes.toBytes(HRegionInfo.encodeRegionName(entry.getKey()));
+      byte[] encodedRegionName = Bytes.toBytes(RegionInfo.encodeRegionName(entry.getKey()));
       Long existingValue = flushedSequenceIdByRegion.get(encodedRegionName);
       long l = entry.getValue().getCompleteSequenceId();
       // Don't let smaller sequence ids override greater sequence ids.
@@ -714,7 +714,7 @@ public class ServerManager {
    * @param region region to  warmup
    */
   public void sendRegionWarmup(ServerName server,
-      HRegionInfo region) {
+      RegionInfo region) {
     if (server == null) return;
     try {
       AdminService.BlockingInterface admin = getRsAdmin(server);
@@ -732,7 +732,7 @@ public class ServerManager {
    * to close the region.  This bypasses the active hmaster.
    */
   public static void closeRegionSilentlyAndWait(ClusterConnection connection,
-    ServerName server, HRegionInfo region, long timeout) throws IOException, InterruptedException {
+    ServerName server, RegionInfo region, long timeout) throws IOException, InterruptedException {
     AdminService.BlockingInterface rs = connection.getAdmin(server);
     HBaseRpcController controller = connection.getRpcControllerFactory().newController();
     try {
@@ -744,7 +744,7 @@ public class ServerManager {
     while (System.currentTimeMillis() < expiration) {
       controller.reset();
       try {
-        HRegionInfo rsRegion =
+        RegionInfo rsRegion =
           ProtobufUtil.getRegionInfo(controller, rs, region.getRegionName());
         if (rsRegion == null) return;
       } catch (IOException ioe) {
@@ -1023,14 +1023,14 @@ public class ServerManager {
   /**
    * Called by delete table and similar to notify the ServerManager that a region was removed.
    */
-  public void removeRegion(final HRegionInfo regionInfo) {
+  public void removeRegion(final RegionInfo regionInfo) {
     final byte[] encodedName = regionInfo.getEncodedNameAsBytes();
     storeFlushedSequenceIdsByRegion.remove(encodedName);
     flushedSequenceIdByRegion.remove(encodedName);
   }
 
   @VisibleForTesting
-  public boolean isRegionInServerManagerStates(final HRegionInfo hri) {
+  public boolean isRegionInServerManagerStates(final RegionInfo hri) {
     final byte[] encodedName = hri.getEncodedNameAsBytes();
     return (storeFlushedSequenceIdsByRegion.containsKey(encodedName)
         || flushedSequenceIdByRegion.containsKey(encodedName));
@@ -1039,8 +1039,8 @@ public class ServerManager {
   /**
    * Called by delete table and similar to notify the ServerManager that a region was removed.
    */
-  public void removeRegions(final List<HRegionInfo> regions) {
-    for (HRegionInfo hri: regions) {
+  public void removeRegions(final List<RegionInfo> regions) {
+    for (RegionInfo hri: regions) {
       removeRegion(hri);
     }
   }

http://git-wip-us.apache.org/repos/asf/hbase/blob/a11a35a1/hbase-server/src/main/java/org/apache/hadoop/hbase/master/SnapshotOfRegionAssignmentFromMeta.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/SnapshotOfRegionAssignmentFromMeta.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/SnapshotOfRegionAssignmentFromMeta.java
index 403a24e..5d889a4 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/SnapshotOfRegionAssignmentFromMeta.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/SnapshotOfRegionAssignmentFromMeta.java
@@ -34,19 +34,19 @@ import java.util.TreeMap;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.yetus.audience.InterfaceAudience;
-import org.apache.hadoop.hbase.favored.FavoredNodeAssignmentHelper;
-import org.apache.hadoop.hbase.favored.FavoredNodesPlan;
 import org.apache.hadoop.hbase.HConstants;
-import org.apache.hadoop.hbase.HRegionInfo;
 import org.apache.hadoop.hbase.HRegionLocation;
+import org.apache.hadoop.hbase.MetaTableAccessor;
+import org.apache.hadoop.hbase.MetaTableAccessor.Visitor;
 import org.apache.hadoop.hbase.RegionLocations;
 import org.apache.hadoop.hbase.ServerName;
 import org.apache.hadoop.hbase.TableName;
-import org.apache.hadoop.hbase.MetaTableAccessor;
-import org.apache.hadoop.hbase.MetaTableAccessor.Visitor;
 import org.apache.hadoop.hbase.client.Connection;
+import org.apache.hadoop.hbase.client.RegionInfo;
 import org.apache.hadoop.hbase.client.Result;
+import org.apache.hadoop.hbase.favored.FavoredNodeAssignmentHelper;
+import org.apache.hadoop.hbase.favored.FavoredNodesPlan;
+import org.apache.yetus.audience.InterfaceAudience;
 
 /**
  * Used internally for reading meta and constructing datastructures that are
@@ -62,18 +62,18 @@ public class SnapshotOfRegionAssignmentFromMeta {
   private final Connection connection;
 
   /** the table name to region map */
-  private final Map<TableName, List<HRegionInfo>> tableToRegionMap;
+  private final Map<TableName, List<RegionInfo>> tableToRegionMap;
   /** the region to region server map */
-  //private final Map<HRegionInfo, ServerName> regionToRegionServerMap;
-  private Map<HRegionInfo, ServerName> regionToRegionServerMap;
+  //private final Map<RegionInfo, ServerName> regionToRegionServerMap;
+  private Map<RegionInfo, ServerName> regionToRegionServerMap;
   /** the region name to region info map */
-  private final Map<String, HRegionInfo> regionNameToRegionInfoMap;
+  private final Map<String, RegionInfo> regionNameToRegionInfoMap;
 
   /** the regionServer to region map */
-  private final Map<ServerName, List<HRegionInfo>> currentRSToRegionMap;
-  private final Map<ServerName, List<HRegionInfo>> secondaryRSToRegionMap;
-  private final Map<ServerName, List<HRegionInfo>> teritiaryRSToRegionMap;
-  private final Map<ServerName, List<HRegionInfo>> primaryRSToRegionMap;
+  private final Map<ServerName, List<RegionInfo>> currentRSToRegionMap;
+  private final Map<ServerName, List<RegionInfo>> secondaryRSToRegionMap;
+  private final Map<ServerName, List<RegionInfo>> teritiaryRSToRegionMap;
+  private final Map<ServerName, List<RegionInfo>> primaryRSToRegionMap;
   /** the existing assignment plan in the hbase:meta region */
   private final FavoredNodesPlan existingAssignmentPlan;
   private final Set<TableName> disabledTables;
@@ -113,7 +113,7 @@ public class SnapshotOfRegionAssignmentFromMeta {
           if (result ==  null || result.isEmpty()) return true;
           RegionLocations rl = MetaTableAccessor.getRegionLocations(result);
           if (rl == null) return true;
-          HRegionInfo hri = rl.getRegionLocation(0).getRegionInfo();
+          RegionInfo hri = rl.getRegionLocation(0).getRegionInfo();
           if (hri == null) return true;
           if (hri.getTable() == null) return true;
           if (disabledTables.contains(hri.getTable())) {
@@ -172,13 +172,13 @@ public class SnapshotOfRegionAssignmentFromMeta {
       "snapshot");
   }
 
-  private void addRegion(HRegionInfo regionInfo) {
+  private void addRegion(RegionInfo regionInfo) {
     // Process the region name to region info map
     regionNameToRegionInfoMap.put(regionInfo.getRegionNameAsString(), regionInfo);
 
     // Process the table to region map
     TableName tableName = regionInfo.getTable();
-    List<HRegionInfo> regionList = tableToRegionMap.get(tableName);
+    List<RegionInfo> regionList = tableToRegionMap.get(tableName);
     if (regionList == null) {
       regionList = new ArrayList<>();
     }
@@ -187,14 +187,14 @@ public class SnapshotOfRegionAssignmentFromMeta {
     tableToRegionMap.put(tableName, regionList);
   }
 
-  private void addAssignment(HRegionInfo regionInfo, ServerName server) {
+  private void addAssignment(RegionInfo regionInfo, ServerName server) {
     // Process the region to region server map
     regionToRegionServerMap.put(regionInfo, server);
 
     if (server == null) return;
 
     // Process the region server to region map
-    List<HRegionInfo> regionList = currentRSToRegionMap.get(server);
+    List<RegionInfo> regionList = currentRSToRegionMap.get(server);
     if (regionList == null) {
       regionList = new ArrayList<>();
     }
@@ -202,9 +202,9 @@ public class SnapshotOfRegionAssignmentFromMeta {
     currentRSToRegionMap.put(server, regionList);
   }
 
-  private void addPrimaryAssignment(HRegionInfo regionInfo, ServerName server) {
+  private void addPrimaryAssignment(RegionInfo regionInfo, ServerName server) {
     // Process the region server to region map
-    List<HRegionInfo> regionList = primaryRSToRegionMap.get(server);
+    List<RegionInfo> regionList = primaryRSToRegionMap.get(server);
     if (regionList == null) {
       regionList = new ArrayList<>();
     }
@@ -212,9 +212,9 @@ public class SnapshotOfRegionAssignmentFromMeta {
     primaryRSToRegionMap.put(server, regionList);
   }
 
-  private void addSecondaryAssignment(HRegionInfo regionInfo, ServerName server) {
+  private void addSecondaryAssignment(RegionInfo regionInfo, ServerName server) {
     // Process the region server to region map
-    List<HRegionInfo> regionList = secondaryRSToRegionMap.get(server);
+    List<RegionInfo> regionList = secondaryRSToRegionMap.get(server);
     if (regionList == null) {
       regionList = new ArrayList<>();
     }
@@ -222,9 +222,9 @@ public class SnapshotOfRegionAssignmentFromMeta {
     secondaryRSToRegionMap.put(server, regionList);
   }
 
-  private void addTeritiaryAssignment(HRegionInfo regionInfo, ServerName server) {
+  private void addTeritiaryAssignment(RegionInfo regionInfo, ServerName server) {
     // Process the region server to region map
-    List<HRegionInfo> regionList = teritiaryRSToRegionMap.get(server);
+    List<RegionInfo> regionList = teritiaryRSToRegionMap.get(server);
     if (regionList == null) {
       regionList = new ArrayList<>();
     }
@@ -236,7 +236,7 @@ public class SnapshotOfRegionAssignmentFromMeta {
    * Get the regioninfo for a region
    * @return the regioninfo
    */
-  public Map<String, HRegionInfo> getRegionNameToRegionInfoMap() {
+  public Map<String, RegionInfo> getRegionNameToRegionInfoMap() {
     return this.regionNameToRegionInfoMap;
   }
 
@@ -244,7 +244,7 @@ public class SnapshotOfRegionAssignmentFromMeta {
    * Get regions for tables
    * @return a mapping from table to regions
    */
-  public Map<TableName, List<HRegionInfo>> getTableToRegionMap() {
+  public Map<TableName, List<RegionInfo>> getTableToRegionMap() {
     return tableToRegionMap;
   }
 
@@ -252,7 +252,7 @@ public class SnapshotOfRegionAssignmentFromMeta {
    * Get region to region server map
    * @return region to region server map
    */
-  public Map<HRegionInfo, ServerName> getRegionToRegionServerMap() {
+  public Map<RegionInfo, ServerName> getRegionToRegionServerMap() {
     return regionToRegionServerMap;
   }
 
@@ -260,7 +260,7 @@ public class SnapshotOfRegionAssignmentFromMeta {
    * Get regionserver to region map
    * @return regionserver to region map
    */
-  public Map<ServerName, List<HRegionInfo>> getRegionServerToRegionMap() {
+  public Map<ServerName, List<RegionInfo>> getRegionServerToRegionMap() {
     return currentRSToRegionMap;
   }
 
@@ -280,15 +280,15 @@ public class SnapshotOfRegionAssignmentFromMeta {
     return this.tableToRegionMap.keySet();
   }
 
-  public Map<ServerName, List<HRegionInfo>> getSecondaryToRegionInfoMap() {
+  public Map<ServerName, List<RegionInfo>> getSecondaryToRegionInfoMap() {
     return this.secondaryRSToRegionMap;
   }
 
-  public Map<ServerName, List<HRegionInfo>> getTertiaryToRegionInfoMap() {
+  public Map<ServerName, List<RegionInfo>> getTertiaryToRegionInfoMap() {
     return this.teritiaryRSToRegionMap;
   }
 
-  public Map<ServerName, List<HRegionInfo>> getPrimaryToRegionInfoMap() {
+  public Map<ServerName, List<RegionInfo>> getPrimaryToRegionInfoMap() {
     return this.primaryRSToRegionMap;
   }
 }

http://git-wip-us.apache.org/repos/asf/hbase/blob/a11a35a1/hbase-server/src/main/java/org/apache/hadoop/hbase/master/SplitLogManager.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/SplitLogManager.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/SplitLogManager.java
index bc05c0c..8027b6a 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/SplitLogManager.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/SplitLogManager.java
@@ -24,8 +24,6 @@ import static org.apache.hadoop.hbase.master.SplitLogManager.TerminationStatus.F
 import static org.apache.hadoop.hbase.master.SplitLogManager.TerminationStatus.IN_PROGRESS;
 import static org.apache.hadoop.hbase.master.SplitLogManager.TerminationStatus.SUCCESS;
 
-import org.apache.hadoop.hbase.shaded.com.google.common.annotations.VisibleForTesting;
-
 import java.io.IOException;
 import java.io.InterruptedIOException;
 import java.util.ArrayList;
@@ -48,22 +46,24 @@ import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.fs.PathFilter;
 import org.apache.hadoop.hbase.ChoreService;
-import org.apache.hadoop.hbase.HRegionInfo;
 import org.apache.hadoop.hbase.ScheduledChore;
 import org.apache.hadoop.hbase.ServerName;
 import org.apache.hadoop.hbase.SplitLogCounters;
 import org.apache.hadoop.hbase.Stoppable;
-import org.apache.yetus.audience.InterfaceAudience;
+import org.apache.hadoop.hbase.client.RegionInfo;
 import org.apache.hadoop.hbase.coordination.BaseCoordinatedStateManager;
 import org.apache.hadoop.hbase.coordination.SplitLogManagerCoordination;
 import org.apache.hadoop.hbase.coordination.SplitLogManagerCoordination.SplitLogManagerDetails;
 import org.apache.hadoop.hbase.monitoring.MonitoredTask;
 import org.apache.hadoop.hbase.monitoring.TaskMonitor;
-import org.apache.hadoop.hbase.shaded.protobuf.generated.ZooKeeperProtos.SplitLogTask.RecoveryMode;
 import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;
 import org.apache.hadoop.hbase.util.FSUtils;
 import org.apache.hadoop.hbase.util.Pair;
 import org.apache.hadoop.hbase.wal.AbstractFSWALProvider;
+import org.apache.yetus.audience.InterfaceAudience;
+
+import org.apache.hadoop.hbase.shaded.com.google.common.annotations.VisibleForTesting;
+import org.apache.hadoop.hbase.shaded.protobuf.generated.ZooKeeperProtos.SplitLogTask.RecoveryMode;
 
 /**
  * Distributes the task of log splitting to the available region servers.
@@ -545,7 +545,7 @@ public class SplitLogManager {
     getSplitLogManagerCoordination().setRecoveryMode(isForInitialization);
   }
 
-  public void markRegionsRecovering(ServerName server, Set<HRegionInfo> userRegions)
+  public void markRegionsRecovering(ServerName server, Set<RegionInfo> userRegions)
       throws InterruptedIOException, IOException {
     if (userRegions == null || (!isLogReplaying())) {
       return;

http://git-wip-us.apache.org/repos/asf/hbase/blob/a11a35a1/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/AssignProcedure.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/AssignProcedure.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/AssignProcedure.java
index 4a0f2d8..01a5f83 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/AssignProcedure.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/AssignProcedure.java
@@ -20,12 +20,12 @@
 package org.apache.hadoop.hbase.master.assignment;
 
 import java.io.IOException;
+
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.hadoop.hbase.HRegionInfo;
 import org.apache.hadoop.hbase.ServerName;
 import org.apache.hadoop.hbase.TableName;
-import org.apache.yetus.audience.InterfaceAudience;
+import org.apache.hadoop.hbase.client.RegionInfo;
 import org.apache.hadoop.hbase.client.RetriesExhaustedException;
 import org.apache.hadoop.hbase.client.TableState;
 import org.apache.hadoop.hbase.exceptions.UnexpectedStateException;
@@ -38,6 +38,8 @@ import org.apache.hadoop.hbase.procedure2.ProcedureMetrics;
 import org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer;
 import org.apache.hadoop.hbase.procedure2.ProcedureSuspendedException;
 import org.apache.hadoop.hbase.procedure2.RemoteProcedureDispatcher.RemoteOperation;
+import org.apache.yetus.audience.InterfaceAudience;
+
 import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;
 import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.AssignRegionStateData;
 import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionTransitionState;
@@ -87,17 +89,17 @@ public class AssignProcedure extends RegionTransitionProcedure {
     super();
   }
 
-  public AssignProcedure(final HRegionInfo regionInfo) {
+  public AssignProcedure(final RegionInfo regionInfo) {
     this(regionInfo, false);
   }
 
-  public AssignProcedure(final HRegionInfo regionInfo, final boolean forceNewPlan) {
+  public AssignProcedure(final RegionInfo regionInfo, final boolean forceNewPlan) {
     super(regionInfo);
     this.forceNewPlan = forceNewPlan;
     this.targetServer = null;
   }
 
-  public AssignProcedure(final HRegionInfo regionInfo, final ServerName destinationServer) {
+  public AssignProcedure(final RegionInfo regionInfo, final ServerName destinationServer) {
     super(regionInfo);
     this.forceNewPlan = false;
     this.targetServer = destinationServer;
@@ -123,7 +125,7 @@ public class AssignProcedure extends RegionTransitionProcedure {
       throws IOException {
     final AssignRegionStateData.Builder state = AssignRegionStateData.newBuilder()
         .setTransitionState(getTransitionState())
-        .setRegionInfo(HRegionInfo.convert(getRegionInfo()));
+        .setRegionInfo(ProtobufUtil.toRegionInfo(getRegionInfo()));
     if (forceNewPlan) {
       state.setForceNewPlan(true);
     }
@@ -138,7 +140,7 @@ public class AssignProcedure extends RegionTransitionProcedure {
       throws IOException {
     final AssignRegionStateData state = serializer.deserialize(AssignRegionStateData.class);
     setTransitionState(state.getTransitionState());
-    setRegionInfo(HRegionInfo.convert(state.getRegionInfo()));
+    setRegionInfo(ProtobufUtil.toRegionInfo(state.getRegionInfo()));
     forceNewPlan = state.getForceNewPlan();
     if (state.hasTargetServer()) {
       this.targetServer = ProtobufUtil.toServerName(state.getTargetServer());

http://git-wip-us.apache.org/repos/asf/hbase/blob/a11a35a1/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/AssignmentManager.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/AssignmentManager.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/AssignmentManager.java
index f96c1a5..021d411 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/AssignmentManager.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/AssignmentManager.java
@@ -40,17 +40,16 @@ import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hbase.HBaseIOException;
 import org.apache.hadoop.hbase.HConstants;
-import org.apache.hadoop.hbase.HRegionInfo;
 import org.apache.hadoop.hbase.PleaseHoldException;
 import org.apache.hadoop.hbase.RegionException;
 import org.apache.hadoop.hbase.RegionStateListener;
 import org.apache.hadoop.hbase.ServerName;
 import org.apache.hadoop.hbase.TableName;
 import org.apache.hadoop.hbase.YouAreDeadException;
-import org.apache.yetus.audience.InterfaceAudience;
+import org.apache.hadoop.hbase.client.RegionInfo;
+import org.apache.hadoop.hbase.client.RegionInfoBuilder;
 import org.apache.hadoop.hbase.client.TableState;
 import org.apache.hadoop.hbase.exceptions.UnexpectedStateException;
-import org.apache.hadoop.hbase.master.balancer.FavoredStochasticBalancer;
 import org.apache.hadoop.hbase.favored.FavoredNodesManager;
 import org.apache.hadoop.hbase.favored.FavoredNodesPromoter;
 import org.apache.hadoop.hbase.master.AssignmentListener;
@@ -66,7 +65,7 @@ import org.apache.hadoop.hbase.master.TableStateManager;
 import org.apache.hadoop.hbase.master.assignment.RegionStates.RegionStateNode;
 import org.apache.hadoop.hbase.master.assignment.RegionStates.ServerState;
 import org.apache.hadoop.hbase.master.assignment.RegionStates.ServerStateNode;
-// TODO: why are they here?
+import org.apache.hadoop.hbase.master.balancer.FavoredStochasticBalancer;
 import org.apache.hadoop.hbase.master.normalizer.RegionNormalizer;
 import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;
 import org.apache.hadoop.hbase.master.procedure.MasterProcedureScheduler;
@@ -77,19 +76,21 @@ import org.apache.hadoop.hbase.procedure2.ProcedureEvent;
 import org.apache.hadoop.hbase.procedure2.ProcedureExecutor;
 import org.apache.hadoop.hbase.procedure2.ProcedureInMemoryChore;
 import org.apache.hadoop.hbase.procedure2.util.StringUtils;
-import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;
-import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition;
-import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode;
-import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionRequest;
-import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionResponse;
 import org.apache.hadoop.hbase.util.Bytes;
 import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;
 import org.apache.hadoop.hbase.util.Pair;
 import org.apache.hadoop.hbase.util.Threads;
 import org.apache.hadoop.hbase.util.VersionInfo;
+import org.apache.yetus.audience.InterfaceAudience;
 
 import org.apache.hadoop.hbase.shaded.com.google.common.annotations.VisibleForTesting;
-import org.apache.hadoop.hbase.shaded.com.google.common.collect.Lists;
+import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;
+import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition;
+import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode;
+import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionRequest;
+import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionResponse;
+
+// TODO: why are they here?
 
 /**
  * The AssignmentManager is the coordinator for region assign/unassign operations.
@@ -256,7 +257,7 @@ public class AssignmentManager implements ServerListener {
     if (hasProcExecutor) {
       getProcedureScheduler().suspendEvent(metaLoadEvent);
       setFailoverCleanupDone(false);
-      for (HRegionInfo hri: getMetaRegionSet()) {
+      for (RegionInfo hri: getMetaRegionSet()) {
         setMetaInitialized(hri, false);
       }
     }
@@ -326,7 +327,7 @@ public class AssignmentManager implements ServerListener {
     return regionStateStore;
   }
 
-  public List<ServerName> getFavoredNodes(final HRegionInfo regionInfo) {
+  public List<ServerName> getFavoredNodes(final RegionInfo regionInfo) {
     return this.shouldAssignRegionsWithFavoredNodes?
         ((FavoredStochasticBalancer)getBalancer()).getFavoredNodes(regionInfo):
           ServerName.EMPTY_SERVER_LIST;
@@ -351,7 +352,7 @@ public class AssignmentManager implements ServerListener {
   // ============================================================================================
   //  META Helpers
   // ============================================================================================
-  private boolean isMetaRegion(final HRegionInfo regionInfo) {
+  private boolean isMetaRegion(final RegionInfo regionInfo) {
     return regionInfo.isMetaRegion();
   }
 
@@ -359,8 +360,8 @@ public class AssignmentManager implements ServerListener {
     return getMetaRegionFromName(regionName) != null;
   }
 
-  public HRegionInfo getMetaRegionFromName(final byte[] regionName) {
-    for (HRegionInfo hri: getMetaRegionSet()) {
+  public RegionInfo getMetaRegionFromName(final byte[] regionName) {
+    for (RegionInfo hri: getMetaRegionSet()) {
       if (Bytes.equals(hri.getRegionName(), regionName)) {
         return hri;
       }
@@ -369,7 +370,7 @@ public class AssignmentManager implements ServerListener {
   }
 
   public boolean isCarryingMeta(final ServerName serverName) {
-    for (HRegionInfo hri: getMetaRegionSet()) {
+    for (RegionInfo hri: getMetaRegionSet()) {
       if (isCarryingRegion(serverName, hri)) {
         return true;
       }
@@ -377,23 +378,23 @@ public class AssignmentManager implements ServerListener {
     return false;
   }
 
-  private boolean isCarryingRegion(final ServerName serverName, final HRegionInfo regionInfo) {
+  private boolean isCarryingRegion(final ServerName serverName, final RegionInfo regionInfo) {
     // TODO: check for state?
     final RegionStateNode node = regionStates.getRegionNode(regionInfo);
     return(node != null && serverName.equals(node.getRegionLocation()));
   }
 
-  private HRegionInfo getMetaForRegion(final HRegionInfo regionInfo) {
+  private RegionInfo getMetaForRegion(final RegionInfo regionInfo) {
     //if (regionInfo.isMetaRegion()) return regionInfo;
     // TODO: handle multiple meta. if the region provided is not meta lookup
     // which meta the region belongs to.
-    return HRegionInfo.FIRST_META_REGIONINFO;
+    return RegionInfoBuilder.FIRST_META_REGIONINFO;
   }
 
   // TODO: handle multiple meta.
-  private static final Set<HRegionInfo> META_REGION_SET =
-      Collections.singleton(HRegionInfo.FIRST_META_REGIONINFO);
-  public Set<HRegionInfo> getMetaRegionSet() {
+  private static final Set<RegionInfo> META_REGION_SET =
+      Collections.singleton(RegionInfoBuilder.FIRST_META_REGIONINFO);
+  public Set<RegionInfo> getMetaRegionSet() {
     return META_REGION_SET;
   }
 
@@ -411,15 +412,15 @@ public class AssignmentManager implements ServerListener {
   public boolean waitMetaInitialized(final Procedure proc) {
     // TODO: handle multiple meta. should this wait on all meta?
     // this is used by the ServerCrashProcedure...
-    return waitMetaInitialized(proc, HRegionInfo.FIRST_META_REGIONINFO);
+    return waitMetaInitialized(proc, RegionInfoBuilder.FIRST_META_REGIONINFO);
   }
 
-  public boolean waitMetaInitialized(final Procedure proc, final HRegionInfo regionInfo) {
+  public boolean waitMetaInitialized(final Procedure proc, final RegionInfo regionInfo) {
     return getProcedureScheduler().waitEvent(
       getMetaInitializedEvent(getMetaForRegion(regionInfo)), proc);
   }
 
-  private void setMetaInitialized(final HRegionInfo metaRegionInfo, final boolean isInitialized) {
+  private void setMetaInitialized(final RegionInfo metaRegionInfo, final boolean isInitialized) {
     assert isMetaRegion(metaRegionInfo) : "unexpected non-meta region " + metaRegionInfo;
     final ProcedureEvent metaInitEvent = getMetaInitializedEvent(metaRegionInfo);
     if (isInitialized) {
@@ -429,7 +430,7 @@ public class AssignmentManager implements ServerListener {
     }
   }
 
-  private ProcedureEvent getMetaInitializedEvent(final HRegionInfo metaRegionInfo) {
+  private ProcedureEvent getMetaInitializedEvent(final RegionInfo metaRegionInfo) {
     assert isMetaRegion(metaRegionInfo) : "unexpected non-meta region " + metaRegionInfo;
     // TODO: handle multiple meta.
     return metaInitializedEvent;
@@ -451,11 +452,11 @@ public class AssignmentManager implements ServerListener {
   // ============================================================================================
   //  TODO: Sync helpers
   // ============================================================================================
-  public void assignMeta(final HRegionInfo metaRegionInfo) throws IOException {
+  public void assignMeta(final RegionInfo metaRegionInfo) throws IOException {
     assignMeta(metaRegionInfo, null);
   }
 
-  public void assignMeta(final HRegionInfo metaRegionInfo, final ServerName serverName)
+  public void assignMeta(final RegionInfo metaRegionInfo, final ServerName serverName)
       throws IOException {
     assert isMetaRegion(metaRegionInfo) : "unexpected non-meta region " + metaRegionInfo;
     AssignProcedure proc;
@@ -490,9 +491,9 @@ public class AssignmentManager implements ServerListener {
               // handling.
               continue;
             }
-            List<HRegionInfo> regionsShouldMove = getCarryingSystemTables(server);
+            List<RegionInfo> regionsShouldMove = getCarryingSystemTables(server);
             if (!regionsShouldMove.isEmpty()) {
-              for (HRegionInfo regionInfo : regionsShouldMove) {
+              for (RegionInfo regionInfo : regionsShouldMove) {
                 // null value for dest forces destination server to be selected by balancer
                 RegionPlan plan = new RegionPlan(regionInfo, server, null);
                 if (regionInfo.isMetaRegion()) {
@@ -514,31 +515,31 @@ public class AssignmentManager implements ServerListener {
     }).start();
   }
 
-  private List<HRegionInfo> getCarryingSystemTables(ServerName serverName) {
+  private List<RegionInfo> getCarryingSystemTables(ServerName serverName) {
     Set<RegionStateNode> regions = this.getRegionStates().getServerNode(serverName).getRegions();
     if (regions == null) {
       return new ArrayList<>();
     }
     return regions.stream()
         .map(RegionStateNode::getRegionInfo)
-        .filter(HRegionInfo::isSystemTable)
+        .filter(RegionInfo::isSystemTable)
         .collect(Collectors.toList());
   }
 
-  public void assign(final HRegionInfo regionInfo) throws IOException {
+  public void assign(final RegionInfo regionInfo) throws IOException {
     assign(regionInfo, true);
   }
 
-  public void assign(final HRegionInfo regionInfo, final boolean forceNewPlan) throws IOException {
+  public void assign(final RegionInfo regionInfo, final boolean forceNewPlan) throws IOException {
     AssignProcedure proc = createAssignProcedure(regionInfo, forceNewPlan);
     ProcedureSyncWait.submitAndWaitProcedure(master.getMasterProcedureExecutor(), proc);
   }
 
-  public void unassign(final HRegionInfo regionInfo) throws IOException {
+  public void unassign(final RegionInfo regionInfo) throws IOException {
     unassign(regionInfo, false);
   }
 
-  public void unassign(final HRegionInfo regionInfo, final boolean forceNewPlan)
+  public void unassign(final RegionInfo regionInfo, final boolean forceNewPlan)
   throws IOException {
     // TODO: rename this reassign
     RegionStateNode node = this.regionStates.getRegionNode(regionInfo);
@@ -557,13 +558,13 @@ public class AssignmentManager implements ServerListener {
   }
 
   @VisibleForTesting
-  public boolean waitForAssignment(final HRegionInfo regionInfo) throws IOException {
+  public boolean waitForAssignment(final RegionInfo regionInfo) throws IOException {
     return waitForAssignment(regionInfo, Long.MAX_VALUE);
   }
 
   @VisibleForTesting
   // TODO: Remove this?
-  public boolean waitForAssignment(final HRegionInfo regionInfo, final long timeout)
+  public boolean waitForAssignment(final RegionInfo regionInfo, final long timeout)
   throws IOException {
     RegionStateNode node = null;
     // This method can be called before the regionInfo has made it into the regionStateMap
@@ -597,16 +598,16 @@ public class AssignmentManager implements ServerListener {
   //  RegionTransition procedures helpers
   // ============================================================================================
 
-  public AssignProcedure[] createAssignProcedures(final Collection<HRegionInfo> regionInfo) {
+  public AssignProcedure[] createAssignProcedures(final Collection<RegionInfo> regionInfo) {
     return createAssignProcedures(regionInfo, false);
   }
 
-  public AssignProcedure[] createAssignProcedures(final Collection<HRegionInfo> regionInfo,
+  public AssignProcedure[] createAssignProcedures(final Collection<RegionInfo> regionInfo,
       final boolean forceNewPlan) {
     if (regionInfo.isEmpty()) return null;
     final AssignProcedure[] procs = new AssignProcedure[regionInfo.size()];
     int index = 0;
-    for (HRegionInfo hri: regionInfo) {
+    for (RegionInfo hri: regionInfo) {
       procs[index++] = createAssignProcedure(hri, forceNewPlan);
     }
     return procs;
@@ -629,10 +630,10 @@ public class AssignmentManager implements ServerListener {
     return procs.toArray(UNASSIGNED_PROCEDURE_FOR_TYPE_INFO);
   }
 
-  public MoveRegionProcedure[] createReopenProcedures(final Collection<HRegionInfo> regionInfo) {
+  public MoveRegionProcedure[] createReopenProcedures(final Collection<RegionInfo> regionInfo) {
     final MoveRegionProcedure[] procs = new MoveRegionProcedure[regionInfo.size()];
     int index = 0;
-    for (HRegionInfo hri: regionInfo) {
+    for (RegionInfo hri: regionInfo) {
       final ServerName serverName = regionStates.getRegionServerOfRegion(hri);
       final RegionPlan plan = new RegionPlan(hri, serverName, serverName);
       procs[index++] = createMoveRegionProcedure(plan);
@@ -664,21 +665,21 @@ public class AssignmentManager implements ServerListener {
     return createReopenProcedures(regionStates.getRegionsOfTable(tableName));
   }
 
-  public AssignProcedure createAssignProcedure(final HRegionInfo regionInfo,
+  public AssignProcedure createAssignProcedure(final RegionInfo regionInfo,
       final boolean forceNewPlan) {
     AssignProcedure proc = new AssignProcedure(regionInfo, forceNewPlan);
     proc.setOwner(getProcedureEnvironment().getRequestUser().getShortName());
     return proc;
   }
 
-  public AssignProcedure createAssignProcedure(final HRegionInfo regionInfo,
+  public AssignProcedure createAssignProcedure(final RegionInfo regionInfo,
       final ServerName targetServer) {
     AssignProcedure proc = new AssignProcedure(regionInfo, targetServer);
     proc.setOwner(getProcedureEnvironment().getRequestUser().getShortName());
     return proc;
   }
 
-  public UnassignProcedure createUnassignProcedure(final HRegionInfo regionInfo,
+  public UnassignProcedure createUnassignProcedure(final RegionInfo regionInfo,
       final ServerName destinationServer, final boolean force) {
     // If destinationServer is null, figure it.
     ServerName sn = destinationServer != null? destinationServer:
@@ -707,13 +708,13 @@ public class AssignmentManager implements ServerListener {
   }
 
 
-  public SplitTableRegionProcedure createSplitProcedure(final HRegionInfo regionToSplit,
+  public SplitTableRegionProcedure createSplitProcedure(final RegionInfo regionToSplit,
       final byte[] splitKey) throws IOException {
     return new SplitTableRegionProcedure(getProcedureEnvironment(), regionToSplit, splitKey);
   }
 
-  public MergeTableRegionsProcedure createMergeProcedure(final HRegionInfo regionToMergeA,
-      final HRegionInfo regionToMergeB) throws IOException {
+  public MergeTableRegionsProcedure createMergeProcedure(final RegionInfo regionToMergeA,
+      final RegionInfo regionToMergeB) throws IOException {
     return new MergeTableRegionsProcedure(getProcedureEnvironment(), regionToMergeA,regionToMergeB);
   }
 
@@ -721,10 +722,10 @@ public class AssignmentManager implements ServerListener {
    * Delete the region states. This is called by "DeleteTable"
    */
   public void deleteTable(final TableName tableName) throws IOException {
-    final ArrayList<HRegionInfo> regions = regionStates.getTableRegionsInfo(tableName);
+    final ArrayList<RegionInfo> regions = regionStates.getTableRegionsInfo(tableName);
     regionStateStore.deleteRegions(regions);
     for (int i = 0; i < regions.size(); ++i) {
-      final HRegionInfo regionInfo = regions.get(i);
+      final RegionInfo regionInfo = regions.get(i);
       // we expect the region to be offline
       regionStates.removeFromOfflineRegions(regionInfo);
       regionStates.deleteRegion(regionInfo);
@@ -748,7 +749,7 @@ public class AssignmentManager implements ServerListener {
           case FAILED_OPEN:
           case CLOSED:
             assert transition.getRegionInfoCount() == 1 : transition;
-            final HRegionInfo hri = HRegionInfo.convert(transition.getRegionInfo(0));
+            final RegionInfo hri = ProtobufUtil.toRegionInfo(transition.getRegionInfo(0));
             updateRegionTransition(serverName, transition.getTransitionCode(), hri,
                 transition.hasOpenSeqNum() ? transition.getOpenSeqNum() : HConstants.NO_SEQNUM);
             break;
@@ -757,9 +758,9 @@ public class AssignmentManager implements ServerListener {
           case SPLIT:
           case SPLIT_REVERTED:
             assert transition.getRegionInfoCount() == 3 : transition;
-            final HRegionInfo parent = HRegionInfo.convert(transition.getRegionInfo(0));
-            final HRegionInfo splitA = HRegionInfo.convert(transition.getRegionInfo(1));
-            final HRegionInfo splitB = HRegionInfo.convert(transition.getRegionInfo(2));
+            final RegionInfo parent = ProtobufUtil.toRegionInfo(transition.getRegionInfo(0));
+            final RegionInfo splitA = ProtobufUtil.toRegionInfo(transition.getRegionInfo(1));
+            final RegionInfo splitB = ProtobufUtil.toRegionInfo(transition.getRegionInfo(2));
             updateRegionSplitTransition(serverName, transition.getTransitionCode(),
               parent, splitA, splitB);
             break;
@@ -768,9 +769,9 @@ public class AssignmentManager implements ServerListener {
           case MERGED:
           case MERGE_REVERTED:
             assert transition.getRegionInfoCount() == 3 : transition;
-            final HRegionInfo merged = HRegionInfo.convert(transition.getRegionInfo(0));
-            final HRegionInfo mergeA = HRegionInfo.convert(transition.getRegionInfo(1));
-            final HRegionInfo mergeB = HRegionInfo.convert(transition.getRegionInfo(2));
+            final RegionInfo merged = ProtobufUtil.toRegionInfo(transition.getRegionInfo(0));
+            final RegionInfo mergeA = ProtobufUtil.toRegionInfo(transition.getRegionInfo(1));
+            final RegionInfo mergeB = ProtobufUtil.toRegionInfo(transition.getRegionInfo(2));
             updateRegionMergeTransition(serverName, transition.getTransitionCode(),
               merged, mergeA, mergeB);
             break;
@@ -789,7 +790,7 @@ public class AssignmentManager implements ServerListener {
   }
 
   private void updateRegionTransition(final ServerName serverName, final TransitionCode state,
-      final HRegionInfo regionInfo, final long seqId)
+      final RegionInfo regionInfo, final long seqId)
       throws PleaseHoldException, UnexpectedStateException {
     checkFailoverCleanupCompleted(regionInfo);
 
@@ -830,7 +831,7 @@ public class AssignmentManager implements ServerListener {
   }
 
   private void updateRegionSplitTransition(final ServerName serverName, final TransitionCode state,
-      final HRegionInfo parent, final HRegionInfo hriA, final HRegionInfo hriB)
+      final RegionInfo parent, final RegionInfo hriA, final RegionInfo hriB)
       throws IOException {
     checkFailoverCleanupCompleted(parent);
 
@@ -863,7 +864,7 @@ public class AssignmentManager implements ServerListener {
   }
 
   private void updateRegionMergeTransition(final ServerName serverName, final TransitionCode state,
-      final HRegionInfo merged, final HRegionInfo hriA, final HRegionInfo hriB) throws IOException {
+      final RegionInfo merged, final RegionInfo hriA, final RegionInfo hriB) throws IOException {
     checkFailoverCleanupCompleted(merged);
 
     if (state != TransitionCode.READY_TO_MERGE) {
@@ -935,7 +936,7 @@ public class AssignmentManager implements ServerListener {
       final Set<byte[]> regionNames) {
     try {
       for (byte[] regionName: regionNames) {
-        final HRegionInfo hri = getMetaRegionFromName(regionName);
+        final RegionInfo hri = getMetaRegionFromName(regionName);
         if (hri == null) {
           if (LOG.isTraceEnabled()) {
             LOG.trace("Skip online report for region=" + Bytes.toStringBinary(regionName) +
@@ -1094,12 +1095,12 @@ public class AssignmentManager implements ServerListener {
       return m != null? m.values(): Collections.EMPTY_SET;
     }
 
-    public boolean isRegionOverThreshold(final HRegionInfo regionInfo) {
+    public boolean isRegionOverThreshold(final RegionInfo regionInfo) {
       Map<String, RegionState> m = this.ritsOverThreshold;
       return m != null && m.containsKey(regionInfo.getEncodedName());
     }
 
-    public boolean isRegionTwiceOverThreshold(final HRegionInfo regionInfo) {
+    public boolean isRegionTwiceOverThreshold(final RegionInfo regionInfo) {
       Map<String, RegionState> m = this.ritsOverThreshold;
       if (m == null) return false;
       final RegionState state = m.get(regionInfo.getEncodedName());
@@ -1138,7 +1139,7 @@ public class AssignmentManager implements ServerListener {
     metrics.updateRITCountOverThreshold(ritStat.getTotalRITsOverThreshold());
   }
 
-  private void handleRegionOverStuckWarningThreshold(final HRegionInfo regionInfo) {
+  private void handleRegionOverStuckWarningThreshold(final RegionInfo regionInfo) {
     final RegionStateNode regionNode = regionStates.getRegionNode(regionInfo);
     //if (regionNode.isStuck()) {
     LOG.warn("TODO Handle stuck in transition: " + regionNode);
@@ -1176,7 +1177,7 @@ public class AssignmentManager implements ServerListener {
     // TODO: use a thread pool
     regionStateStore.visitMeta(new RegionStateStore.RegionStateVisitor() {
       @Override
-      public void visitRegionState(final HRegionInfo regionInfo, final State state,
+      public void visitRegionState(final RegionInfo regionInfo, final State state,
           final ServerName regionLocation, final ServerName lastHost, final long openSeqNum) {
         final RegionStateNode regionNode = regionStates.getOrCreateRegionNode(regionInfo);
         synchronized (regionNode) {
@@ -1211,7 +1212,7 @@ public class AssignmentManager implements ServerListener {
     boolean failover = !master.getServerManager().getDeadServers().isEmpty();
 
     final Set<ServerName> offlineServersWithOnlineRegions = new HashSet<ServerName>();
-    final ArrayList<HRegionInfo> regionsToAssign = new ArrayList<HRegionInfo>();
+    final ArrayList<RegionInfo> regionsToAssign = new ArrayList<RegionInfo>();
     long st, et;
 
     st = System.currentTimeMillis();
@@ -1246,7 +1247,7 @@ public class AssignmentManager implements ServerListener {
 
     // assign offline regions
     st = System.currentTimeMillis();
-    for (HRegionInfo regionInfo: getOrderedRegions(regionsToAssign)) {
+    for (RegionInfo regionInfo: getOrderedRegions(regionsToAssign)) {
       master.getMasterProcedureExecutor().submitProcedure(
         createAssignProcedure(regionInfo, false));
     }
@@ -1285,7 +1286,7 @@ public class AssignmentManager implements ServerListener {
    * @param hri region to check if it is already rebuild
    * @throws PleaseHoldException if the failover cleanup is not completed
    */
-  private void checkFailoverCleanupCompleted(final HRegionInfo hri) throws PleaseHoldException {
+  private void checkFailoverCleanupCompleted(final RegionInfo hri) throws PleaseHoldException {
     if (!isRunning()) {
       throw new PleaseHoldException("AssignmentManager not running");
     }
@@ -1317,18 +1318,18 @@ public class AssignmentManager implements ServerListener {
       " to dead servers, submitted shutdown handler to be executed meta=" + carryingMeta);
   }
 
-  public void offlineRegion(final HRegionInfo regionInfo) {
+  public void offlineRegion(final RegionInfo regionInfo) {
     // TODO used by MasterRpcServices ServerCrashProcedure
     final RegionStateNode node = regionStates.getRegionNode(regionInfo);
     if (node != null) node.offline();
   }
 
-  public void onlineRegion(final HRegionInfo regionInfo, final ServerName serverName) {
+  public void onlineRegion(final RegionInfo regionInfo, final ServerName serverName) {
     // TODO used by TestSplitTransactionOnCluster.java
   }
 
-  public Map<ServerName, List<HRegionInfo>> getSnapShotOfAssignment(
-      final Collection<HRegionInfo> regions) {
+  public Map<ServerName, List<RegionInfo>> getSnapShotOfAssignment(
+      final Collection<RegionInfo> regions) {
     return regionStates.getSnapShotOfAssignment(regions);
   }
 
@@ -1359,13 +1360,13 @@ public class AssignmentManager implements ServerListener {
    * @param regions
    * @return A list of regions with system regions at front
    */
-  public List<HRegionInfo> getOrderedRegions(
-      final List<HRegionInfo> regions) {
+  public List<RegionInfo> getOrderedRegions(
+      final List<RegionInfo> regions) {
     if (regions == null) return Collections.emptyList();
 
-    List<HRegionInfo> systemList = new ArrayList<>();
-    List<HRegionInfo> userList = new ArrayList<>();
-    for (HRegionInfo hri : regions) {
+    List<RegionInfo> systemList = new ArrayList<>();
+    List<RegionInfo> userList = new ArrayList<>();
+    for (RegionInfo hri : regions) {
       if (hri.isSystemTable()) systemList.add(hri);
       else userList.add(hri);
     }
@@ -1395,11 +1396,11 @@ public class AssignmentManager implements ServerListener {
     return regionStates.getRegionsInTransition();
   }
 
-  public List<HRegionInfo> getAssignedRegions() {
+  public List<RegionInfo> getAssignedRegions() {
     return regionStates.getAssignedRegions();
   }
 
-  public HRegionInfo getRegionInfo(final byte[] regionName) {
+  public RegionInfo getRegionInfo(final byte[] regionName) {
     final RegionStateNode regionState = regionStates.getRegionNodeFromName(regionName);
     return regionState != null ? regionState.getRegionInfo() : null;
   }
@@ -1407,7 +1408,7 @@ public class AssignmentManager implements ServerListener {
   // ============================================================================================
   //  TODO: Region Status update
   // ============================================================================================
-  private void sendRegionOpenedNotification(final HRegionInfo regionInfo,
+  private void sendRegionOpenedNotification(final RegionInfo regionInfo,
       final ServerName serverName) {
     getBalancer().regionOnline(regionInfo, serverName);
     if (!this.listeners.isEmpty()) {
@@ -1417,7 +1418,7 @@ public class AssignmentManager implements ServerListener {
     }
   }
 
-  private void sendRegionClosedNotification(final HRegionInfo regionInfo) {
+  private void sendRegionClosedNotification(final RegionInfo regionInfo) {
     getBalancer().regionOffline(regionInfo);
     if (!this.listeners.isEmpty()) {
       for (AssignmentListener listener : this.listeners) {
@@ -1454,7 +1455,7 @@ public class AssignmentManager implements ServerListener {
   }
 
   public void markRegionAsOpened(final RegionStateNode regionNode) throws IOException {
-    final HRegionInfo hri = regionNode.getRegionInfo();
+    final RegionInfo hri = regionNode.getRegionInfo();
     synchronized (regionNode) {
       State state = regionNode.transitionState(State.OPEN, RegionStates.STATES_EXPECTED_ON_OPEN);
       if (isMetaRegion(hri)) {
@@ -1473,7 +1474,7 @@ public class AssignmentManager implements ServerListener {
   }
 
   public void markRegionAsClosing(final RegionStateNode regionNode) throws IOException {
-    final HRegionInfo hri = regionNode.getRegionInfo();
+    final RegionInfo hri = regionNode.getRegionInfo();
     synchronized (regionNode) {
       State state = regionNode.transitionState(State.CLOSING, RegionStates.STATES_EXPECTED_ON_CLOSE);
       // Set meta has not initialized early. so people trying to create/edit tables will wait
@@ -1496,7 +1497,7 @@ public class AssignmentManager implements ServerListener {
   }
 
   public void markRegionAsClosed(final RegionStateNode regionNode) throws IOException {
-    final HRegionInfo hri = regionNode.getRegionInfo();
+    final RegionInfo hri = regionNode.getRegionInfo();
     synchronized (regionNode) {
       State state = regionNode.transitionState(State.CLOSED, RegionStates.STATES_EXPECTED_ON_CLOSE);
       regionStates.removeRegionFromServer(regionNode.getRegionLocation(), regionNode);
@@ -1509,8 +1510,8 @@ public class AssignmentManager implements ServerListener {
     }
   }
 
-  public void markRegionAsSplit(final HRegionInfo parent, final ServerName serverName,
-      final HRegionInfo daughterA, final HRegionInfo daughterB)
+  public void markRegionAsSplit(final RegionInfo parent, final ServerName serverName,
+      final RegionInfo daughterA, final RegionInfo daughterB)
   throws IOException {
     // Update hbase:meta. Parent will be marked offline and split up in hbase:meta.
     // The parent stays in regionStates until cleared when removed by CatalogJanitor.
@@ -1535,8 +1536,8 @@ public class AssignmentManager implements ServerListener {
    * by the catalog janitor running against hbase:meta. It notices when the merged region no
    * longer holds references to the old regions.
    */
-  public void markRegionAsMerged(final HRegionInfo child, final ServerName serverName,
-      final HRegionInfo mother, final HRegionInfo father) throws IOException {
+  public void markRegionAsMerged(final RegionInfo child, final ServerName serverName,
+      final RegionInfo mother, final RegionInfo father) throws IOException {
     final RegionStateNode node = regionStates.getOrCreateRegionNode(child);
     node.setState(State.MERGED);
     regionStates.deleteRegion(mother);
@@ -1552,7 +1553,7 @@ public class AssignmentManager implements ServerListener {
    * Favored nodes should be applied only when FavoredNodes balancer is configured and the region
    * belongs to a non-system table.
    */
-  private boolean shouldAssignFavoredNodes(HRegionInfo region) {
+  private boolean shouldAssignFavoredNodes(RegionInfo region) {
     return this.shouldAssignRegionsWithFavoredNodes &&
         FavoredNodesManager.isFavoredNodeApplicable(region);
   }
@@ -1622,8 +1623,8 @@ public class AssignmentManager implements ServerListener {
   }
 
   @edu.umd.cs.findbugs.annotations.SuppressWarnings("WA_AWAIT_NOT_IN_LOOP")
-  private HashMap<HRegionInfo, RegionStateNode> waitOnAssignQueue() {
-    HashMap<HRegionInfo, RegionStateNode> regions = null;
+  private HashMap<RegionInfo, RegionStateNode> waitOnAssignQueue() {
+    HashMap<RegionInfo, RegionStateNode> regions = null;
 
     assignQueueLock.lock();
     try {
@@ -1633,7 +1634,7 @@ public class AssignmentManager implements ServerListener {
 
       if (!isRunning()) return null;
       assignQueueFullCond.await(assignDispatchWaitMillis, TimeUnit.MILLISECONDS);
-      regions = new HashMap<HRegionInfo, RegionStateNode>(pendingAssignQueue.size());
+      regions = new HashMap<RegionInfo, RegionStateNode>(pendingAssignQueue.size());
       for (RegionStateNode regionNode: pendingAssignQueue) {
         regions.put(regionNode.getRegionInfo(), regionNode);
       }
@@ -1648,7 +1649,7 @@ public class AssignmentManager implements ServerListener {
   }
 
   private void processAssignQueue() {
-    final HashMap<HRegionInfo, RegionStateNode> regions = waitOnAssignQueue();
+    final HashMap<RegionInfo, RegionStateNode> regions = waitOnAssignQueue();
     if (regions == null || regions.size() == 0 || !isRunning()) {
       return;
     }
@@ -1658,13 +1659,13 @@ public class AssignmentManager implements ServerListener {
     }
 
     // TODO: Optimize balancer. pass a RegionPlan?
-    final HashMap<HRegionInfo, ServerName> retainMap = new HashMap<>();
-    final List<HRegionInfo> userRRList = new ArrayList<>();
+    final HashMap<RegionInfo, ServerName> retainMap = new HashMap<>();
+    final List<RegionInfo> userRRList = new ArrayList<>();
     // regions for system tables requiring reassignment
-    final List<HRegionInfo> sysRRList = new ArrayList<>();
+    final List<RegionInfo> sysRRList = new ArrayList<>();
     for (RegionStateNode regionNode : regions.values()) {
       boolean sysTable = regionNode.isSystemTable();
-      final List<HRegionInfo> rrList = sysTable ? sysRRList : userRRList;
+      final List<RegionInfo> rrList = sysTable ? sysRRList : userRRList;
 
       if (regionNode.getRegionLocation() != null) {
         retainMap.put(regionNode.getRegionInfo(), regionNode.getRegionLocation());
@@ -1711,8 +1712,8 @@ public class AssignmentManager implements ServerListener {
     processAssignmentPlans(regions, retainMap, userRRList, servers);
   }
 
-  private void processAssignmentPlans(final HashMap<HRegionInfo, RegionStateNode> regions,
-      final HashMap<HRegionInfo, ServerName> retainMap, final List<HRegionInfo> rrList,
+  private void processAssignmentPlans(final HashMap<RegionInfo, RegionStateNode> regions,
+      final HashMap<RegionInfo, ServerName> retainMap, final List<RegionInfo> rrList,
       final List<ServerName> servers) {
     boolean isTraceEnabled = LOG.isTraceEnabled();
     if (isTraceEnabled) {
@@ -1736,7 +1737,7 @@ public class AssignmentManager implements ServerListener {
     // TODO: Do we need to split retain and round-robin?
     // the retain seems to fallback to round-robin/random if the region is not in the map.
     if (!rrList.isEmpty()) {
-      Collections.sort(rrList);
+      Collections.sort(rrList, RegionInfo.COMPARATOR);
       if (isTraceEnabled) {
         LOG.trace("round robin regions=" + rrList);
       }
@@ -1749,8 +1750,8 @@ public class AssignmentManager implements ServerListener {
     }
   }
 
-  private void acceptPlan(final HashMap<HRegionInfo, RegionStateNode> regions,
-      final Map<ServerName, List<HRegionInfo>> plan) throws HBaseIOException {
+  private void acceptPlan(final HashMap<RegionInfo, RegionStateNode> regions,
+      final Map<ServerName, List<RegionInfo>> plan) throws HBaseIOException {
     final ProcedureEvent[] events = new ProcedureEvent[regions.size()];
     final long st = System.currentTimeMillis();
 
@@ -1761,9 +1762,9 @@ public class AssignmentManager implements ServerListener {
     if (plan.isEmpty()) return;
 
     int evcount = 0;
-    for (Map.Entry<ServerName, List<HRegionInfo>> entry: plan.entrySet()) {
+    for (Map.Entry<ServerName, List<RegionInfo>> entry: plan.entrySet()) {
       final ServerName server = entry.getKey();
-      for (HRegionInfo hri: entry.getValue()) {
+      for (RegionInfo hri: entry.getValue()) {
         final RegionStateNode regionNode = regions.get(hri);
         regionNode.setRegionLocation(server);
         events[evcount++] = regionNode.getProcedureEvent();
@@ -1778,11 +1779,11 @@ public class AssignmentManager implements ServerListener {
     }
   }
 
-  private void addToPendingAssignment(final HashMap<HRegionInfo, RegionStateNode> regions,
-      final Collection<HRegionInfo> pendingRegions) {
+  private void addToPendingAssignment(final HashMap<RegionInfo, RegionStateNode> regions,
+      final Collection<RegionInfo> pendingRegions) {
     assignQueueLock.lock();
     try {
-      for (HRegionInfo hri: pendingRegions) {
+      for (RegionInfo hri: pendingRegions) {
         pendingAssignQueue.add(regions.get(hri));
       }
     } finally {

http://git-wip-us.apache.org/repos/asf/hbase/blob/a11a35a1/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/GCMergedRegionsProcedure.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/GCMergedRegionsProcedure.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/GCMergedRegionsProcedure.java
index 6ca00da..37521cc 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/GCMergedRegionsProcedure.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/GCMergedRegionsProcedure.java
@@ -18,17 +18,20 @@
 package org.apache.hadoop.hbase.master.assignment;
 
 import java.io.IOException;
+
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.hadoop.hbase.HRegionInfo;
 import org.apache.hadoop.hbase.MetaTableAccessor;
 import org.apache.hadoop.hbase.TableName;
-import org.apache.yetus.audience.InterfaceAudience;
+import org.apache.hadoop.hbase.client.RegionInfo;
 import org.apache.hadoop.hbase.master.procedure.AbstractStateMachineTableProcedure;
 import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;
 import org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer;
 import org.apache.hadoop.hbase.procedure2.ProcedureSuspendedException;
 import org.apache.hadoop.hbase.procedure2.ProcedureYieldException;
+import org.apache.yetus.audience.InterfaceAudience;
+
+import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;
 import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos;
 import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.GCMergedRegionsState;
 
@@ -43,14 +46,14 @@ import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.G
 public class GCMergedRegionsProcedure
 extends AbstractStateMachineTableProcedure<GCMergedRegionsState> {
   private static final Log LOG = LogFactory.getLog(GCMergedRegionsProcedure.class);
-  private HRegionInfo father;
-  private HRegionInfo mother;
-  private HRegionInfo mergedChild;
+  private RegionInfo father;
+  private RegionInfo mother;
+  private RegionInfo mergedChild;
 
   public GCMergedRegionsProcedure(final MasterProcedureEnv env,
-      final HRegionInfo mergedChild,
-      final HRegionInfo father,
-      final HRegionInfo mother) {
+      final RegionInfo mergedChild,
+      final RegionInfo father,
+      final RegionInfo mother) {
     super(env);
     this.father = father;
     this.mother = mother;
@@ -100,7 +103,7 @@ extends AbstractStateMachineTableProcedure<GCMergedRegionsState> {
   private GCRegionProcedure[] createGCRegionProcedures(final MasterProcedureEnv env) {
     GCRegionProcedure [] procs = new GCRegionProcedure[2];
     int index = 0;
-    for (HRegionInfo hri: new HRegionInfo [] {this.father, this.mother}) {
+    for (RegionInfo hri: new RegionInfo [] {this.father, this.mother}) {
       GCRegionProcedure proc = new GCRegionProcedure(env, hri);
       proc.setOwner(env.getRequestUser().getShortName());
       procs[index++] = proc;
@@ -135,9 +138,9 @@ extends AbstractStateMachineTableProcedure<GCMergedRegionsState> {
     super.serializeStateData(serializer);
     final MasterProcedureProtos.GCMergedRegionsStateData.Builder msg =
         MasterProcedureProtos.GCMergedRegionsStateData.newBuilder().
-        setParentA(HRegionInfo.convert(this.father)).
-        setParentB(HRegionInfo.convert(this.mother)).
-        setMergedChild(HRegionInfo.convert(this.mergedChild));
+        setParentA(ProtobufUtil.toRegionInfo(this.father)).
+        setParentB(ProtobufUtil.toRegionInfo(this.mother)).
+        setMergedChild(ProtobufUtil.toRegionInfo(this.mergedChild));
     serializer.serialize(msg.build());
   }
 
@@ -147,9 +150,9 @@ extends AbstractStateMachineTableProcedure<GCMergedRegionsState> {
     super.deserializeStateData(serializer);
     final MasterProcedureProtos.GCMergedRegionsStateData msg =
         serializer.deserialize(MasterProcedureProtos.GCMergedRegionsStateData.class);
-    this.father = HRegionInfo.convert(msg.getParentA());
-    this.mother = HRegionInfo.convert(msg.getParentB());
-    this.mergedChild = HRegionInfo.convert(msg.getMergedChild());
+    this.father = ProtobufUtil.toRegionInfo(msg.getParentA());
+    this.mother = ProtobufUtil.toRegionInfo(msg.getParentB());
+    this.mergedChild = ProtobufUtil.toRegionInfo(msg.getMergedChild());
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/hbase/blob/a11a35a1/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/GCRegionProcedure.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/GCRegionProcedure.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/GCRegionProcedure.java
index bc3cc0f..805b870 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/GCRegionProcedure.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/GCRegionProcedure.java
@@ -18,13 +18,13 @@
 package org.apache.hadoop.hbase.master.assignment;
 
 import java.io.IOException;
+
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.fs.FileSystem;
-import org.apache.hadoop.hbase.HRegionInfo;
 import org.apache.hadoop.hbase.MetaTableAccessor;
 import org.apache.hadoop.hbase.backup.HFileArchiver;
-import org.apache.yetus.audience.InterfaceAudience;
+import org.apache.hadoop.hbase.client.RegionInfo;
 import org.apache.hadoop.hbase.favored.FavoredNodesManager;
 import org.apache.hadoop.hbase.master.MasterServices;
 import org.apache.hadoop.hbase.master.procedure.AbstractStateMachineRegionProcedure;
@@ -32,10 +32,12 @@ import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;
 import org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer;
 import org.apache.hadoop.hbase.procedure2.ProcedureSuspendedException;
 import org.apache.hadoop.hbase.procedure2.ProcedureYieldException;
-import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos;
-import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.GCRegionState;
+import org.apache.yetus.audience.InterfaceAudience;
 
 import org.apache.hadoop.hbase.shaded.com.google.common.collect.Lists;
+import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;
+import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos;
+import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.GCRegionState;
 
 /**
  * GC a Region that is no longer in use. It has been split or merged away.
@@ -47,7 +49,7 @@ import org.apache.hadoop.hbase.shaded.com.google.common.collect.Lists;
 public class GCRegionProcedure extends AbstractStateMachineRegionProcedure<GCRegionState> {
   private static final Log LOG = LogFactory.getLog(GCRegionProcedure.class);
 
-  public GCRegionProcedure(final MasterProcedureEnv env, final HRegionInfo hri) {
+  public GCRegionProcedure(final MasterProcedureEnv env, final RegionInfo hri) {
     super(env, hri);
   }
 
@@ -135,7 +137,7 @@ public class GCRegionProcedure extends AbstractStateMachineRegionProcedure<GCReg
     // Double serialization of regionname. Superclass is also serializing. Fix.
     final MasterProcedureProtos.GCRegionStateData.Builder msg =
         MasterProcedureProtos.GCRegionStateData.newBuilder()
-        .setRegionInfo(HRegionInfo.convert(getRegion()));
+        .setRegionInfo(ProtobufUtil.toRegionInfo(getRegion()));
     serializer.serialize(msg.build());
   }
 
@@ -145,7 +147,7 @@ public class GCRegionProcedure extends AbstractStateMachineRegionProcedure<GCReg
     super.deserializeStateData(serializer);
     final MasterProcedureProtos.GCRegionStateData msg =
         serializer.deserialize(MasterProcedureProtos.GCRegionStateData.class);
-    setRegion(HRegionInfo.convert(msg.getRegionInfo()));
+    setRegion(ProtobufUtil.toRegionInfo(msg.getRegionInfo()));
   }
 
   @Override