long proxyPauseSec = RebalanceController.PROXY_PAUSE_IN_SECONDS;
if(options.has("proxy-pause")) {
proxyPauseSec = (Long) options.valueOf("proxy-pause");
}
RebalanceController rebalanceController = new RebalanceController(bootstrapURL,
parallelism,
proxyPauseSec);
Cluster currentCluster = rebalanceController.getCurrentCluster();
List<StoreDefinition> currentStoreDefs = rebalanceController.getCurrentStoreDefs();
// If this test doesn't pass, something is wrong in prod!
RebalanceUtils.validateClusterStores(currentCluster, currentStoreDefs);
// Determine final cluster/stores and validate them
String finalClusterXML = (String) options.valueOf("final-cluster");
Cluster finalCluster = new ClusterMapper().readCluster(new File(finalClusterXML));
List<StoreDefinition> finalStoreDefs = currentStoreDefs;
if(options.has("final-stores")) {
String storesXML = (String) options.valueOf("final-stores");
finalStoreDefs = new StoreDefinitionsMapper().readStoreList(new File(storesXML));
}
RebalanceUtils.validateClusterStores(finalCluster, finalStoreDefs);
RebalanceUtils.validateCurrentFinalCluster(currentCluster, finalCluster);
// Process optional "planning" arguments
int batchSize = CmdUtils.valueOf(options, "batch-size", RebalancePlan.BATCH_SIZE);
String outputDir = null;
if(options.has("output-dir")) {
outputDir = (String) options.valueOf("output-dir");
}
// Plan & execute rebalancing.
rebalanceController.rebalance(new RebalancePlan(currentCluster,
currentStoreDefs,
finalCluster,
finalStoreDefs,
batchSize,
outputDir));