private JSONObject getHelixInfoJsonFromManager()

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;
  }