in uReplicator-Manager/src/main/java/com/uber/stream/kafka/mirrormaker/manager/rest/resources/TopicManagementRestletResource.java [324:401]
private JSONObject getHelixInfoJsonFromManager(String topicName) {
IdealState idealStateForTopic = _helixMirrorMakerManager.getIdealStateForTopic(topicName);
ExternalView externalViewForTopic = _helixMirrorMakerManager.getExternalViewForTopic(topicName);
JSONObject helixInfoJson = new JSONObject();
helixInfoJson.put("topic", topicName);
JSONObject externalViewPartitionToServerMappingJson = new JSONObject();
if (externalViewForTopic == null) {
LOGGER.info("External view for topic " + topicName + " is NULL");
} else {
for (String partition : externalViewForTopic.getPartitionSet()) {
Map<String, String> stateMap = externalViewForTopic.getStateMap(partition);
for (String server : stateMap.keySet()) {
if (!externalViewPartitionToServerMappingJson.containsKey(partition)) {
externalViewPartitionToServerMappingJson.put(partition, new JSONArray());
}
externalViewPartitionToServerMappingJson.getJSONArray(partition).add(server);
}
}
}
helixInfoJson.put("externalView", externalViewPartitionToServerMappingJson);
JSONObject idealStatePartitionToServerMappingJson = new JSONObject();
if (idealStateForTopic == null) {
LOGGER.info("Ideal state for topic " + topicName + " is NULL");
} else {
for (String partition : idealStateForTopic.getPartitionSet()) {
Map<String, String> stateMap = idealStateForTopic.getInstanceStateMap(partition);
if (stateMap != null) {
for (String server : stateMap.keySet()) {
if (!idealStatePartitionToServerMappingJson.containsKey(partition)) {
idealStatePartitionToServerMappingJson.put(partition, new JSONArray());
}
idealStatePartitionToServerMappingJson.getJSONArray(partition).add(server);
}
}
}
}
helixInfoJson.put("idealState", idealStatePartitionToServerMappingJson);
Map<String, List<String>> serverToPartitionMapping = new HashMap<>();
JSONObject serverToPartitionMappingJson = new JSONObject();
JSONObject serverToNumPartitionsMappingJson = new JSONObject();
if (externalViewForTopic != null) {
for (String partition : externalViewForTopic.getPartitionSet()) {
Map<String, String> stateMap = externalViewForTopic.getStateMap(partition);
for (String server : stateMap.keySet()) {
if (stateMap.get(server).equals("ONLINE")) {
if (!serverToPartitionMapping.containsKey(server)) {
serverToPartitionMapping.put(server, new ArrayList<>());
serverToPartitionMappingJson.put(server, new JSONArray());
serverToNumPartitionsMappingJson.put(server, 0);
}
serverToPartitionMapping.get(server).add(partition);
serverToPartitionMappingJson.getJSONArray(server).add(partition);
serverToNumPartitionsMappingJson.put(server,
serverToNumPartitionsMappingJson.getInteger(server) + 1);
}
}
}
}
helixInfoJson.put("serverToPartitionMapping", serverToPartitionMappingJson);
helixInfoJson.put("serverToNumPartitionsMapping", serverToNumPartitionsMappingJson);
if (ControllerUtils.isPipelineName(topicName)) {
return helixInfoJson;
}
JSONObject workerMappingJson = new JSONObject();
for (InstanceTopicPartitionHolder itph : _helixMirrorMakerManager
.getTopicToPipelineInstanceMap()
.get(topicName).values()) {
workerMappingJson.put(itph.getRouteString(), itph.getWorkerSet());
}
helixInfoJson.put("workers", workerMappingJson);
return helixInfoJson;
}