@Override
  public ProtobufMessageHandler getObjectFromMessage(CodedInputStream cis) throws IOException {
    StorageClusterStatus.Builder builder = StorageClusterStatus.newBuilder();
    RestUtil.mergeFrom(builder, cis);
    if (builder.hasRegions()) {
      regions = builder.getRegions();
    }
    if (builder.hasRequests()) {
      requests = builder.getRequests();
    }
    if (builder.hasAverageLoad()) {
      averageLoad = builder.getAverageLoad();
    }
    for (StorageClusterStatus.Node node : builder.getLiveNodesList()) {
      long startCode = node.hasStartCode() ? node.getStartCode() : -1;
      StorageClusterStatusModel.Node nodeModel =
        addLiveNode(node.getName(), startCode, node.getHeapSizeMB(), node.getMaxHeapSizeMB());
      long requests = node.hasRequests() ? node.getRequests() : 0;
      nodeModel.setRequests(requests);
      for (StorageClusterStatus.Region region : node.getRegionsList()) {
        nodeModel.addRegion(region.getName().toByteArray(), region.getStores(),
          region.getStorefiles(), region.getStorefileSizeMB(), region.getMemStoreSizeMB(),
          region.getStorefileIndexSizeKB(), region.getReadRequestsCount(),
          region.getCpRequestsCount(), region.getWriteRequestsCount(), region.getRootIndexSizeKB(),
          region.getTotalStaticIndexSizeKB(), region.getTotalStaticBloomSizeKB(),
          region.getTotalCompactingKVs(), region.getCurrentCompactedKVs());
      }
    }
    for (String node : builder.getDeadNodesList()) {
      addDeadNode(node);
    }
    return this;
  }
@param averageLoad the average load of region servers in the cluster
hbase-rest/src/main/java/org/apache/hadoop/hbase/rest/model/StorageClusterStatusModel.java