in hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java [2993:3120]
public ClusterMetrics getClusterMetricsWithoutCoprocessor(EnumSet<Option> options)
throws InterruptedIOException {
ClusterMetricsBuilder builder = ClusterMetricsBuilder.newBuilder();
// given that hbase1 can't submit the request with Option,
// we return all information to client if the list of Option is empty.
if (options.isEmpty()) {
options = EnumSet.allOf(Option.class);
}
// TASKS and/or LIVE_SERVERS will populate this map, which will be given to the builder if
// not null after option processing completes.
Map<ServerName, ServerMetrics> serverMetricsMap = null;
for (Option opt : options) {
switch (opt) {
case HBASE_VERSION:
builder.setHBaseVersion(VersionInfo.getVersion());
break;
case CLUSTER_ID:
builder.setClusterId(getClusterId());
break;
case MASTER:
builder.setMasterName(getServerName());
break;
case BACKUP_MASTERS:
builder.setBackerMasterNames(getBackupMasters());
break;
case TASKS: {
// Master tasks
builder.setMasterTasks(TaskMonitor.get().getTasks().stream()
.map(task -> ServerTaskBuilder.newBuilder().setDescription(task.getDescription())
.setStatus(task.getStatus())
.setState(ServerTask.State.valueOf(task.getState().name()))
.setStartTime(task.getStartTime()).setCompletionTime(task.getCompletionTimestamp())
.build())
.collect(Collectors.toList()));
// TASKS is also synonymous with LIVE_SERVERS for now because task information for
// regionservers is carried in ServerLoad.
// Add entries to serverMetricsMap for all live servers, if we haven't already done so
if (serverMetricsMap == null) {
serverMetricsMap = getOnlineServers();
}
break;
}
case LIVE_SERVERS: {
// Add entries to serverMetricsMap for all live servers, if we haven't already done so
if (serverMetricsMap == null) {
serverMetricsMap = getOnlineServers();
}
break;
}
case DEAD_SERVERS: {
if (serverManager != null) {
builder.setDeadServerNames(
new ArrayList<>(serverManager.getDeadServers().copyServerNames()));
}
break;
}
case UNKNOWN_SERVERS: {
if (serverManager != null) {
builder.setUnknownServerNames(getUnknownServers());
}
break;
}
case MASTER_COPROCESSORS: {
if (cpHost != null) {
builder.setMasterCoprocessorNames(Arrays.asList(getMasterCoprocessors()));
}
break;
}
case REGIONS_IN_TRANSITION: {
if (assignmentManager != null) {
builder.setRegionsInTransition(
assignmentManager.getRegionStates().getRegionsStateInTransition());
}
break;
}
case BALANCER_ON: {
if (loadBalancerStateStore != null) {
builder.setBalancerOn(loadBalancerStateStore.get());
}
break;
}
case MASTER_INFO_PORT: {
if (infoServer != null) {
builder.setMasterInfoPort(infoServer.getPort());
}
break;
}
case SERVERS_NAME: {
if (serverManager != null) {
builder.setServerNames(serverManager.getOnlineServersList());
}
break;
}
case TABLE_TO_REGIONS_COUNT: {
if (isActiveMaster() && isInitialized() && assignmentManager != null) {
try {
Map<TableName, RegionStatesCount> tableRegionStatesCountMap = new HashMap<>();
Map<String, TableDescriptor> tableDescriptorMap = getTableDescriptors().getAll();
for (TableDescriptor tableDescriptor : tableDescriptorMap.values()) {
TableName tableName = tableDescriptor.getTableName();
RegionStatesCount regionStatesCount =
assignmentManager.getRegionStatesCount(tableName);
tableRegionStatesCountMap.put(tableName, regionStatesCount);
}
builder.setTableRegionStatesCount(tableRegionStatesCountMap);
} catch (IOException e) {
LOG.error("Error while populating TABLE_TO_REGIONS_COUNT for Cluster Metrics..", e);
}
}
break;
}
case DECOMMISSIONED_SERVERS: {
if (serverManager != null) {
builder.setDecommissionedServerNames(serverManager.getDrainingServersList());
}
break;
}
}
}
if (serverMetricsMap != null) {
builder.setLiveServerMetrics(serverMetricsMap);
}
return builder.build();
}