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 2018/01/04 05:16:53 UTC

[3/3] hbase git commit: HBASE-19596 RegionMetrics/ServerMetrics/ClusterMetrics should apply to all public classes

HBASE-19596 RegionMetrics/ServerMetrics/ClusterMetrics should apply to all public classes


Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/654edc5f
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/654edc5f
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/654edc5f

Branch: refs/heads/branch-2
Commit: 654edc5fa586a4b9c3e225a17836a6acc1d32928
Parents: 72631a0
Author: Chia-Ping Tsai <ch...@gmail.com>
Authored: Thu Jan 4 12:40:09 2018 +0800
Committer: Chia-Ping Tsai <ch...@gmail.com>
Committed: Thu Jan 4 13:05:21 2018 +0800

----------------------------------------------------------------------
 .../hadoop/hbase/RegionMetricsBuilder.java      |   8 +
 .../org/apache/hadoop/hbase/client/Admin.java   | 119 ++---
 .../apache/hadoop/hbase/client/AsyncAdmin.java  |  44 +-
 .../hadoop/hbase/client/AsyncHBaseAdmin.java    |  20 +-
 .../hbase/client/ClusterStatusListener.java     |  13 +-
 .../apache/hadoop/hbase/client/HBaseAdmin.java  |  48 +-
 .../hadoop/hbase/client/RawAsyncHBaseAdmin.java |  49 +-
 .../hbase/shaded/protobuf/ProtobufUtil.java     |  27 --
 .../hadoop/hbase/client/TestInterfaceAlign.java |   3 +-
 .../hadoop/hbase/DistributedHBaseCluster.java   |  56 +--
 .../hadoop/hbase/IntegrationTestIngest.java     |   6 +-
 .../hbase/IntegrationTestLazyCfLoading.java     |  10 +-
 ...IntegrationTestRegionReplicaReplication.java |   7 +-
 .../hadoop/hbase/IntegrationTestingUtility.java |   7 +-
 .../StripeCompactionsPerformanceEvaluation.java |  10 +-
 .../hadoop/hbase/chaos/actions/Action.java      |  38 +-
 .../chaos/actions/BatchRestartRsAction.java     |   5 +-
 .../chaos/actions/DumpClusterStatusAction.java  |   2 +-
 .../chaos/actions/MoveRegionsOfTableAction.java |   2 +-
 .../actions/RestartActiveMasterAction.java      |   2 +-
 .../actions/RestartRsHoldingMetaAction.java     |   6 +-
 .../UnbalanceKillAndRebalanceAction.java        |   7 +-
 .../chaos/actions/UnbalanceRegionsAction.java   |   7 +-
 .../mapreduce/IntegrationTestBulkLoad.java      |   5 +-
 .../hadoop/hbase/mttr/IntegrationTestMTTR.java  |   4 +-
 .../test/IntegrationTestBigLinkedList.java      |   7 +-
 ...stTimeBoundedRequestsWithRegionReplicas.java |   5 +-
 .../hbase/mapreduce/RegionSizeCalculator.java   |  15 +-
 .../mapreduce/TestRegionSizeCalculator.java     |  42 +-
 .../rest/StorageClusterStatusResource.java      |  48 +-
 .../rest/StorageClusterVersionResource.java     |   2 +-
 .../hbase/rsgroup/RSGroupBasedLoadBalancer.java |  11 +-
 .../hadoop/hbase/rsgroup/TestRSGroupsBase.java  |  57 +--
 .../tmpl/master/BackupMasterStatusTmpl.jamon    |   4 +-
 .../hbase/coprocessor/MasterObserver.java       |   9 +-
 .../hbase/master/ClusterStatusPublisher.java    |  33 +-
 .../org/apache/hadoop/hbase/master/HMaster.java |  36 +-
 .../hadoop/hbase/master/LoadBalancer.java       |   8 +-
 .../hbase/master/MasterCoprocessorHost.java     |  14 +-
 .../hadoop/hbase/master/MasterRpcServices.java  |   3 +-
 .../hbase/master/RegionPlacementMaintainer.java | 451 ++++++++++---------
 .../master/balancer/BalancerRegionLoad.java     |  17 +-
 .../hbase/master/balancer/BaseLoadBalancer.java |   8 +-
 .../master/balancer/ClusterStatusChore.java     |   2 +-
 .../master/balancer/RegionLocationFinder.java   |  10 +-
 .../master/balancer/StochasticLoadBalancer.java |  35 +-
 .../hbase/security/access/AccessController.java |   2 -
 .../org/apache/hadoop/hbase/tool/Canary.java    |  17 +-
 .../org/apache/hadoop/hbase/util/HBaseFsck.java |  20 +-
 .../hadoop/hbase/util/HBaseFsckRepair.java      |   2 +-
 .../apache/hadoop/hbase/util/RegionMover.java   |   4 +-
 .../hadoop/hbase/util/RegionSplitter.java       |   6 +-
 .../org/apache/hadoop/hbase/HBaseCluster.java   |  24 +-
 .../hadoop/hbase/HBaseTestingUtility.java       |   5 +-
 .../apache/hadoop/hbase/MiniHBaseCluster.java   |  31 +-
 .../hadoop/hbase/TestClientClusterMetrics.java  |  29 +-
 .../hadoop/hbase/TestClientClusterStatus.java   |  51 +--
 .../org/apache/hadoop/hbase/TestRegionLoad.java |  21 +-
 .../apache/hadoop/hbase/TestRegionMetrics.java  |  14 +-
 .../hbase/TestStochasticBalancerJmxMetrics.java |  17 +-
 .../apache/hadoop/hbase/client/TestAdmin2.java  |   3 +-
 .../hbase/client/TestAsyncClusterAdminApi.java  |  45 +-
 .../client/TestAsyncDecommissionAdminApi.java   |   3 +-
 .../hadoop/hbase/client/TestFromClientSide.java |   7 +-
 .../hbase/client/TestMetaWithReplicas.java      |  10 +-
 .../hadoop/hbase/client/TestMultiParallel.java  |   2 +-
 .../hbase/coprocessor/TestMasterObserver.java   |   4 +-
 .../hadoop/hbase/master/TestMasterFailover.java |  29 +-
 .../TestMasterFailoverBalancerPersistence.java  |  25 +-
 .../TestMasterOperationsForRegionReplicas.java  |   6 +-
 .../hadoop/hbase/master/TestMasterShutdown.java |   8 +-
 .../TestFavoredStochasticBalancerPickers.java   |   8 +-
 .../TestFavoredStochasticLoadBalancer.java      |  27 +-
 .../balancer/TestRegionLocationFinder.java      |   3 +-
 .../balancer/TestStochasticLoadBalancer.java    |  32 +-
 .../TestRegionServerReadRequestMetrics.java     |  10 +-
 .../TestSplitTransactionOnCluster.java          |   6 +-
 .../replication/TestMasterReplication.java      |   9 +-
 .../replication/TestReplicationStatus.java      |   5 +-
 .../security/access/TestAccessController.java   |   7 +-
 .../hbase/snapshot/SnapshotTestingUtils.java    |   9 +-
 .../hadoop/hbase/util/BaseTestHBaseFsck.java    |   8 +-
 .../util/TestMiniClusterLoadSequential.java     |   4 +-
 83 files changed, 902 insertions(+), 933 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/654edc5f/hbase-client/src/main/java/org/apache/hadoop/hbase/RegionMetricsBuilder.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/RegionMetricsBuilder.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/RegionMetricsBuilder.java
index b5d8048..f2a549a 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/RegionMetricsBuilder.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/RegionMetricsBuilder.java
@@ -29,12 +29,20 @@ import org.apache.yetus.audience.InterfaceAudience;
 
 import org.apache.hbase.thirdparty.com.google.common.base.Preconditions;
 import org.apache.hbase.thirdparty.com.google.protobuf.UnsafeByteOperations;
+
+import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos;
 import org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos;
 import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos;
 
 @InterfaceAudience.Private
 public final class RegionMetricsBuilder {
 
+  public static List<RegionMetrics> toRegionMetrics(
+      AdminProtos.GetRegionLoadResponse regionLoadResponse) {
+    return regionLoadResponse.getRegionLoadsList().stream()
+        .map(RegionMetricsBuilder::toRegionMetrics).collect(Collectors.toList());
+  }
+
   public static RegionMetrics toRegionMetrics(ClusterStatusProtos.RegionLoad regionLoadPB) {
     return RegionMetricsBuilder
         .newBuilder(regionLoadPB.getRegionSpecifier().getValue().toByteArray())

http://git-wip-us.apache.org/repos/asf/hbase/blob/654edc5f/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Admin.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Admin.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Admin.java
index a94593c..f61b32e 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Admin.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Admin.java
@@ -25,19 +25,19 @@ import java.util.EnumSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-import java.util.TreeMap;
 import java.util.concurrent.Future;
 import java.util.regex.Pattern;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hbase.Abortable;
 import org.apache.hadoop.hbase.CacheEvictionStats;
+import org.apache.hadoop.hbase.ClusterMetrics;
 import org.apache.hadoop.hbase.ClusterMetrics.Option;
 import org.apache.hadoop.hbase.ClusterStatus;
 import org.apache.hadoop.hbase.HRegionInfo;
 import org.apache.hadoop.hbase.HTableDescriptor;
 import org.apache.hadoop.hbase.NamespaceDescriptor;
 import org.apache.hadoop.hbase.NamespaceNotFoundException;
-import org.apache.hadoop.hbase.RegionLoad;
+import org.apache.hadoop.hbase.RegionMetrics;
 import org.apache.hadoop.hbase.ServerName;
 import org.apache.hadoop.hbase.TableExistsException;
 import org.apache.hadoop.hbase.TableName;
@@ -56,7 +56,6 @@ import org.apache.hadoop.hbase.snapshot.HBaseSnapshotException;
 import org.apache.hadoop.hbase.snapshot.RestoreSnapshotException;
 import org.apache.hadoop.hbase.snapshot.SnapshotCreationException;
 import org.apache.hadoop.hbase.snapshot.UnknownSnapshotException;
-import org.apache.hadoop.hbase.util.Bytes;
 import org.apache.hadoop.hbase.util.Pair;
 import org.apache.yetus.audience.InterfaceAudience;
 
@@ -1452,22 +1451,45 @@ public interface Admin extends Abortable, Closeable {
    * </pre>
    * @return cluster status
    * @throws IOException if a remote or network exception occurs
+   * @deprecated since 2.0 version and will be removed in 3.0 version.
+   *             use {@link #getClusterMetrics()}
+   */
+  @Deprecated
+  default ClusterStatus getClusterStatus() throws IOException {
+    return new ClusterStatus(getClusterMetrics());
+  }
+
+  /**
+   * Get whole cluster metrics, containing status about:
+   * <pre>
+   * hbase version
+   * cluster id
+   * primary/backup master(s)
+   * master's coprocessors
+   * live/dead regionservers
+   * balancer
+   * regions in transition
+   * </pre>
+   * @return cluster metrics
+   * @throws IOException if a remote or network exception occurs
    */
-  ClusterStatus getClusterStatus() throws IOException;
+  default ClusterMetrics getClusterMetrics() throws IOException {
+    return getClusterMetrics(EnumSet.allOf(ClusterMetrics.Option.class));
+  }
 
   /**
    * Get cluster status with a set of {@link Option} to get desired status.
    * @return cluster status
    * @throws IOException if a remote or network exception occurs
    */
-  ClusterStatus getClusterStatus(EnumSet<Option> options) throws IOException;
+  ClusterMetrics getClusterMetrics(EnumSet<Option> options) throws IOException;
 
   /**
    * @return current master server name
    * @throws IOException if a remote or network exception occurs
    */
   default ServerName getMaster() throws IOException {
-    return getClusterStatus(EnumSet.of(Option.MASTER)).getMaster();
+    return getClusterMetrics(EnumSet.of(Option.MASTER)).getMasterName();
   }
 
   /**
@@ -1475,7 +1497,7 @@ public interface Admin extends Abortable, Closeable {
    * @throws IOException if a remote or network exception occurs
    */
   default Collection<ServerName> getBackupMasters() throws IOException {
-    return getClusterStatus(EnumSet.of(Option.BACKUP_MASTERS)).getBackupMasters();
+    return getClusterMetrics(EnumSet.of(Option.BACKUP_MASTERS)).getBackupMasterNames();
   }
 
   /**
@@ -1483,64 +1505,30 @@ public interface Admin extends Abortable, Closeable {
    * @throws IOException if a remote or network exception occurs
    */
   default Collection<ServerName> getRegionServers() throws IOException {
-    return getClusterStatus(EnumSet.of(Option.LIVE_SERVERS)).getServers();
+    return getClusterMetrics(EnumSet.of(Option.LIVE_SERVERS)).getLiveServerMetrics().keySet();
   }
 
   /**
-   * Get {@link RegionLoad} of all regions hosted on a regionserver.
+   * Get {@link RegionMetrics} of all regions hosted on a regionserver.
    *
-   * @param serverName region server from which regionload is required.
-   * @return region load map of all regions hosted on a region server
+   * @param serverName region server from which {@link RegionMetrics} is required.
+   * @return a {@link RegionMetrics} list of all regions hosted on a region server
    * @throws IOException if a remote or network exception occurs
-   * @deprecated since 2.0 version and will be removed in 3.0 version.
-   *             use {@link #getRegionLoads(ServerName)}
    */
-  @Deprecated
-  default Map<byte[], RegionLoad> getRegionLoad(ServerName serverName) throws IOException {
-    return getRegionLoad(serverName, null);
+  default List<RegionMetrics> getRegionMetrics(ServerName serverName) throws IOException {
+    return getRegionMetrics(serverName, null);
   }
 
   /**
-   * Get {@link RegionLoad} of all regions hosted on a regionserver.
+   * Get {@link RegionMetrics} of all regions hosted on a regionserver for a table.
    *
-   * @param serverName region server from which regionload is required.
-   * @return a region load list of all regions hosted on a region server
+   * @param serverName region server from which {@link RegionMetrics} is required.
+   * @param tableName get {@link RegionMetrics} of regions belonging to the table
+   * @return region metrics map of all regions of a table hosted on a region server
    * @throws IOException if a remote or network exception occurs
    */
-  default List<RegionLoad> getRegionLoads(ServerName serverName) throws IOException {
-    return getRegionLoads(serverName, null);
-  }
-
-  /**
-   * Get {@link RegionLoad} of all regions hosted on a regionserver for a table.
-   *
-   * @param serverName region server from which regionload is required.
-   * @param tableName get region load of regions belonging to the table
-   * @return region load map of all regions of a table hosted on a region server
-   * @throws IOException if a remote or network exception occurs
-   * @deprecated since 2.0 version and will be removed in 3.0 version.
-   *             use {@link #getRegionLoads(ServerName, TableName)}
-   */
-  @Deprecated
-  default Map<byte[], RegionLoad> getRegionLoad(ServerName serverName, TableName tableName)
-      throws IOException {
-    List<RegionLoad> regionLoads = getRegionLoads(serverName, tableName);
-    Map<byte[], RegionLoad> resultMap = new TreeMap<>(Bytes.BYTES_COMPARATOR);
-    for (RegionLoad regionLoad : regionLoads) {
-      resultMap.put(regionLoad.getName(), regionLoad);
-    }
-    return resultMap;
-  }
-
-  /**
-   * Get {@link RegionLoad} of all regions hosted on a regionserver for a table.
-   *
-   * @param serverName region server from which regionload is required.
-   * @param tableName get region load of regions belonging to the table
-   * @return region load map of all regions of a table hosted on a region server
-   * @throws IOException if a remote or network exception occurs
-   */
-  List<RegionLoad> getRegionLoads(ServerName serverName, TableName tableName) throws IOException;
+  List<RegionMetrics> getRegionMetrics(ServerName serverName,
+    TableName tableName) throws IOException;
 
   /**
    * @return Configuration used by the instance.
@@ -1772,11 +1760,26 @@ public interface Admin extends Abortable, Closeable {
   void rollWALWriter(ServerName serverName) throws IOException, FailedLogCloseException;
 
   /**
-   * Helper that delegates to getClusterStatus().getMasterCoprocessors().
+   * Helper that delegates to getClusterMetrics().getMasterCoprocessorNames().
+   * @return an array of master coprocessors
+   * @see org.apache.hadoop.hbase.ClusterMetrics#getMasterCoprocessorNames()
+   * @deprecated since 2.0 version and will be removed in 3.0 version.
+   *             use {@link #getMasterCoprocessorNames()}
+   */
+  @Deprecated
+  default String[] getMasterCoprocessors() throws IOException {
+    return getMasterCoprocessorNames().stream().toArray(size -> new String[size]);
+  }
+
+  /**
+   * Helper that delegates to getClusterMetrics().getMasterCoprocessorNames().
    * @return an array of master coprocessors
-   * @see org.apache.hadoop.hbase.ClusterStatus#getMasterCoprocessors()
+   * @see org.apache.hadoop.hbase.ClusterMetrics#getMasterCoprocessorNames()
    */
-  String[] getMasterCoprocessors() throws IOException;
+  default List<String> getMasterCoprocessorNames() throws IOException {
+    return getClusterMetrics(EnumSet.of(Option.MASTER_COPROCESSORS))
+      .getMasterCoprocessorNames();
+  }
 
   /**
    * Get the current compaction state of a table. It could be in a major compaction, a minor
@@ -2371,7 +2374,7 @@ public interface Admin extends Abortable, Closeable {
    * @throws IOException
    */
   default int getMasterInfoPort() throws IOException {
-    return getClusterStatus(EnumSet.of(Option.MASTER_INFO_PORT)).getMasterInfoPort();
+    return getClusterMetrics(EnumSet.of(Option.MASTER_INFO_PORT)).getMasterInfoPort();
   }
 
   /**
@@ -2617,7 +2620,7 @@ public interface Admin extends Abortable, Closeable {
    * @return List of dead region servers.
    */
   default List<ServerName> listDeadServers() throws IOException {
-    return getClusterStatus(EnumSet.of(Option.DEAD_SERVERS)).getDeadServerNames();
+    return getClusterMetrics(EnumSet.of(Option.DEAD_SERVERS)).getDeadServerNames();
   }
 
   /**

http://git-wip-us.apache.org/repos/asf/hbase/blob/654edc5f/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncAdmin.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncAdmin.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncAdmin.java
index e976033..af39f17 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncAdmin.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncAdmin.java
@@ -18,7 +18,6 @@
 package org.apache.hadoop.hbase.client;
 
 import com.google.protobuf.RpcChannel;
-import java.util.Arrays;
 import java.util.Collection;
 import java.util.EnumSet;
 import java.util.List;
@@ -28,10 +27,10 @@ import java.util.Set;
 import java.util.concurrent.CompletableFuture;
 import java.util.function.Function;
 import java.util.regex.Pattern;
+import org.apache.hadoop.hbase.ClusterMetrics;
 import org.apache.hadoop.hbase.ClusterMetrics.Option;
-import org.apache.hadoop.hbase.ClusterStatus;
 import org.apache.hadoop.hbase.NamespaceDescriptor;
-import org.apache.hadoop.hbase.RegionLoad;
+import org.apache.hadoop.hbase.RegionMetrics;
 import org.apache.hadoop.hbase.ServerName;
 import org.apache.hadoop.hbase.TableName;
 import org.apache.hadoop.hbase.client.replication.TableCFs;
@@ -886,40 +885,42 @@ public interface AsyncAdmin {
   /**
    * @return cluster status wrapped by {@link CompletableFuture}
    */
-  CompletableFuture<ClusterStatus> getClusterStatus();
+  CompletableFuture<ClusterMetrics> getClusterMetrics();
 
   /**
    * @return cluster status wrapped by {@link CompletableFuture}
    */
-  CompletableFuture<ClusterStatus> getClusterStatus(EnumSet<Option> options);
+  CompletableFuture<ClusterMetrics> getClusterMetrics(EnumSet<Option> options);
 
   /**
    * @return current master server name wrapped by {@link CompletableFuture}
    */
   default CompletableFuture<ServerName> getMaster() {
-    return getClusterStatus(EnumSet.of(Option.MASTER)).thenApply(ClusterStatus::getMaster);
+    return getClusterMetrics(EnumSet.of(Option.MASTER)).thenApply(ClusterMetrics::getMasterName);
   }
 
   /**
    * @return current backup master list wrapped by {@link CompletableFuture}
    */
   default CompletableFuture<Collection<ServerName>> getBackupMasters() {
-    return getClusterStatus(EnumSet.of(Option.BACKUP_MASTERS)).thenApply(ClusterStatus::getBackupMasters);
+    return getClusterMetrics(EnumSet.of(Option.BACKUP_MASTERS))
+      .thenApply(ClusterMetrics::getBackupMasterNames);
   }
 
   /**
    * @return current live region servers list wrapped by {@link CompletableFuture}
    */
   default CompletableFuture<Collection<ServerName>> getRegionServers() {
-    return getClusterStatus(EnumSet.of(Option.LIVE_SERVERS)).thenApply(ClusterStatus::getServers);
+    return getClusterMetrics(EnumSet.of(Option.LIVE_SERVERS))
+      .thenApply(cm -> cm.getLiveServerMetrics().keySet());
   }
 
   /**
    * @return a list of master coprocessors wrapped by {@link CompletableFuture}
    */
-  default CompletableFuture<List<String>> getMasterCoprocessors() {
-    return getClusterStatus(EnumSet.of(Option.MASTER_COPROCESSORS))
-        .thenApply(ClusterStatus::getMasterCoprocessors).thenApply(Arrays::asList);
+  default CompletableFuture<List<String>> getMasterCoprocessorNames() {
+    return getClusterMetrics(EnumSet.of(Option.MASTER_COPROCESSORS))
+        .thenApply(ClusterMetrics::getMasterCoprocessorNames);
   }
 
   /**
@@ -927,8 +928,8 @@ public interface AsyncAdmin {
    * @return master info port
    */
   default CompletableFuture<Integer> getMasterInfoPort() {
-    return getClusterStatus(EnumSet.of(Option.MASTER_INFO_PORT)).thenApply(
-      ClusterStatus::getMasterInfoPort);
+    return getClusterMetrics(EnumSet.of(Option.MASTER_INFO_PORT)).thenApply(
+      ClusterMetrics::getMasterInfoPort);
   }
 
   /**
@@ -978,19 +979,20 @@ public interface AsyncAdmin {
   CompletableFuture<Void> clearCompactionQueues(ServerName serverName, Set<String> queues);
 
   /**
-   * Get a list of {@link RegionLoad} of all regions hosted on a region seerver.
+   * Get a list of {@link RegionMetrics} of all regions hosted on a region seerver.
    * @param serverName
-   * @return a list of {@link RegionLoad} wrapped by {@link CompletableFuture}
+   * @return a list of {@link RegionMetrics} wrapped by {@link CompletableFuture}
    */
-  CompletableFuture<List<RegionLoad>> getRegionLoads(ServerName serverName);
+  CompletableFuture<List<RegionMetrics>> getRegionMetrics(ServerName serverName);
 
   /**
-   * Get a list of {@link RegionLoad} of all regions hosted on a region seerver for a table.
+   * Get a list of {@link RegionMetrics} of all regions hosted on a region seerver for a table.
    * @param serverName
    * @param tableName
-   * @return a list of {@link RegionLoad} wrapped by {@link CompletableFuture}
+   * @return a list of {@link RegionMetrics} wrapped by {@link CompletableFuture}
    */
-  CompletableFuture<List<RegionLoad>> getRegionLoads(ServerName serverName, TableName tableName);
+  CompletableFuture<List<RegionMetrics>> getRegionMetrics(ServerName serverName,
+    TableName tableName);
 
   /**
    * Check whether master is in maintenance mode
@@ -1199,8 +1201,8 @@ public interface AsyncAdmin {
    * List all the dead region servers.
    */
   default CompletableFuture<List<ServerName>> listDeadServers() {
-    return this.getClusterStatus(EnumSet.of(Option.DEAD_SERVERS))
-        .thenApply(ClusterStatus::getDeadServerNames);
+    return this.getClusterMetrics(EnumSet.of(Option.DEAD_SERVERS))
+        .thenApply(ClusterMetrics::getDeadServerNames);
   }
 
   /**

http://git-wip-us.apache.org/repos/asf/hbase/blob/654edc5f/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncHBaseAdmin.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncHBaseAdmin.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncHBaseAdmin.java
index e60e422..3ca5d69 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncHBaseAdmin.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncHBaseAdmin.java
@@ -27,10 +27,10 @@ import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.ExecutorService;
 import java.util.function.Function;
 import java.util.regex.Pattern;
+import org.apache.hadoop.hbase.ClusterMetrics;
 import org.apache.hadoop.hbase.ClusterMetrics.Option;
-import org.apache.hadoop.hbase.ClusterStatus;
 import org.apache.hadoop.hbase.NamespaceDescriptor;
-import org.apache.hadoop.hbase.RegionLoad;
+import org.apache.hadoop.hbase.RegionMetrics;
 import org.apache.hadoop.hbase.ServerName;
 import org.apache.hadoop.hbase.TableName;
 import org.apache.hadoop.hbase.client.replication.TableCFs;
@@ -566,13 +566,13 @@ class AsyncHBaseAdmin implements AsyncAdmin {
   }
 
   @Override
-  public CompletableFuture<ClusterStatus> getClusterStatus() {
-    return getClusterStatus(EnumSet.allOf(Option.class));
+  public CompletableFuture<ClusterMetrics> getClusterMetrics() {
+    return getClusterMetrics(EnumSet.allOf(Option.class));
   }
 
   @Override
-  public CompletableFuture<ClusterStatus> getClusterStatus(EnumSet<Option> options) {
-    return wrap(rawAdmin.getClusterStatus(options));
+  public CompletableFuture<ClusterMetrics> getClusterMetrics(EnumSet<Option> options) {
+    return wrap(rawAdmin.getClusterMetrics(options));
   }
 
   @Override
@@ -616,14 +616,14 @@ class AsyncHBaseAdmin implements AsyncAdmin {
   }
 
   @Override
-  public CompletableFuture<List<RegionLoad>> getRegionLoads(ServerName serverName) {
-    return wrap(rawAdmin.getRegionLoads(serverName));
+  public CompletableFuture<List<RegionMetrics>> getRegionMetrics(ServerName serverName) {
+    return wrap(rawAdmin.getRegionMetrics(serverName));
   }
 
   @Override
-  public CompletableFuture<List<RegionLoad>> getRegionLoads(ServerName serverName,
+  public CompletableFuture<List<RegionMetrics>> getRegionMetrics(ServerName serverName,
       TableName tableName) {
-    return wrap(rawAdmin.getRegionLoads(serverName, tableName));
+    return wrap(rawAdmin.getRegionMetrics(serverName, tableName));
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/hbase/blob/654edc5f/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ClusterStatusListener.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ClusterStatusListener.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ClusterStatusListener.java
index f2dae7a..7361238 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ClusterStatusListener.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ClusterStatusListener.java
@@ -19,8 +19,6 @@
 
 package org.apache.hadoop.hbase.client;
 
-
-
 import java.io.Closeable;
 import java.io.IOException;
 import java.lang.reflect.Constructor;
@@ -30,9 +28,9 @@ import java.net.NetworkInterface;
 import java.net.UnknownHostException;
 import java.util.ArrayList;
 import java.util.List;
-
 import org.apache.hadoop.conf.Configuration;
-import org.apache.hadoop.hbase.ClusterStatus;
+import org.apache.hadoop.hbase.ClusterMetrics;
+import org.apache.hadoop.hbase.ClusterMetricsBuilder;
 import org.apache.hadoop.hbase.HBaseInterfaceAudience;
 import org.apache.hadoop.hbase.HConstants;
 import org.apache.hadoop.hbase.ServerName;
@@ -42,6 +40,7 @@ import org.apache.hadoop.hbase.util.Threads;
 import org.apache.yetus.audience.InterfaceAudience;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+
 import org.apache.hbase.thirdparty.io.netty.bootstrap.Bootstrap;
 import org.apache.hbase.thirdparty.io.netty.buffer.ByteBufInputStream;
 import org.apache.hbase.thirdparty.io.netty.channel.ChannelHandlerContext;
@@ -52,7 +51,7 @@ import org.apache.hbase.thirdparty.io.netty.channel.nio.NioEventLoopGroup;
 import org.apache.hbase.thirdparty.io.netty.channel.socket.DatagramChannel;
 import org.apache.hbase.thirdparty.io.netty.channel.socket.DatagramPacket;
 import org.apache.hbase.thirdparty.io.netty.channel.socket.nio.NioDatagramChannel;
-import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;
+
 import org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos;
 
 /**
@@ -133,7 +132,7 @@ class ClusterStatusListener implements Closeable {
    *
    * @param ncs the cluster status
    */
-  public void receive(ClusterStatus ncs) {
+  public void receive(ClusterMetrics ncs) {
     if (ncs.getDeadServerNames() != null) {
       for (ServerName sn : ncs.getDeadServerNames()) {
         if (!isDeadServer(sn)) {
@@ -264,7 +263,7 @@ class ClusterStatusListener implements Closeable {
         ByteBufInputStream bis = new ByteBufInputStream(dp.content());
         try {
           ClusterStatusProtos.ClusterStatus csp = ClusterStatusProtos.ClusterStatus.parseFrom(bis);
-          ClusterStatus ncs = ProtobufUtil.toClusterStatus(csp);
+          ClusterMetrics ncs = ClusterMetricsBuilder.toClusterMetrics(csp);
           receive(ncs);
         } finally {
           bis.close();

http://git-wip-us.apache.org/repos/asf/hbase/blob/654edc5f/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java
index 9937adf..4ac1c21 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java
@@ -46,8 +46,9 @@ import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hbase.Abortable;
 import org.apache.hadoop.hbase.CacheEvictionStats;
 import org.apache.hadoop.hbase.CacheEvictionStatsBuilder;
+import org.apache.hadoop.hbase.ClusterMetrics;
 import org.apache.hadoop.hbase.ClusterMetrics.Option;
-import org.apache.hadoop.hbase.ClusterStatus;
+import org.apache.hadoop.hbase.ClusterMetricsBuilder;
 import org.apache.hadoop.hbase.DoNotRetryIOException;
 import org.apache.hadoop.hbase.HBaseConfiguration;
 import org.apache.hadoop.hbase.HConstants;
@@ -59,8 +60,9 @@ import org.apache.hadoop.hbase.MetaTableAccessor;
 import org.apache.hadoop.hbase.NamespaceDescriptor;
 import org.apache.hadoop.hbase.NamespaceNotFoundException;
 import org.apache.hadoop.hbase.NotServingRegionException;
-import org.apache.hadoop.hbase.RegionLoad;
 import org.apache.hadoop.hbase.RegionLocations;
+import org.apache.hadoop.hbase.RegionMetrics;
+import org.apache.hadoop.hbase.RegionMetricsBuilder;
 import org.apache.hadoop.hbase.ServerName;
 import org.apache.hadoop.hbase.TableExistsException;
 import org.apache.hadoop.hbase.TableName;
@@ -2072,29 +2074,31 @@ public class HBaseAdmin implements Admin {
   }
 
   @Override
-  public ClusterStatus getClusterStatus() throws IOException {
-    return getClusterStatus(EnumSet.allOf(Option.class));
-  }
-
-  @Override
-  public ClusterStatus getClusterStatus(EnumSet<Option> options) throws IOException {
-    return executeCallable(new MasterCallable<ClusterStatus>(getConnection(),
+  public ClusterMetrics getClusterMetrics(EnumSet<Option> options) throws IOException {
+    return executeCallable(new MasterCallable<ClusterMetrics>(getConnection(),
         this.rpcControllerFactory) {
       @Override
-      protected ClusterStatus rpcCall() throws Exception {
+      protected ClusterMetrics rpcCall() throws Exception {
         GetClusterStatusRequest req = RequestConverter.buildGetClusterStatusRequest(options);
-        return ProtobufUtil.toClusterStatus(
+        return ClusterMetricsBuilder.toClusterMetrics(
           master.getClusterStatus(getRpcController(), req).getClusterStatus());
       }
     });
   }
 
   @Override
-  public List<RegionLoad> getRegionLoads(ServerName serverName, TableName tableName)
+  public List<RegionMetrics> getRegionMetrics(ServerName serverName, TableName tableName)
       throws IOException {
     AdminService.BlockingInterface admin = this.connection.getAdmin(serverName);
     HBaseRpcController controller = rpcControllerFactory.newController();
-    return ProtobufUtil.getRegionLoad(controller, admin, tableName);
+    AdminProtos.GetRegionLoadRequest request =
+      RequestConverter.buildGetRegionLoadRequest(tableName);
+    try {
+      return admin.getRegionLoad(controller, request).getRegionLoadsList().stream()
+        .map(RegionMetricsBuilder::toRegionMetrics).collect(Collectors.toList());
+    } catch (ServiceException se) {
+      throw ProtobufUtil.getRemoteException(se);
+    }
   }
 
   @Override
@@ -2429,16 +2433,6 @@ public class HBaseAdmin implements Admin {
   }
 
   @Override
-  public String[] getMasterCoprocessors() {
-    try {
-      return getClusterStatus(EnumSet.of(Option.MASTER_COPROCESSORS)).getMasterCoprocessors();
-    } catch (IOException e) {
-      LOG.error("Could not getClusterStatus()",e);
-      return null;
-    }
-  }
-
-  @Override
   public CompactionState getCompactionState(final TableName tableName)
   throws IOException {
     return getCompactionState(tableName, CompactType.NORMAL);
@@ -3148,15 +3142,15 @@ public class HBaseAdmin implements Admin {
 
   @Override
   public void updateConfiguration() throws IOException {
-    ClusterStatus status = getClusterStatus(
+    ClusterMetrics status = getClusterMetrics(
       EnumSet.of(Option.LIVE_SERVERS, Option.MASTER, Option.BACKUP_MASTERS));
-    for (ServerName server : status.getServers()) {
+    for (ServerName server : status.getLiveServerMetrics().keySet()) {
       updateConfiguration(server);
     }
 
-    updateConfiguration(status.getMaster());
+    updateConfiguration(status.getMasterName());
 
-    for (ServerName server : status.getBackupMasters()) {
+    for (ServerName server : status.getBackupMasterNames()) {
       updateConfiguration(server);
     }
   }

http://git-wip-us.apache.org/repos/asf/hbase/blob/654edc5f/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.java
index ceda280..ac00234 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.java
@@ -42,15 +42,17 @@ import java.util.stream.Stream;
 import org.apache.commons.io.IOUtils;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hbase.AsyncMetaTableAccessor;
+import org.apache.hadoop.hbase.ClusterMetrics;
 import org.apache.hadoop.hbase.ClusterMetrics.Option;
-import org.apache.hadoop.hbase.ClusterStatus;
+import org.apache.hadoop.hbase.ClusterMetricsBuilder;
 import org.apache.hadoop.hbase.HConstants;
 import org.apache.hadoop.hbase.HRegionLocation;
 import org.apache.hadoop.hbase.MetaTableAccessor;
 import org.apache.hadoop.hbase.MetaTableAccessor.QueryType;
 import org.apache.hadoop.hbase.NamespaceDescriptor;
-import org.apache.hadoop.hbase.RegionLoad;
 import org.apache.hadoop.hbase.RegionLocations;
+import org.apache.hadoop.hbase.RegionMetrics;
+import org.apache.hadoop.hbase.RegionMetricsBuilder;
 import org.apache.hadoop.hbase.ServerName;
 import org.apache.hadoop.hbase.TableExistsException;
 import org.apache.hadoop.hbase.TableName;
@@ -2601,20 +2603,20 @@ class RawAsyncHBaseAdmin implements AsyncAdmin {
   }
 
   @Override
-  public CompletableFuture<ClusterStatus> getClusterStatus() {
-    return getClusterStatus(EnumSet.allOf(Option.class));
+  public CompletableFuture<ClusterMetrics> getClusterMetrics() {
+    return getClusterMetrics(EnumSet.allOf(Option.class));
   }
 
   @Override
-  public CompletableFuture<ClusterStatus>getClusterStatus(EnumSet<Option> options) {
+  public CompletableFuture<ClusterMetrics> getClusterMetrics(EnumSet<Option> options) {
     return this
-        .<ClusterStatus> newMasterCaller()
+        .<ClusterMetrics> newMasterCaller()
         .action(
           (controller, stub) -> this
-              .<GetClusterStatusRequest, GetClusterStatusResponse, ClusterStatus> call(controller,
+              .<GetClusterStatusRequest, GetClusterStatusResponse, ClusterMetrics> call(controller,
                 stub, RequestConverter.buildGetClusterStatusRequest(options),
                 (s, c, req, done) -> s.getClusterStatus(c, req, done),
-                resp -> ProtobufUtil.toClusterStatus(resp.getClusterStatus()))).call();
+                resp -> ClusterMetricsBuilder.toClusterMetrics(resp.getClusterStatus()))).call();
   }
 
   @Override
@@ -2665,17 +2667,16 @@ class RawAsyncHBaseAdmin implements AsyncAdmin {
   @Override
   public CompletableFuture<Void> updateConfiguration() {
     CompletableFuture<Void> future = new CompletableFuture<Void>();
-    getClusterStatus(
-      EnumSet.of(Option.LIVE_SERVERS, Option.MASTER, Option.BACKUP_MASTERS))
-          .whenComplete(
-      (status, err) -> {
+    getClusterMetrics(EnumSet.of(Option.LIVE_SERVERS, Option.MASTER, Option.BACKUP_MASTERS))
+      .whenComplete((status, err) -> {
         if (err != null) {
           future.completeExceptionally(err);
         } else {
           List<CompletableFuture<Void>> futures = new ArrayList<>();
-          status.getServers().forEach((server) -> futures.add(updateConfiguration(server)));
-          futures.add(updateConfiguration(status.getMaster()));
-          status.getBackupMasters().forEach(master -> futures.add(updateConfiguration(master)));
+          status.getLiveServerMetrics().keySet()
+              .forEach(server -> futures.add(updateConfiguration(server)));
+          futures.add(updateConfiguration(status.getMasterName()));
+          status.getBackupMasterNames().forEach(master -> futures.add(updateConfiguration(master)));
           CompletableFuture.allOf(futures.toArray(new CompletableFuture<?>[futures.size()]))
               .whenComplete((result, err2) -> {
                 if (err2 != null) {
@@ -2725,25 +2726,25 @@ class RawAsyncHBaseAdmin implements AsyncAdmin {
   }
 
   @Override
-  public CompletableFuture<List<RegionLoad>> getRegionLoads(ServerName serverName) {
-    return getRegionLoad(GetRegionLoadRequest.newBuilder().build(), serverName);
+  public CompletableFuture<List<RegionMetrics>> getRegionMetrics(ServerName serverName) {
+    return getRegionMetrics(GetRegionLoadRequest.newBuilder().build(), serverName);
   }
 
   @Override
-  public CompletableFuture<List<RegionLoad>> getRegionLoads(ServerName serverName,
+  public CompletableFuture<List<RegionMetrics>> getRegionMetrics(ServerName serverName,
       TableName tableName) {
     Preconditions.checkNotNull(tableName,
       "tableName is null. If you don't specify a tableName, use getRegionLoads() instead");
-    return getRegionLoad(RequestConverter.buildGetRegionLoadRequest(tableName), serverName);
+    return getRegionMetrics(RequestConverter.buildGetRegionLoadRequest(tableName), serverName);
   }
 
-  private CompletableFuture<List<RegionLoad>> getRegionLoad(GetRegionLoadRequest request,
+  private CompletableFuture<List<RegionMetrics>> getRegionMetrics(GetRegionLoadRequest request,
       ServerName serverName) {
-    return this.<List<RegionLoad>> newAdminCaller()
+    return this.<List<RegionMetrics>> newAdminCaller()
         .action((controller, stub) -> this
-            .<GetRegionLoadRequest, GetRegionLoadResponse, List<RegionLoad>> adminCall(controller,
-              stub, request, (s, c, req, done) -> s.getRegionLoad(controller, req, done),
-              ProtobufUtil::getRegionLoadInfo))
+            .<GetRegionLoadRequest, GetRegionLoadResponse, List<RegionMetrics>>
+              adminCall(controller, stub, request, (s, c, req, done) ->
+                s.getRegionLoad(controller, req, done), RegionMetricsBuilder::toRegionMetrics))
         .serverName(serverName).call();
   }
 

http://git-wip-us.apache.org/repos/asf/hbase/blob/654edc5f/hbase-client/src/main/java/org/apache/hadoop/hbase/shaded/protobuf/ProtobufUtil.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/shaded/protobuf/ProtobufUtil.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/shaded/protobuf/ProtobufUtil.java
index cc30e53..f0a5d16 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/shaded/protobuf/ProtobufUtil.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/shaded/protobuf/ProtobufUtil.java
@@ -49,8 +49,6 @@ import org.apache.hadoop.hbase.Cell.Type;
 import org.apache.hadoop.hbase.CellBuilderType;
 import org.apache.hadoop.hbase.CellScanner;
 import org.apache.hadoop.hbase.CellUtil;
-import org.apache.hadoop.hbase.ClusterMetricsBuilder;
-import org.apache.hadoop.hbase.ClusterStatus;
 import org.apache.hadoop.hbase.DoNotRetryIOException;
 import org.apache.hadoop.hbase.ExtendedCellBuilder;
 import org.apache.hadoop.hbase.ExtendedCellBuilderFactory;
@@ -126,7 +124,6 @@ import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetOnlineRe
 import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetOnlineRegionResponse;
 import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoRequest;
 import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoResponse;
-import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionLoadRequest;
 import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionLoadResponse;
 import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetServerInfoRequest;
 import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetServerInfoResponse;
@@ -1764,20 +1761,6 @@ public final class ProtobufUtil {
     }
   }
 
-  public static List<org.apache.hadoop.hbase.RegionLoad> getRegionLoad(
-      final RpcController controller, final AdminService.BlockingInterface admin,
-      final TableName tableName) throws IOException {
-    GetRegionLoadRequest request =
-        RequestConverter.buildGetRegionLoadRequest(tableName);
-    GetRegionLoadResponse response;
-    try {
-      response = admin.getRegionLoad(controller, request);
-    } catch (ServiceException se) {
-      throw getRemoteException(se);
-    }
-    return getRegionLoadInfo(response);
-  }
-
   public static List<org.apache.hadoop.hbase.RegionLoad> getRegionLoadInfo(
       GetRegionLoadResponse regionLoadResponse) {
     List<org.apache.hadoop.hbase.RegionLoad> regionLoadList =
@@ -2969,16 +2952,6 @@ public final class ProtobufUtil {
         snapshotDesc.getCreationTime(), snapshotDesc.getVersion());
   }
 
-  /**
-   * Convert a protobuf ClusterStatus to a ClusterStatus
-   *
-   * @param proto the protobuf ClusterStatus
-   * @return the converted ClusterStatus
-   */
-  public static ClusterStatus toClusterStatus(ClusterStatusProtos.ClusterStatus proto) {
-    return new ClusterStatus(ClusterMetricsBuilder.toClusterMetrics(proto));
-  }
-
   public static RegionLoadStats createRegionLoadStats(ClientProtos.RegionLoadStats stats) {
     return new RegionLoadStats(stats.getMemStoreLoad(), stats.getHeapOccupancy(),
         stats.getCompactionPressure());

http://git-wip-us.apache.org/repos/asf/hbase/blob/654edc5f/hbase-client/src/test/java/org/apache/hadoop/hbase/client/TestInterfaceAlign.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/test/java/org/apache/hadoop/hbase/client/TestInterfaceAlign.java b/hbase-client/src/test/java/org/apache/hadoop/hbase/client/TestInterfaceAlign.java
index 6318bc4..2266d06 100644
--- a/hbase-client/src/test/java/org/apache/hadoop/hbase/client/TestInterfaceAlign.java
+++ b/hbase-client/src/test/java/org/apache/hadoop/hbase/client/TestInterfaceAlign.java
@@ -75,7 +75,8 @@ public class TestInterfaceAlign {
   }
 
   private <T> List<String> getMethodNames(Class<T> c) {
-    return Arrays.asList(c.getDeclaredMethods()).stream().filter(m -> !isDeprecated(m))
+    // DON'T use the getDeclaredMethods as we want to check the Public APIs only.
+    return Arrays.asList(c.getMethods()).stream().filter(m -> !isDeprecated(m))
         .map(Method::getName).distinct().collect(Collectors.toList());
   }
 

http://git-wip-us.apache.org/repos/asf/hbase/blob/654edc5f/hbase-it/src/test/java/org/apache/hadoop/hbase/DistributedHBaseCluster.java
----------------------------------------------------------------------
diff --git a/hbase-it/src/test/java/org/apache/hadoop/hbase/DistributedHBaseCluster.java b/hbase-it/src/test/java/org/apache/hadoop/hbase/DistributedHBaseCluster.java
index 6546ac9..943f2a6 100644
--- a/hbase-it/src/test/java/org/apache/hadoop/hbase/DistributedHBaseCluster.java
+++ b/hbase-it/src/test/java/org/apache/hadoop/hbase/DistributedHBaseCluster.java
@@ -25,22 +25,22 @@ import java.util.List;
 import java.util.Objects;
 import java.util.Set;
 import java.util.TreeSet;
-
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hbase.ClusterManager.ServiceType;
-import org.apache.yetus.audience.InterfaceAudience;
 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.RegionLocator;
+import org.apache.hadoop.hbase.util.Bytes;
+import org.apache.hadoop.hbase.util.Threads;
+import org.apache.yetus.audience.InterfaceAudience;
+
 import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;
 import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos;
 import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ServerInfo;
 import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos;
 import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.MasterService;
-import org.apache.hadoop.hbase.util.Bytes;
-import org.apache.hadoop.hbase.util.Threads;
 
 /**
  * Manages the interactions with an already deployed distributed cluster (as opposed to
@@ -65,7 +65,7 @@ public class DistributedHBaseCluster extends HBaseCluster {
     this.clusterManager = clusterManager;
     this.connection = ConnectionFactory.createConnection(conf);
     this.admin = this.connection.getAdmin();
-    this.initialClusterStatus = getClusterStatus();
+    this.initialClusterStatus = getClusterMetrics();
   }
 
   public void setClusterManager(ClusterManager clusterManager) {
@@ -81,12 +81,12 @@ public class DistributedHBaseCluster extends HBaseCluster {
    * @throws IOException
    */
   @Override
-  public ClusterStatus getClusterStatus() throws IOException {
-    return admin.getClusterStatus();
+  public ClusterMetrics getClusterMetrics() throws IOException {
+    return admin.getClusterMetrics();
   }
 
   @Override
-  public ClusterStatus getInitialClusterStatus() throws IOException {
+  public ClusterMetrics getInitialClusterMetrics() throws IOException {
     return initialClusterStatus;
   }
 
@@ -315,8 +315,8 @@ public class DistributedHBaseCluster extends HBaseCluster {
   }
 
   @Override
-  public boolean restoreClusterStatus(ClusterStatus initial) throws IOException {
-    ClusterStatus current = getClusterStatus();
+  public boolean restoreClusterMetrics(ClusterMetrics initial) throws IOException {
+    ClusterMetrics current = getClusterMetrics();
 
     LOG.info("Restoring cluster - started");
 
@@ -330,15 +330,15 @@ public class DistributedHBaseCluster extends HBaseCluster {
     return success;
   }
 
-  protected boolean restoreMasters(ClusterStatus initial, ClusterStatus current) {
+  protected boolean restoreMasters(ClusterMetrics initial, ClusterMetrics current) {
     List<IOException> deferred = new ArrayList<>();
     //check whether current master has changed
-    final ServerName initMaster = initial.getMaster();
-    if (!ServerName.isSameAddress(initMaster, current.getMaster())) {
+    final ServerName initMaster = initial.getMasterName();
+    if (!ServerName.isSameAddress(initMaster, current.getMasterName())) {
       LOG.info("Restoring cluster - Initial active master : "
               + initMaster.getHostAndPort()
               + " has changed to : "
-              + current.getMaster().getHostAndPort());
+              + current.getMasterName().getHostAndPort());
       // If initial master is stopped, start it, before restoring the state.
       // It will come up as a backup master, if there is already an active master.
       try {
@@ -353,14 +353,14 @@ public class DistributedHBaseCluster extends HBaseCluster {
         // 1. Kill the current backups
         // 2. Stop current master
         // 3. Start backup masters
-        for (ServerName currentBackup : current.getBackupMasters()) {
+        for (ServerName currentBackup : current.getBackupMasterNames()) {
           if (!ServerName.isSameAddress(currentBackup, initMaster)) {
             LOG.info("Restoring cluster - stopping backup master: " + currentBackup);
             stopMaster(currentBackup);
           }
         }
-        LOG.info("Restoring cluster - stopping active master: " + current.getMaster());
-        stopMaster(current.getMaster());
+        LOG.info("Restoring cluster - stopping active master: " + current.getMasterName());
+        stopMaster(current.getMasterName());
         waitForActiveAndReadyMaster(); // wait so that active master takes over
       } catch (IOException ex) {
         // if we fail to start the initial active master, we do not want to continue stopping
@@ -369,7 +369,7 @@ public class DistributedHBaseCluster extends HBaseCluster {
       }
 
       //start backup masters
-      for (ServerName backup : initial.getBackupMasters()) {
+      for (ServerName backup : initial.getBackupMasterNames()) {
         try {
           //these are not started in backup mode, but we should already have an active master
           if (!clusterManager.isRunning(ServiceType.HBASE_MASTER,
@@ -387,13 +387,13 @@ public class DistributedHBaseCluster extends HBaseCluster {
       //current master has not changed, match up backup masters
       Set<ServerName> toStart = new TreeSet<>(new ServerNameIgnoreStartCodeComparator());
       Set<ServerName> toKill = new TreeSet<>(new ServerNameIgnoreStartCodeComparator());
-      toStart.addAll(initial.getBackupMasters());
-      toKill.addAll(current.getBackupMasters());
+      toStart.addAll(initial.getBackupMasterNames());
+      toKill.addAll(current.getBackupMasterNames());
 
-      for (ServerName server : current.getBackupMasters()) {
+      for (ServerName server : current.getBackupMasterNames()) {
         toStart.remove(server);
       }
-      for (ServerName server: initial.getBackupMasters()) {
+      for (ServerName server: initial.getBackupMasterNames()) {
         toKill.remove(server);
       }
 
@@ -442,18 +442,18 @@ public class DistributedHBaseCluster extends HBaseCluster {
     }
   }
 
-  protected boolean restoreRegionServers(ClusterStatus initial, ClusterStatus current) {
+  protected boolean restoreRegionServers(ClusterMetrics initial, ClusterMetrics current) {
     Set<ServerName> toStart = new TreeSet<>(new ServerNameIgnoreStartCodeComparator());
     Set<ServerName> toKill = new TreeSet<>(new ServerNameIgnoreStartCodeComparator());
-    toStart.addAll(initial.getServers());
-    toKill.addAll(current.getServers());
+    toStart.addAll(initial.getLiveServerMetrics().keySet());
+    toKill.addAll(current.getLiveServerMetrics().keySet());
 
-    ServerName master = initial.getMaster();
+    ServerName master = initial.getMasterName();
 
-    for (ServerName server : current.getServers()) {
+    for (ServerName server : current.getLiveServerMetrics().keySet()) {
       toStart.remove(server);
     }
-    for (ServerName server: initial.getServers()) {
+    for (ServerName server: initial.getLiveServerMetrics().keySet()) {
       toKill.remove(server);
     }
 

http://git-wip-us.apache.org/repos/asf/hbase/blob/654edc5f/hbase-it/src/test/java/org/apache/hadoop/hbase/IntegrationTestIngest.java
----------------------------------------------------------------------
diff --git a/hbase-it/src/test/java/org/apache/hadoop/hbase/IntegrationTestIngest.java b/hbase-it/src/test/java/org/apache/hadoop/hbase/IntegrationTestIngest.java
index b4b1314..1850e91 100644
--- a/hbase-it/src/test/java/org/apache/hadoop/hbase/IntegrationTestIngest.java
+++ b/hbase-it/src/test/java/org/apache/hadoop/hbase/IntegrationTestIngest.java
@@ -22,7 +22,6 @@ import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Set;
-
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hbase.testclassification.IntegrationTests;
 import org.apache.hadoop.hbase.util.Bytes;
@@ -160,7 +159,8 @@ public class IntegrationTestIngest extends IntegrationTestBase {
       int recordSize, int writeThreads, int readThreads) throws Exception {
 
     LOG.info("Running ingest");
-    LOG.info("Cluster size:" + util.getHBaseClusterInterface().getClusterStatus().getServersSize());
+    LOG.info("Cluster size:" + util.getHBaseClusterInterface()
+      .getClusterMetrics().getLiveServerMetrics().size());
 
     long start = System.currentTimeMillis();
     String runtimeKey = String.format(RUN_TIME_KEY, this.getClass().getSimpleName());
@@ -248,7 +248,7 @@ public class IntegrationTestIngest extends IntegrationTestBase {
   /** Estimates a data size based on the cluster size */
   protected long getNumKeys(long keysPerServer)
       throws IOException {
-    int numRegionServers = cluster.getClusterStatus().getServersSize();
+    int numRegionServers = cluster.getClusterMetrics().getLiveServerMetrics().size();
     return keysPerServer * numRegionServers;
   }
 

http://git-wip-us.apache.org/repos/asf/hbase/blob/654edc5f/hbase-it/src/test/java/org/apache/hadoop/hbase/IntegrationTestLazyCfLoading.java
----------------------------------------------------------------------
diff --git a/hbase-it/src/test/java/org/apache/hadoop/hbase/IntegrationTestLazyCfLoading.java b/hbase-it/src/test/java/org/apache/hadoop/hbase/IntegrationTestLazyCfLoading.java
index 60dff7a..c2966a3 100644
--- a/hbase-it/src/test/java/org/apache/hadoop/hbase/IntegrationTestLazyCfLoading.java
+++ b/hbase-it/src/test/java/org/apache/hadoop/hbase/IntegrationTestLazyCfLoading.java
@@ -23,7 +23,6 @@ import java.util.Map;
 import java.util.Set;
 import java.util.TreeMap;
 import java.util.concurrent.atomic.AtomicLong;
-
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hbase.client.Connection;
 import org.apache.hadoop.hbase.client.ConnectionFactory;
@@ -31,17 +30,16 @@ import org.apache.hadoop.hbase.client.Result;
 import org.apache.hadoop.hbase.client.ResultScanner;
 import org.apache.hadoop.hbase.client.Scan;
 import org.apache.hadoop.hbase.client.Table;
-import org.apache.hadoop.hbase.filter.CompareFilter;
 import org.apache.hadoop.hbase.filter.Filter;
 import org.apache.hadoop.hbase.filter.SingleColumnValueFilter;
 import org.apache.hadoop.hbase.io.encoding.DataBlockEncoding;
 import org.apache.hadoop.hbase.testclassification.IntegrationTests;
 import org.apache.hadoop.hbase.util.Bytes;
 import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;
+import org.apache.hadoop.hbase.util.LoadTestKVGenerator;
 import org.apache.hadoop.hbase.util.MultiThreadedWriter;
 import org.apache.hadoop.hbase.util.RegionSplitter;
 import org.apache.hadoop.hbase.util.test.LoadTestDataGenerator;
-import org.apache.hadoop.hbase.util.LoadTestKVGenerator;
 import org.junit.After;
 import org.junit.Assert;
 import org.junit.Before;
@@ -195,7 +193,8 @@ public class IntegrationTestLazyCfLoading {
       hcd.setDataBlockEncoding(blockEncoding);
       htd.addFamily(hcd);
     }
-    int serverCount = util.getHBaseClusterInterface().getClusterStatus().getServersSize();
+    int serverCount = util.getHBaseClusterInterface().getClusterMetrics()
+      .getLiveServerMetrics().size();
     byte[][] splits = new RegionSplitter.HexStringSplit().split(serverCount * REGIONS_PER_SERVER);
     util.getAdmin().createTable(htd, splits);
     LOG.info("Created table");
@@ -222,7 +221,8 @@ public class IntegrationTestLazyCfLoading {
     Configuration conf = util.getConfiguration();
     String timeoutKey = String.format(TIMEOUT_KEY, this.getClass().getSimpleName());
     long maxRuntime = conf.getLong(timeoutKey, DEFAULT_TIMEOUT_MINUTES);
-    long serverCount = util.getHBaseClusterInterface().getClusterStatus().getServersSize();
+    long serverCount = util.getHBaseClusterInterface().getClusterMetrics()
+      .getLiveServerMetrics().size();
     long keysToWrite = serverCount * KEYS_TO_WRITE_PER_SERVER;
     Connection connection = ConnectionFactory.createConnection(conf);
     Table table = connection.getTable(TABLE_NAME);

http://git-wip-us.apache.org/repos/asf/hbase/blob/654edc5f/hbase-it/src/test/java/org/apache/hadoop/hbase/IntegrationTestRegionReplicaReplication.java
----------------------------------------------------------------------
diff --git a/hbase-it/src/test/java/org/apache/hadoop/hbase/IntegrationTestRegionReplicaReplication.java b/hbase-it/src/test/java/org/apache/hadoop/hbase/IntegrationTestRegionReplicaReplication.java
index 4b37bbb..be2616a 100644
--- a/hbase-it/src/test/java/org/apache/hadoop/hbase/IntegrationTestRegionReplicaReplication.java
+++ b/hbase-it/src/test/java/org/apache/hadoop/hbase/IntegrationTestRegionReplicaReplication.java
@@ -22,7 +22,6 @@ import java.io.IOException;
 import java.util.List;
 import java.util.concurrent.BlockingQueue;
 import java.util.concurrent.TimeUnit;
-
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hbase.testclassification.IntegrationTests;
 import org.apache.hadoop.hbase.util.ConstantDelayQueue;
@@ -54,8 +53,9 @@ import org.apache.hbase.thirdparty.com.google.common.collect.Lists;
  * The job will run for <b>at least<b> given runtime (default 10min) by running a concurrent
  * writer and reader workload followed by a concurrent updater and reader workload for
  * num_keys_per_server.
- *<p>
+ * <p>
  * Example usage:
+ * </p>
  * <pre>
  * hbase org.apache.hadoop.hbase.IntegrationTestRegionReplicaReplication
  * -DIntegrationTestRegionReplicaReplication.num_keys_per_server=10000
@@ -154,7 +154,8 @@ public class IntegrationTestRegionReplicaReplication extends IntegrationTestInge
       int recordSize, int writeThreads, int readThreads) throws Exception {
 
     LOG.info("Running ingest");
-    LOG.info("Cluster size:" + util.getHBaseClusterInterface().getClusterStatus().getServersSize());
+    LOG.info("Cluster size:" + util.getHBaseClusterInterface()
+      .getClusterMetrics().getLiveServerMetrics().size());
 
     // sleep for some time so that the cache for disabled tables does not interfere.
     Threads.sleep(

http://git-wip-us.apache.org/repos/asf/hbase/blob/654edc5f/hbase-it/src/test/java/org/apache/hadoop/hbase/IntegrationTestingUtility.java
----------------------------------------------------------------------
diff --git a/hbase-it/src/test/java/org/apache/hadoop/hbase/IntegrationTestingUtility.java b/hbase-it/src/test/java/org/apache/hadoop/hbase/IntegrationTestingUtility.java
index 8038758..afb21e4 100644
--- a/hbase-it/src/test/java/org/apache/hadoop/hbase/IntegrationTestingUtility.java
+++ b/hbase-it/src/test/java/org/apache/hadoop/hbase/IntegrationTestingUtility.java
@@ -19,7 +19,6 @@
 package org.apache.hadoop.hbase;
 
 import java.io.IOException;
-
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.util.ReflectionUtils;
 
@@ -61,9 +60,9 @@ public class IntegrationTestingUtility extends HBaseTestingUtility {
 
   /** Config for pluggable hbase cluster manager */
   private static final String HBASE_CLUSTER_MANAGER_CLASS = "hbase.it.clustermanager.class";
-  private static final Class<? extends ClusterManager> DEFAULT_HBASE_CLUSTER_MANAGER_CLASS = 
+  private static final Class<? extends ClusterManager> DEFAULT_HBASE_CLUSTER_MANAGER_CLASS =
     HBaseClusterManager.class;
-  
+
   /**
    * Initializes the state of the cluster. It starts a new in-process mini cluster, OR
    * if we are given an already deployed distributed cluster it initializes the state.
@@ -85,7 +84,7 @@ public class IntegrationTestingUtility extends HBaseTestingUtility {
    */
   public void checkNodeCount(int numSlaves) throws Exception {
     HBaseCluster cluster = getHBaseClusterInterface();
-    if (cluster.getClusterStatus().getServers().size() < numSlaves) {
+    if (cluster.getClusterMetrics().getLiveServerMetrics().size() < numSlaves) {
       throw new Exception("Cluster does not have enough nodes:" + numSlaves);
     }
   }

http://git-wip-us.apache.org/repos/asf/hbase/blob/654edc5f/hbase-it/src/test/java/org/apache/hadoop/hbase/StripeCompactionsPerformanceEvaluation.java
----------------------------------------------------------------------
diff --git a/hbase-it/src/test/java/org/apache/hadoop/hbase/StripeCompactionsPerformanceEvaluation.java b/hbase-it/src/test/java/org/apache/hadoop/hbase/StripeCompactionsPerformanceEvaluation.java
index 1dec028..216c992 100644
--- a/hbase-it/src/test/java/org/apache/hadoop/hbase/StripeCompactionsPerformanceEvaluation.java
+++ b/hbase-it/src/test/java/org/apache/hadoop/hbase/StripeCompactionsPerformanceEvaluation.java
@@ -21,10 +21,8 @@ package org.apache.hadoop.hbase;
 import java.io.IOException;
 import java.util.Locale;
 import java.util.Set;
-
 import org.apache.commons.cli.CommandLine;
 import org.apache.commons.lang3.StringUtils;
-import org.apache.yetus.audience.InterfaceAudience;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hbase.regionserver.DisabledRegionSplitPolicy;
 import org.apache.hadoop.hbase.regionserver.HStore;
@@ -33,12 +31,13 @@ import org.apache.hadoop.hbase.regionserver.StripeStoreConfig;
 import org.apache.hadoop.hbase.regionserver.StripeStoreEngine;
 import org.apache.hadoop.hbase.util.AbstractHBaseTool;
 import org.apache.hadoop.hbase.util.Bytes;
+import org.apache.hadoop.hbase.util.LoadTestKVGenerator;
 import org.apache.hadoop.hbase.util.MultiThreadedAction;
 import org.apache.hadoop.hbase.util.MultiThreadedReader;
 import org.apache.hadoop.hbase.util.MultiThreadedWriter;
 import org.apache.hadoop.hbase.util.RegionSplitter;
 import org.apache.hadoop.hbase.util.test.LoadTestDataGenerator;
-import org.apache.hadoop.hbase.util.LoadTestKVGenerator;
+import org.apache.yetus.audience.InterfaceAudience;
 import org.junit.Assert;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -196,7 +195,8 @@ public class StripeCompactionsPerformanceEvaluation extends AbstractHBaseTool {
   }
 
   private void runOneTest(String description, Configuration conf) throws Exception {
-    int numServers = util.getHBaseClusterInterface().getClusterStatus().getServersSize();
+    int numServers = util.getHBaseClusterInterface()
+      .getClusterMetrics().getLiveServerMetrics().size();
     long startKey = preloadKeys * numServers;
     long endKey = startKey + writeKeys * numServers;
     status(String.format("%s test starting on %d servers; preloading 0 to %d and writing to %d",
@@ -298,7 +298,7 @@ public class StripeCompactionsPerformanceEvaluation extends AbstractHBaseTool {
       htd.setConfiguration(HConstants.HREGION_MEMSTORE_FLUSH_SIZE, "1048576");
     }
     byte[][] splits = new RegionSplitter.HexStringSplit().split(
-        util.getHBaseClusterInterface().getClusterStatus().getServersSize());
+        util.getHBaseClusterInterface().getClusterMetrics().getLiveServerMetrics().size());
     util.getAdmin().createTable(htd, splits);
   }
 

http://git-wip-us.apache.org/repos/asf/hbase/blob/654edc5f/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/actions/Action.java
----------------------------------------------------------------------
diff --git a/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/actions/Action.java b/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/actions/Action.java
index 7a89569..ae8cd1f 100644
--- a/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/actions/Action.java
+++ b/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/actions/Action.java
@@ -23,17 +23,17 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Map;
 import java.util.function.BiConsumer;
 import java.util.function.Consumer;
-
 import org.apache.commons.lang3.RandomUtils;
 import org.apache.hadoop.conf.Configuration;
-import org.apache.hadoop.hbase.ClusterStatus;
+import org.apache.hadoop.hbase.ClusterMetrics;
 import org.apache.hadoop.hbase.HBaseCluster;
 import org.apache.hadoop.hbase.HBaseTestingUtility;
 import org.apache.hadoop.hbase.HRegionInfo;
 import org.apache.hadoop.hbase.IntegrationTestingUtility;
-import org.apache.hadoop.hbase.ServerLoad;
+import org.apache.hadoop.hbase.ServerMetrics;
 import org.apache.hadoop.hbase.ServerName;
 import org.apache.hadoop.hbase.TableName;
 import org.apache.hadoop.hbase.chaos.monkies.PolicyBasedChaosMonkey;
@@ -79,7 +79,7 @@ public class Action {
 
   protected ActionContext context;
   protected HBaseCluster cluster;
-  protected ClusterStatus initialStatus;
+  protected ClusterMetrics initialStatus;
   protected ServerName[] initialServers;
 
   protected long killMasterTimeout;
@@ -94,8 +94,8 @@ public class Action {
   public void init(ActionContext context) throws IOException {
     this.context = context;
     cluster = context.getHBaseCluster();
-    initialStatus = cluster.getInitialClusterStatus();
-    Collection<ServerName> regionServers = initialStatus.getServers();
+    initialStatus = cluster.getInitialClusterMetrics();
+    Collection<ServerName> regionServers = initialStatus.getLiveServerMetrics().keySet();
     initialServers = regionServers.toArray(new ServerName[regionServers.size()]);
 
     killMasterTimeout = cluster.getConf().getLong(KILL_MASTER_TIMEOUT_KEY,
@@ -118,13 +118,13 @@ public class Action {
 
   /** Returns current region servers - active master */
   protected ServerName[] getCurrentServers() throws IOException {
-    ClusterStatus clusterStatus = cluster.getClusterStatus();
-    Collection<ServerName> regionServers = clusterStatus.getServers();
+    ClusterMetrics clusterStatus = cluster.getClusterMetrics();
+    Collection<ServerName> regionServers = clusterStatus.getLiveServerMetrics().keySet();
     int count = regionServers == null ? 0 : regionServers.size();
     if (count <= 0) {
       return new ServerName [] {};
     }
-    ServerName master = clusterStatus.getMaster();
+    ServerName master = clusterStatus.getMasterName();
     if (master == null || !regionServers.contains(master)) {
       return regionServers.toArray(new ServerName[count]);
     }
@@ -156,7 +156,7 @@ public class Action {
     cluster.killRegionServer(server);
     cluster.waitForRegionServerToStop(server, killRsTimeout);
     LOG.info("Killed region server:" + server + ". Reported num of rs:"
-        + cluster.getClusterStatus().getServersSize());
+        + cluster.getClusterMetrics().getLiveServerMetrics().size());
   }
 
   protected void startRs(ServerName server) throws IOException {
@@ -164,7 +164,7 @@ public class Action {
     cluster.startRegionServer(server.getHostname(), server.getPort());
     cluster.waitForRegionServerToStart(server.getHostname(), server.getPort(), startRsTimeout);
     LOG.info("Started region server:" + server + ". Reported num of rs:"
-      + cluster.getClusterStatus().getServersSize());
+      + cluster.getClusterMetrics().getLiveServerMetrics().size());
   }
 
   protected void killZKNode(ServerName server) throws IOException {
@@ -172,7 +172,7 @@ public class Action {
     cluster.killZkNode(server);
     cluster.waitForZkNodeToStop(server, killZkNodeTimeout);
     LOG.info("Killed zookeeper node:" + server + ". Reported num of rs:"
-      + cluster.getClusterStatus().getServersSize());
+      + cluster.getClusterMetrics().getLiveServerMetrics().size());
   }
 
   protected void startZKNode(ServerName server) throws IOException {
@@ -187,7 +187,7 @@ public class Action {
     cluster.killDataNode(server);
     cluster.waitForDataNodeToStop(server, killDataNodeTimeout);
     LOG.info("Killed datanode:" + server + ". Reported num of rs:"
-      + cluster.getClusterStatus().getServersSize());
+      + cluster.getClusterMetrics().getLiveServerMetrics().size());
   }
 
   protected void startDataNode(ServerName server) throws IOException {
@@ -197,16 +197,18 @@ public class Action {
     LOG.info("Started datanode:" + server);
   }
 
-  protected void unbalanceRegions(ClusterStatus clusterStatus,
+  protected void unbalanceRegions(ClusterMetrics clusterStatus,
       List<ServerName> fromServers, List<ServerName> toServers,
       double fractionOfRegions) throws Exception {
     List<byte[]> victimRegions = new LinkedList<>();
-    for (ServerName server : fromServers) {
-      ServerLoad serverLoad = clusterStatus.getLoad(server);
+    for (Map.Entry<ServerName, ServerMetrics> entry
+      : clusterStatus.getLiveServerMetrics().entrySet()) {
+      ServerName sn = entry.getKey();
+      ServerMetrics serverLoad = entry.getValue();
       // Ugh.
-      List<byte[]> regions = new LinkedList<>(serverLoad.getRegionsLoad().keySet());
+      List<byte[]> regions = new LinkedList<>(serverLoad.getRegionMetrics().keySet());
       int victimRegionCount = (int)Math.ceil(fractionOfRegions * regions.size());
-      LOG.debug("Removing " + victimRegionCount + " regions from " + server.getServerName());
+      LOG.debug("Removing " + victimRegionCount + " regions from " + sn);
       for (int i = 0; i < victimRegionCount; ++i) {
         int victimIx = RandomUtils.nextInt(0, regions.size());
         String regionId = HRegionInfo.encodeRegionName(regions.remove(victimIx));

http://git-wip-us.apache.org/repos/asf/hbase/blob/654edc5f/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/actions/BatchRestartRsAction.java
----------------------------------------------------------------------
diff --git a/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/actions/BatchRestartRsAction.java b/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/actions/BatchRestartRsAction.java
index 75414ae..31ec874 100644
--- a/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/actions/BatchRestartRsAction.java
+++ b/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/actions/BatchRestartRsAction.java
@@ -21,7 +21,6 @@ package org.apache.hadoop.hbase.chaos.actions;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
-
 import org.apache.hadoop.hbase.ServerName;
 import org.apache.hadoop.hbase.chaos.monkies.PolicyBasedChaosMonkey;
 
@@ -61,7 +60,7 @@ public class BatchRestartRsAction extends RestartActionBaseAction {
     }
 
     LOG.info("Killed " + killedServers.size() + " region servers. Reported num of rs:"
-        + cluster.getClusterStatus().getServersSize());
+        + cluster.getClusterMetrics().getLiveServerMetrics().size());
 
     sleep(sleepTime);
 
@@ -76,6 +75,6 @@ public class BatchRestartRsAction extends RestartActionBaseAction {
           PolicyBasedChaosMonkey.TIMEOUT);
     }
     LOG.info("Started " + killedServers.size() +" region servers. Reported num of rs:"
-        + cluster.getClusterStatus().getServersSize());
+        + cluster.getClusterMetrics().getLiveServerMetrics().size());
   }
 }

http://git-wip-us.apache.org/repos/asf/hbase/blob/654edc5f/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/actions/DumpClusterStatusAction.java
----------------------------------------------------------------------
diff --git a/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/actions/DumpClusterStatusAction.java b/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/actions/DumpClusterStatusAction.java
index 0403fe0..36b8530 100644
--- a/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/actions/DumpClusterStatusAction.java
+++ b/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/actions/DumpClusterStatusAction.java
@@ -33,6 +33,6 @@ public class DumpClusterStatusAction extends Action {
   @Override
   public void perform() throws Exception {
     LOG.debug("Performing action: Dump cluster status");
-    LOG.info("Cluster status\n" + cluster.getClusterStatus());
+    LOG.info("Cluster status\n" + cluster.getClusterMetrics());
   }
 }

http://git-wip-us.apache.org/repos/asf/hbase/blob/654edc5f/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/actions/MoveRegionsOfTableAction.java
----------------------------------------------------------------------
diff --git a/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/actions/MoveRegionsOfTableAction.java b/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/actions/MoveRegionsOfTableAction.java
index 299e51b..08958e8 100644
--- a/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/actions/MoveRegionsOfTableAction.java
+++ b/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/actions/MoveRegionsOfTableAction.java
@@ -57,7 +57,7 @@ public class MoveRegionsOfTableAction extends Action {
 
     Admin admin = this.context.getHBaseIntegrationTestingUtility().getAdmin();
     Collection<ServerName> serversList =
-        admin.getClusterStatus(EnumSet.of(Option.LIVE_SERVERS)).getServers();
+        admin.getClusterMetrics(EnumSet.of(Option.LIVE_SERVERS)).getLiveServerMetrics().keySet();
     ServerName[] servers = serversList.toArray(new ServerName[serversList.size()]);
 
     LOG.info("Performing action: Move regions of table " + tableName);

http://git-wip-us.apache.org/repos/asf/hbase/blob/654edc5f/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/actions/RestartActiveMasterAction.java
----------------------------------------------------------------------
diff --git a/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/actions/RestartActiveMasterAction.java b/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/actions/RestartActiveMasterAction.java
index a9bc23a..89415b9 100644
--- a/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/actions/RestartActiveMasterAction.java
+++ b/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/actions/RestartActiveMasterAction.java
@@ -31,7 +31,7 @@ public class RestartActiveMasterAction extends RestartActionBaseAction {
   public void perform() throws Exception {
     LOG.info("Performing action: Restart active master");
 
-    ServerName master = cluster.getClusterStatus().getMaster();
+    ServerName master = cluster.getClusterMetrics().getMasterName();
     restartMaster(master, sleepTime);
   }
 }

http://git-wip-us.apache.org/repos/asf/hbase/blob/654edc5f/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/actions/RestartRsHoldingMetaAction.java
----------------------------------------------------------------------
diff --git a/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/actions/RestartRsHoldingMetaAction.java b/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/actions/RestartRsHoldingMetaAction.java
index a6b4fc7..f17b806 100644
--- a/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/actions/RestartRsHoldingMetaAction.java
+++ b/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/actions/RestartRsHoldingMetaAction.java
@@ -18,7 +18,7 @@
 
 package org.apache.hadoop.hbase.chaos.actions;
 
-import org.apache.hadoop.hbase.ClusterStatus;
+import org.apache.hadoop.hbase.ClusterMetrics;
 import org.apache.hadoop.hbase.ServerName;
 
 /**
@@ -36,8 +36,8 @@ public class RestartRsHoldingMetaAction extends RestartActionBaseAction {
       LOG.warn("No server is holding hbase:meta right now.");
       return;
     }
-    ClusterStatus clusterStatus = cluster.getClusterStatus();
-    if (server.equals(clusterStatus.getMaster())) {
+    ClusterMetrics clusterStatus = cluster.getClusterMetrics();
+    if (server.equals(clusterStatus.getMasterName())) {
       // Master holds the meta, so restart the master.
       restartMaster(server, sleepTime);
     } else {

http://git-wip-us.apache.org/repos/asf/hbase/blob/654edc5f/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/actions/UnbalanceKillAndRebalanceAction.java
----------------------------------------------------------------------
diff --git a/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/actions/UnbalanceKillAndRebalanceAction.java b/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/actions/UnbalanceKillAndRebalanceAction.java
index 7b6f292..cab5aa2 100644
--- a/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/actions/UnbalanceKillAndRebalanceAction.java
+++ b/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/actions/UnbalanceKillAndRebalanceAction.java
@@ -23,9 +23,8 @@ import java.util.HashSet;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Set;
-
 import org.apache.commons.lang3.RandomUtils;
-import org.apache.hadoop.hbase.ClusterStatus;
+import org.apache.hadoop.hbase.ClusterMetrics;
 import org.apache.hadoop.hbase.ServerName;
 import org.junit.Assert;
 
@@ -54,8 +53,8 @@ public class UnbalanceKillAndRebalanceAction extends Action {
 
   @Override
   public void perform() throws Exception {
-    ClusterStatus status = this.cluster.getClusterStatus();
-    List<ServerName> victimServers = new LinkedList<>(status.getServers());
+    ClusterMetrics status = this.cluster.getClusterMetrics();
+    List<ServerName> victimServers = new LinkedList<>(status.getLiveServerMetrics().keySet());
     Set<ServerName> killedServers = new HashSet<>();
 
     int liveCount = (int)Math.ceil(FRC_SERVERS_THAT_HOARD_AND_LIVE * victimServers.size());

http://git-wip-us.apache.org/repos/asf/hbase/blob/654edc5f/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/actions/UnbalanceRegionsAction.java
----------------------------------------------------------------------
diff --git a/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/actions/UnbalanceRegionsAction.java b/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/actions/UnbalanceRegionsAction.java
index e5faf08..f85ff04 100644
--- a/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/actions/UnbalanceRegionsAction.java
+++ b/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/actions/UnbalanceRegionsAction.java
@@ -21,9 +21,8 @@ package org.apache.hadoop.hbase.chaos.actions;
 import java.util.ArrayList;
 import java.util.LinkedList;
 import java.util.List;
-
 import org.apache.commons.lang3.RandomUtils;
-import org.apache.hadoop.hbase.ClusterStatus;
+import org.apache.hadoop.hbase.ClusterMetrics;
 import org.apache.hadoop.hbase.ServerName;
 
 /**
@@ -47,8 +46,8 @@ public class UnbalanceRegionsAction extends Action {
   @Override
   public void perform() throws Exception {
     LOG.info("Unbalancing regions");
-    ClusterStatus status = this.cluster.getClusterStatus();
-    List<ServerName> victimServers = new LinkedList<>(status.getServers());
+    ClusterMetrics status = this.cluster.getClusterMetrics();
+    List<ServerName> victimServers = new LinkedList<>(status.getLiveServerMetrics().keySet());
     int targetServerCount = (int)Math.ceil(fractionOfServers * victimServers.size());
     List<ServerName> targetServers = new ArrayList<>(targetServerCount);
     for (int i = 0; i < targetServerCount; ++i) {

http://git-wip-us.apache.org/repos/asf/hbase/blob/654edc5f/hbase-it/src/test/java/org/apache/hadoop/hbase/mapreduce/IntegrationTestBulkLoad.java
----------------------------------------------------------------------
diff --git a/hbase-it/src/test/java/org/apache/hadoop/hbase/mapreduce/IntegrationTestBulkLoad.java b/hbase-it/src/test/java/org/apache/hadoop/hbase/mapreduce/IntegrationTestBulkLoad.java
index 6a2cf33..ee410ca 100644
--- a/hbase-it/src/test/java/org/apache/hadoop/hbase/mapreduce/IntegrationTestBulkLoad.java
+++ b/hbase-it/src/test/java/org/apache/hadoop/hbase/mapreduce/IntegrationTestBulkLoad.java
@@ -31,7 +31,6 @@ import java.util.Optional;
 import java.util.Random;
 import java.util.Set;
 import java.util.concurrent.atomic.AtomicLong;
-
 import org.apache.commons.cli.CommandLine;
 import org.apache.commons.lang3.RandomStringUtils;
 import org.apache.hadoop.conf.Configuration;
@@ -757,8 +756,8 @@ public class IntegrationTestBulkLoad extends IntegrationTestBase {
     if (util.isDistributedCluster()) {
       util.getConfiguration().setIfUnset(NUM_MAPS_KEY,
           Integer.toString(util.getAdmin()
-                               .getClusterStatus(EnumSet.of(Option.LIVE_SERVERS))
-                               .getServersSize() * 10)
+                               .getClusterMetrics(EnumSet.of(Option.LIVE_SERVERS))
+                               .getLiveServerMetrics().size() * 10)
       );
       util.getConfiguration().setIfUnset(NUM_IMPORT_ROUNDS_KEY, "5");
     } else {

http://git-wip-us.apache.org/repos/asf/hbase/blob/654edc5f/hbase-it/src/test/java/org/apache/hadoop/hbase/mttr/IntegrationTestMTTR.java
----------------------------------------------------------------------
diff --git a/hbase-it/src/test/java/org/apache/hadoop/hbase/mttr/IntegrationTestMTTR.java b/hbase-it/src/test/java/org/apache/hadoop/hbase/mttr/IntegrationTestMTTR.java
index d74a463..850e123 100644
--- a/hbase-it/src/test/java/org/apache/hadoop/hbase/mttr/IntegrationTestMTTR.java
+++ b/hbase-it/src/test/java/org/apache/hadoop/hbase/mttr/IntegrationTestMTTR.java
@@ -28,7 +28,6 @@ import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 import java.util.concurrent.Future;
 import java.util.concurrent.TimeUnit;
-
 import org.apache.commons.lang3.RandomStringUtils;
 import org.apache.commons.math3.stat.descriptive.DescriptiveStatistics;
 import org.apache.hadoop.hbase.ClusterStatus;
@@ -618,7 +617,8 @@ public class IntegrationTestMTTR {
     @Override
     public Boolean call() throws Exception {
       int colsPerKey = 10;
-      int numServers = util.getHBaseClusterInterface().getInitialClusterStatus().getServersSize();
+      int numServers = util.getHBaseClusterInterface().getInitialClusterMetrics()
+        .getLiveServerMetrics().size();
       int numKeys = numServers * 5000;
       int writeThreads = 10;
 

http://git-wip-us.apache.org/repos/asf/hbase/blob/654edc5f/hbase-it/src/test/java/org/apache/hadoop/hbase/test/IntegrationTestBigLinkedList.java
----------------------------------------------------------------------
diff --git a/hbase-it/src/test/java/org/apache/hadoop/hbase/test/IntegrationTestBigLinkedList.java b/hbase-it/src/test/java/org/apache/hadoop/hbase/test/IntegrationTestBigLinkedList.java
index 5ce0bba..ccdbdf0 100644
--- a/hbase-it/src/test/java/org/apache/hadoop/hbase/test/IntegrationTestBigLinkedList.java
+++ b/hbase-it/src/test/java/org/apache/hadoop/hbase/test/IntegrationTestBigLinkedList.java
@@ -36,7 +36,6 @@ import java.util.TreeSet;
 import java.util.UUID;
 import java.util.concurrent.ThreadLocalRandom;
 import java.util.concurrent.atomic.AtomicInteger;
-
 import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.GnuParser;
 import org.apache.commons.cli.HelpFormatter;
@@ -82,11 +81,11 @@ import org.apache.hadoop.hbase.mapreduce.TableRecordReaderImpl;
 import org.apache.hadoop.hbase.mapreduce.WALPlayer;
 import org.apache.hadoop.hbase.regionserver.FlushAllLargeStoresPolicy;
 import org.apache.hadoop.hbase.regionserver.FlushPolicyFactory;
-import org.apache.hadoop.hbase.wal.WALEdit;
 import org.apache.hadoop.hbase.testclassification.IntegrationTests;
 import org.apache.hadoop.hbase.util.AbstractHBaseTool;
 import org.apache.hadoop.hbase.util.Bytes;
 import org.apache.hadoop.hbase.util.RegionSplitter;
+import org.apache.hadoop.hbase.wal.WALEdit;
 import org.apache.hadoop.hbase.wal.WALKey;
 import org.apache.hadoop.io.BytesWritable;
 import org.apache.hadoop.io.NullWritable;
@@ -710,8 +709,8 @@ public class IntegrationTestBigLinkedList extends IntegrationTestBase {
           if (conf.getBoolean(HBaseTestingUtility.PRESPLIT_TEST_TABLE_KEY,
               HBaseTestingUtility.PRESPLIT_TEST_TABLE)) {
             int numberOfServers =
-                admin.getClusterStatus(EnumSet.of(Option.LIVE_SERVERS))
-                    .getServers().size();
+                admin.getClusterMetrics(EnumSet.of(Option.LIVE_SERVERS))
+                    .getLiveServerMetrics().size();
             if (numberOfServers == 0) {
               throw new IllegalStateException("No live regionservers");
             }

http://git-wip-us.apache.org/repos/asf/hbase/blob/654edc5f/hbase-it/src/test/java/org/apache/hadoop/hbase/test/IntegrationTestTimeBoundedRequestsWithRegionReplicas.java
----------------------------------------------------------------------
diff --git a/hbase-it/src/test/java/org/apache/hadoop/hbase/test/IntegrationTestTimeBoundedRequestsWithRegionReplicas.java b/hbase-it/src/test/java/org/apache/hadoop/hbase/test/IntegrationTestTimeBoundedRequestsWithRegionReplicas.java
index 8986b9f..b5e99d2 100644
--- a/hbase-it/src/test/java/org/apache/hadoop/hbase/test/IntegrationTestTimeBoundedRequestsWithRegionReplicas.java
+++ b/hbase-it/src/test/java/org/apache/hadoop/hbase/test/IntegrationTestTimeBoundedRequestsWithRegionReplicas.java
@@ -25,7 +25,6 @@ import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.ScheduledFuture;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicLong;
-
 import org.apache.commons.lang3.RandomUtils;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hbase.HBaseConfiguration;
@@ -33,7 +32,6 @@ import org.apache.hadoop.hbase.HRegionLocation;
 import org.apache.hadoop.hbase.IntegrationTestIngest;
 import org.apache.hadoop.hbase.IntegrationTestingUtility;
 import org.apache.hadoop.hbase.RegionLocations;
-import org.apache.hadoop.hbase.testclassification.IntegrationTests;
 import org.apache.hadoop.hbase.TableName;
 import org.apache.hadoop.hbase.chaos.factories.MonkeyFactory;
 import org.apache.hadoop.hbase.client.Admin;
@@ -43,6 +41,7 @@ import org.apache.hadoop.hbase.client.Get;
 import org.apache.hadoop.hbase.client.Result;
 import org.apache.hadoop.hbase.client.Table;
 import org.apache.hadoop.hbase.regionserver.StorefileRefresherChore;
+import org.apache.hadoop.hbase.testclassification.IntegrationTests;
 import org.apache.hadoop.hbase.util.LoadTestTool;
 import org.apache.hadoop.hbase.util.MultiThreadedReader;
 import org.apache.hadoop.hbase.util.Threads;
@@ -142,7 +141,7 @@ public class IntegrationTestTimeBoundedRequestsWithRegionReplicas extends Integr
   protected void runIngestTest(long defaultRunTime, long keysPerServerPerIter, int colsPerKey,
       int recordSize, int writeThreads, int readThreads) throws Exception {
     LOG.info("Cluster size:"+
-      util.getHBaseClusterInterface().getClusterStatus().getServersSize());
+      util.getHBaseClusterInterface().getClusterMetrics().getLiveServerMetrics().size());
 
     long start = System.currentTimeMillis();
     String runtimeKey = String.format(RUN_TIME_KEY, this.getClass().getSimpleName());

http://git-wip-us.apache.org/repos/asf/hbase/blob/654edc5f/hbase-mapreduce/src/main/java/org/apache/hadoop/hbase/mapreduce/RegionSizeCalculator.java
----------------------------------------------------------------------
diff --git a/hbase-mapreduce/src/main/java/org/apache/hadoop/hbase/mapreduce/RegionSizeCalculator.java b/hbase-mapreduce/src/main/java/org/apache/hadoop/hbase/mapreduce/RegionSizeCalculator.java
index f50de5c..40cd34f 100644
--- a/hbase-mapreduce/src/main/java/org/apache/hadoop/hbase/mapreduce/RegionSizeCalculator.java
+++ b/hbase-mapreduce/src/main/java/org/apache/hadoop/hbase/mapreduce/RegionSizeCalculator.java
@@ -23,11 +23,11 @@ import java.util.Collections;
 import java.util.Map;
 import java.util.Set;
 import java.util.TreeMap;
-
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hbase.HRegionLocation;
-import org.apache.hadoop.hbase.RegionLoad;
+import org.apache.hadoop.hbase.RegionMetrics;
 import org.apache.hadoop.hbase.ServerName;
+import org.apache.hadoop.hbase.Size;
 import org.apache.hadoop.hbase.client.Admin;
 import org.apache.hadoop.hbase.client.RegionLocator;
 import org.apache.hadoop.hbase.util.Bytes;
@@ -79,12 +79,13 @@ public class RegionSizeCalculator {
     Set<ServerName> tableServers = getRegionServersOfTable(regionLocator);
 
     for (ServerName tableServerName : tableServers) {
-      Map<byte[], RegionLoad> regionLoads =
-          admin.getRegionLoad(tableServerName, regionLocator.getName());
-      for (RegionLoad regionLoad : regionLoads.values()) {
+      for (RegionMetrics regionLoad : admin.getRegionMetrics(
+        tableServerName,regionLocator.getName())) {
+
+        byte[] regionId = regionLoad.getRegionName();
+        long regionSizeBytes
+          = ((long) regionLoad.getStoreFileSize().get(Size.Unit.MEGABYTE)) * MEGABYTE;
 
-        byte[] regionId = regionLoad.getName();
-        long regionSizeBytes = regionLoad.getStorefileSizeMB() * MEGABYTE;
         sizeMap.put(regionId, regionSizeBytes);
 
         if (LOG.isDebugEnabled()) {