public Representation post()

in uReplicator-Manager/src/main/java/com/uber/stream/kafka/mirrormaker/manager/rest/resources/AdminRestletResource.java [84:162]


  public Representation post(Representation entity) {
    // TODO: separate manager and controller operation
    final String opt = (String) getRequest().getAttributes().get("opt");
    JSONObject responseJson = new JSONObject();
    responseJson.put("opt", opt);
    if ("disable_autoscaling".equalsIgnoreCase(opt)) {
      _helixMirrorMakerManager.disableAutoScaling();
      LOGGER.info("Disabled autoscaling!");
      responseJson.put("autoscaling_status", _helixMirrorMakerManager.isAutoScalingEnabled());
    } else if ("enable_autoscaling".equalsIgnoreCase(opt)) {
      _helixMirrorMakerManager.enableAutoScaling();
      LOGGER.info("Enabled autoscaling!");
      responseJson.put("autoscaling_status", _helixMirrorMakerManager.isAutoScalingEnabled());
    } else if ("disable_autobalancing".equalsIgnoreCase(opt)) {
      _helixMirrorMakerManager.disableAutoBalancing();
      LOGGER.info("Disabled autobalancing!");
      responseJson.put("autobalancing_status", _helixMirrorMakerManager.isAutoBalancingEnabled());
    } else if ("enable_autobalancing".equalsIgnoreCase(opt)) {
      _helixMirrorMakerManager.enableAutoBalancing();
      LOGGER.info("Enabled autobalancing!");
      responseJson.put("autobalancing_status", _helixMirrorMakerManager.isAutoBalancingEnabled());
    } else if ("controller_autobalancing".equalsIgnoreCase(opt)) {
      Form queryParams = getRequest().getResourceRef().getQueryAsForm();
      String srcCluster = ENABLE_PER_ROUTE_CHANGE ? queryParams.getFirstValue("srcCluster", true) : "";
      String dstCluster = ENABLE_PER_ROUTE_CHANGE ? queryParams.getFirstValue("dstCluster", true) : "";
      String enabledStr = queryParams.getFirstValue("enabled", true);
      if (Strings.isNullOrEmpty(enabledStr) || (Strings.isNullOrEmpty(srcCluster) != Strings.isNullOrEmpty(dstCluster))) {
        getResponse().setStatus(Status.CLIENT_ERROR_BAD_REQUEST);
        responseJson.put("status", Status.CLIENT_ERROR_BAD_REQUEST.getCode());
        responseJson.put("message", String.format("invalid operation"));
        return new StringRepresentation(responseJson.toJSONString());
      } else {
        return new StringRepresentation(setControllerAutobalancing(srcCluster, dstCluster, enabledStr).toJSONString());
      }
    } else if ("force_rebalance".equalsIgnoreCase(opt) || "manual_rebalance".equalsIgnoreCase(opt)) {
      try {
        boolean force = "force_rebalance".equalsIgnoreCase(opt);
        _helixMirrorMakerManager.handleLiveInstanceChange(false, force);
        responseJson.put("status", Status.SUCCESS_OK.getCode());
        return new StringRepresentation(responseJson.toJSONString());
      } catch (Exception e) {
        LOGGER.error("manual re-balance failed due to exception: {}", e, e);
        responseJson.put("status", Status.SERVER_ERROR_INTERNAL.getCode());
        responseJson
            .put("message", String.format("manual re-balance failed due to exception: %s", e));

        getResponse().setStatus(Status.SERVER_ERROR_INTERNAL);
      }
    } else if ("worker_number_override".equalsIgnoreCase(opt)) {
      Form queryParams = getRequest().getResourceRef().getQueryAsForm();

      String routeString = queryParams.getFirstValue("route", true);
      String workerNum = queryParams.getFirstValue("workerNumber", true);
      Integer workerCount = Integer.parseInt(workerNum);
      boolean validRoute = false;
      String example = "";
      for (String pipeline : _helixMirrorMakerManager.getPipelineToInstanceMap().keySet()) {
        for (InstanceTopicPartitionHolder itph : _helixMirrorMakerManager.getPipelineToInstanceMap().get(pipeline)) {
          if (itph.getRouteString().equalsIgnoreCase(routeString)) {
            validRoute = true;
          }
          if (StringUtils.isEmpty(example)) {
            example = itph.getRouteString();
          }
        }
      }
      if (validRoute) {
        _helixMirrorMakerManager.updateRouteWorkerOverride(routeString, workerCount);
        responseJson.put("worker_number_override", _helixMirrorMakerManager.getRouteWorkerOverride());
      } else {
        return new StringRepresentation("invalid route string, route sample: " + example);
      }
    } else {
      getResponse().setStatus(Status.CLIENT_ERROR_BAD_REQUEST);
      responseJson.put("status", Status.CLIENT_ERROR_BAD_REQUEST.getCode());
      responseJson.put("message", String.format("invalid operation"));
    }
    return new StringRepresentation(responseJson.toJSONString());
  }