public static ControllerConf getControllerConf()

in uReplicator-Controller/src/main/java/com/uber/stream/kafka/mirrormaker/controller/ControllerConf.java [891:1181]


  public static ControllerConf getControllerConf(CommandLine cmd) {
    ControllerConf controllerConf = new ControllerConf();
    if (cmd.hasOption("config")) {
      controllerConf.setConfigFile(cmd.getOptionValue("config"));
    } else {
      controllerConf.setConfigFile("");
    }
    if (cmd.hasOption("srcClusters")) {
      controllerConf.setSourceClusters(cmd.getOptionValue("srcClusters"));
    } else {
      controllerConf.setSourceClusters("");
    }
    if (cmd.hasOption("destClusters")) {
      controllerConf.setDestinationClusters(cmd.getOptionValue("destClusters"));
    } else {
      controllerConf.setDestinationClusters("");
    }
    if (cmd.hasOption("enableFederated")) {
      controllerConf.setFederatedEnabled(cmd.getOptionValue("enableFederated"));
    } else {
      controllerConf.setFederatedEnabled("false");
    }
    if (cmd.hasOption("deploymentName")) {
      controllerConf.setDeploymentName(cmd.getOptionValue("deploymentName"));
    } else {
      if (controllerConf.isFederatedEnabled()) {
        throw new RuntimeException("Missing option: --deploymentName for federated uReplicator");
      } else {
        controllerConf.setDeploymentName("");
      }
    }
    if (cmd.hasOption("helixClusterName")) {
      controllerConf.setHelixClusterName(cmd.getOptionValue("helixClusterName"));
    } else {
      if (!controllerConf.isFederatedEnabled()) {
        throw new RuntimeException("Missing option: --helixClusterName");
      }
    }
    if (cmd.hasOption("zookeeper")) {
      controllerConf.setZkStr(cmd.getOptionValue("zookeeper"));
    } else {
      throw new RuntimeException("Missing option: --zookeeper");
    }
    if (cmd.hasOption("port")) {
      controllerConf.setControllerPort(cmd.getOptionValue("port"));
    } else {
      throw new RuntimeException("Missing option: --port");
    }
    if (cmd.hasOption("mode")) {
      controllerConf.setControllerMode(cmd.getOptionValue("mode"));
    } else {
      controllerConf.setControllerMode("auto");
    }
    if (cmd.hasOption("instanceId")) {
      controllerConf.setInstanceId(cmd.getOptionValue("instanceId"));
    } else {
      try {
        controllerConf.setInstanceId(InetAddress.getLocalHost().getHostName());
      } catch (UnknownHostException e) {
        // Do nothing
      }
    }
    if (cmd.hasOption("env")) {
      controllerConf.setEnvironment(cmd.getOptionValue("env"));
    } else {
      controllerConf.setEnvironment("env");
    }
    if (cmd.hasOption("graphiteHost")) {
      controllerConf.setGraphiteHost(cmd.getOptionValue("graphiteHost"));
    }
    if (cmd.hasOption("graphitePort")) {
      controllerConf.setGraphitePort(cmd.getOptionValue("graphitePort"));
    } else {
      controllerConf.setGraphitePort("0");
    }
    if (cmd.hasOption("metricsPrefix")) {
      controllerConf.setMetricsPrefix(cmd.getOptionValue("metricsPrefix"));
    } else {
      controllerConf.setMetricsPrefix(DEFAULT_METRICS_PREFIX);
    }
    if (cmd.hasOption("graphiteReportFreqInSec")) {
      controllerConf.setGraphiteReportFreqInSec(cmd.getOptionValue("graphiteReportFreqInSec"));
    } else{
      controllerConf.setGraphiteReportFreqInSec(Long.toString(DEFAULT_GRAPHITE_REPORT_FREQ_IN_SEC));
    }
    if (cmd.hasOption("enableJmxReport")) {
      controllerConf.setEnableJmxReport(cmd.getOptionValue("enableJmxReport"));
    } else {
      controllerConf.setEnableJmxReport(String.valueOf(DEFAULT_ENABLE_JMX_REPORT));
    }
    if (cmd.hasOption("enableGraphiteReport")) {
      controllerConf.setEnableGraphiteReport(cmd.getOptionValue("enableGraphiteReport"));
    } else {
      controllerConf.setEnableGraphiteReport(String.valueOf(DEFAULT_ENABLE_GRAPHITE_REPORT));
    }
    if (cmd.hasOption("c3Host")) {
      controllerConf.setC3Host(cmd.getOptionValue("c3Host"));
    } else {
      controllerConf.setC3Host(DEFAULT_C3_HOST);
    }
    if (cmd.hasOption("c3Port")) {
      controllerConf.setC3Port(cmd.getOptionValue("c3Port"));
    } else {
      controllerConf.setC3Port(Integer.toString(DEFAULT_C3_PORT));
    }
    if (cmd.hasOption("enableAutoWhitelist")) {
      controllerConf.setEnableAutoWhitelist(cmd.getOptionValue("enableAutoWhitelist"));
    }
    if (cmd.hasOption("enableAutoTopicExpansion")) {
      controllerConf.setEnableAutoTopicExpansion(cmd.getOptionValue("enableAutoTopicExpansion"));
    }
    if (cmd.hasOption("patternToExcludeTopics")) {
      controllerConf.setPatternToExcludeTopics(cmd.getOptionValue("patternToExcludeTopics"));
    } else {
      controllerConf.setPatternToExcludeTopics(DEFAULT_PATTERN_TO_EXCLUDE_TOPICS);
    }
    if (cmd.hasOption("enableSrcKafkaValidation")) {
      controllerConf.setEnableSrcKafkaValidation(cmd.getOptionValue("enableSrcKafkaValidation"));
    }
    if (cmd.hasOption("srcKafkaZkPath")) {
      controllerConf.setSrcKafkaZkPath(cmd.getOptionValue("srcKafkaZkPath"));
    }
    if (cmd.hasOption("destKafkaZkPath")) {
      controllerConf.setDestKafkaZkPath(cmd.getOptionValue("destKafkaZkPath"));
    }
    if (cmd.hasOption("consumerCommitZkPath")) {
      controllerConf.setConsumerCommitZkPath(cmd.getOptionValue("consumerCommitZkPath"));
    }
    if (cmd.hasOption("maxWorkingInstances")) {
      controllerConf.setMaxWorkingInstances(cmd.getOptionValue("maxWorkingInstances"));
    } else {
      controllerConf.setMaxWorkingInstances("0");
    }
    if (cmd.hasOption("autoRebalanceDelayInSeconds")) {
      controllerConf.setAutoRebalanceDelayInSeconds(cmd.getOptionValue("autoRebalanceDelayInSeconds"));
    } else {
      controllerConf.setAutoRebalanceDelayInSeconds("120");
    }
    if (cmd.hasOption("refreshTimeInSeconds")) {
      controllerConf.setWhitelistRefreshTimeInSeconds(cmd.getOptionValue("refreshTimeInSeconds"));
    } else {
      controllerConf.setWhitelistRefreshTimeInSeconds(Integer.toString(DEFAULT_WHITELIST_REFRESH_TIME_IN_SECONDS));
    }
    if (cmd.hasOption("initWaitTimeInSeconds")) {
      controllerConf.setInitWaitTimeInSeconds(cmd.getOptionValue("initWaitTimeInSeconds"));
    } else {
      controllerConf.setInitWaitTimeInSeconds(Integer.toString(DEFAULT_INIT_WAIT_TIME_IN_SECONDS));
    }
    if (cmd.hasOption("autoRebalancePeriodInSeconds")) {
      controllerConf.setAutoRebalancePeriodInSeconds(cmd.getOptionValue("autoRebalancePeriodInSeconds"));
    } else {
      controllerConf.setAutoRebalancePeriodInSeconds("0");
    }
    if (cmd.hasOption("autoRebalanceMinIntervalInSeconds")) {
      controllerConf.setAutoRebalanceMinIntervalInSeconds(cmd.getOptionValue("autoRebalanceMinIntervalInSeconds"));
    } else {
      controllerConf.setAutoRebalanceMinIntervalInSeconds(
          Integer.toString(DEFAULT_AUTO_REBALANCE_MIN_INTERVAL_IN_SECONDS));
    }
    if (cmd.hasOption("autoRebalanceMinLagTimeInSeconds")) {
      controllerConf.setAutoRebalanceMinLagTimeInSeconds(cmd.getOptionValue("autoRebalanceMinLagTimeInSeconds"));
    } else {
      controllerConf.setAutoRebalanceMinLagTimeInSeconds(
          Integer.toString(DEFAULT_AUTO_REBALANCE_MIN_LAG_TIME_IN_SECONDS));
    }
    if (cmd.hasOption("autoRebalanceMinLagOffset")) {
      controllerConf.setAutoRebalanceMinLagOffset(cmd.getOptionValue("autoRebalanceMinLagOffset"));
    } else {
      controllerConf.setAutoRebalanceMinLagOffset(Long.toString(DEFAULT_AUTO_REBALANCE_MIN_LAG_OFFSET));
    }
    if (cmd.hasOption("autoRebalanceMaxOffsetInfoValidInSeconds")) {
      controllerConf.setAutoRebalanceMaxOffsetInfoValidInSeconds(
          cmd.getOptionValue("autoRebalanceMaxOffsetInfoValidInSeconds"));
    } else {
      controllerConf.setAutoRebalanceMaxOffsetInfoValidInSeconds(
          Integer.toString(DEFAULT_AUTO_REBALANCE_MAX_OFFSET_INFO_VALID_IN_SECONDS));
    }
    if (cmd.hasOption("workloadRefreshPeriodInSeconds")) {
      controllerConf.setWorkloadRefreshPeriodInSeconds(cmd.getOptionValue("workloadRefreshPeriodInSeconds"));
    } else {
      controllerConf.setWorkloadRefreshPeriodInSeconds(Integer.toString(DEFAULT_WORKLOAD_REFRESH_PERIOD_IN_SECONDS));
    }
    if (cmd.hasOption("autoRebalanceWorkloadRatioThreshold")) {
      controllerConf.setAutoRebalanceWorkloadRatioThreshold(cmd.getOptionValue("autoRebalanceWorkloadRatioThreshold"));
    } else {
      controllerConf.setAutoRebalanceWorkloadRatioThreshold(
          Double.toString(DEFAULT_AUTO_REBALANCE_WORKLOAD_RATIO_THRESHOLD));
    }
    if (cmd.hasOption("maxDedicatedLaggingInstancesRatio")) {
      controllerConf.setMaxDedicatedLaggingInstancesRatio(cmd.getOptionValue("maxDedicatedLaggingInstancesRatio"));
    } else {
      controllerConf.setMaxDedicatedLaggingInstancesRatio(
          Double.toString(DEFAULT_MAX_DEDICATED_LAGGING_INSTANCES_RATIO));
    }
    if (cmd.hasOption("maxStuckPartitionMovements")) {
      controllerConf.setMaxStuckPartitionMovements(cmd.getOptionValue("maxStuckPartitionMovements"));
    } else {
      controllerConf.setMaxStuckPartitionMovements(Integer.toString(DEFAULT_MAX_STUCK_PARTITION_MOVEMENTS));
    }
    if (cmd.hasOption("moveStuckPartitionAfterMinutes")) {
      controllerConf.setMoveStuckPartitionAfterMinutes(cmd.getOptionValue("moveStuckPartitionAfterMinutes"));
    } else {
      controllerConf.setMoveStuckPartitionAfterMinutes(Integer.toString(DEFAULT_MOVE_STUCK_PARTITION_AFTER_MINUTES));
    }
    if (cmd.hasOption("numOffsetThread")) {
      controllerConf.setNumOffsetThread(cmd.getOptionValue("numOffsetThread"));
    } else {
      controllerConf.setNumOffsetThread(Integer.toString(DEFAULT_NUM_OFFSET_THREAD));
    }
    if (cmd.hasOption("blockingQueueSize")) {
      controllerConf.setBlockingQueueSize(cmd.getOptionValue("blockingQueueSize"));
    } else {
      controllerConf.setBlockingQueueSize(Integer.toString(DEFAULT_BLOCKING_QUEUE_SIZE));
    }
    if (cmd.hasOption("offsetRefreshIntervalInSec")) {
      controllerConf.setOffsetRefreshIntervalInSec(cmd.getOptionValue("offsetRefreshIntervalInSec"));
    } else {
      controllerConf.setOffsetRefreshIntervalInSec(Integer.toString(DEFAULT_OFFSET_REFRESH_INTERVAL_IN_SEC));
    }
    if (cmd.hasOption("groupId")) {
      controllerConf.setGroupId(cmd.getOptionValue("groupId"));
    }

    if (cmd.hasOption("hostname")) {
      controllerConf.setHostname(cmd.getOptionValue("hostname"));
    }

    if (cmd.hasOption("backUpToGit")) {
      controllerConf.setBackUpToGit(cmd.getOptionValue("backUpToGit"));
      if (controllerConf.getBackUpToGit()) {
        if (cmd.hasOption("remoteBackupRepo")) {
          controllerConf.setRemoteBackupRepo(cmd.getOptionValue("remoteBackupRepo"));
        } else {
          throw new RuntimeException("Missing option: --remoteBackupRepo");
        }

        if (cmd.hasOption("localGitRepoClonePath")) {
          controllerConf.setLocalGitRepoPath(cmd.getOptionValue("localGitRepoClonePath"));
        } else {
          throw new RuntimeException("Missing option: --localGitRepoClonePath");
        }
      } else {
        if (cmd.hasOption("localBackupFilePath")) {
          controllerConf.setLocalBackupFilePath(cmd.getOptionValue("localBackupFilePath"));
        } else {
          throw new RuntimeException("Missing option: --localBackupFilePath");
        }
      }
    } else {
      controllerConf.setBackUpToGit("false");
      controllerConf.setLocalBackupFilePath(defaultLocal);
    }

    if (cmd.hasOption("config")) {
      String fileName = cmd.getOptionValue("config");
      controllerConf.setConfigFile(fileName);
      // load config from file
      PropertiesConfiguration configFromFile = new PropertiesConfiguration();
      configFromFile.setDelimiterParsingDisabled(true);
      try {
        configFromFile.load(fileName);
      } catch (ConfigurationException e) {
        throw new RuntimeException("Failed to load config from file " + fileName + ": " + e.getMessage());
      }
      // merge the config with command line. Option from command line has higher priority to override config from file
      @SuppressWarnings("unchecked")
      Iterator<String> keyIter = configFromFile.getKeys();
      while (keyIter.hasNext()) {
        String key = keyIter.next();
        if (!controllerConf.containsKey(key)) {
          controllerConf.addPropertyDirect(key, configFromFile.getProperty(key));
        }
      }
    } else {
      controllerConf.setConfigFile("");
    }

    if (cmd.hasOption("maxWorkloadPerWorkerByteWithinRegion")) {
      controllerConf.setMaxWorkloadPerWorkerByteWithinRegion(cmd.getOptionValue("maxWorkloadPerWorkerByteWithinRegion"));
    } else {
      controllerConf.setMaxWorkloadPerWorkerByteWithinRegion(Double.toString(DEFAULT_MAX_WORKLOAD_PER_WORKER_BYTE_WITHIN_REGION));
    }

    if (cmd.hasOption("maxWorkloadPerWorkerByteCrossRegion")) {
      controllerConf.setMaxWorkloadPerWorkerByteCrossRegion(cmd.getOptionValue("maxWorkloadPerWorkerByteCrossRegion"));
    } else {
      controllerConf.setMaxWorkloadPerWorkerByteCrossRegion(Double.toString(DEFAULT_MAX_WORKLOAD_PER_WORKER_BYTE_CROSS_REGION));
    }

    return controllerConf;
  }