public void rebalance() { int rebalanceDelay = 20; int activateDelay = 10; save(); // deactivate(); // timer.schedule(new ActivateTask(this), (rebalanceDelay + activateDelay) * 1000); // prevent nimbus from getting confused // if (localCluster != null) { // deactivate(); // timer.schedule(new ActivateTask(this), (rebalanceDelay + activateDelay) * 1000); // } LOG.info("parallelism rebalance " + System.currentTimeMillis()); for (String component : parallelism.keySet()) { LOG.info("parallelism " + component + " " + parallelism.get(component)); } RebalanceOptions options = new RebalanceOptions(); options.set_num_executors(parallelism); options.set_wait_secs(rebalanceDelay); try { System.out.println("REBALANCING: " + parallelism); if (localCluster != null) { localCluster.rebalance(topologyName, options); } else { NimbusClient client = NimbusClient.getConfiguredClient(stormConf); client.getClient().rebalance(topologyName, options); } } catch (Exception e) { System.out.println("rebalance() exception: " + e.toString()); } }
/** * rebalance one topology @@@ rebalance options hasn't implements * * <p>It is used to let workers wait several seconds to finish jobs * * @param topologyname String * @param options RebalanceOptions */ @Override public void rebalance(String topologyName, RebalanceOptions options) throws NotAliveException, TException, InvalidTopologyException { try { checkTopologyActive(data, topologyName, true); Integer wait_amt = null; if (options != null && options.is_set_wait_secs()) { wait_amt = options.get_wait_secs(); } NimbusUtils.transitionName(data, topologyName, true, StatusType.rebalance, wait_amt); } catch (NotAliveException e) { String errMsg = "Rebalance Error, no this topology " + topologyName; LOG.error(errMsg, e); throw new NotAliveException(errMsg); } catch (Exception e) { String errMsg = "Failed to rebalance topology " + topologyName; LOG.error(errMsg, e); throw new TException(errMsg); } }