package org.act.tstream.callback.impl;
import org.act.tstream.callback.BaseCallback;
import org.apache.log4j.Logger;
import org.act.tstream.cluster.StormStatus;
import org.act.tstream.daemon.nimbus.NimbusData;
import org.act.tstream.daemon.nimbus.TopologyAssign;
import org.act.tstream.daemon.nimbus.TopologyAssignEvent;
/**
* Do real rebalance action.
*
* After nimbus receive one rebalance command, it will do as following: 1. set
* topology status as rebalancing 2. delay 2 * timeout seconds 3. do this
* callback
*
* @author Xin.Li/Longda
*
*/
public class DoRebalanceTransitionCallback extends BaseCallback {
private static Logger LOG = Logger
.getLogger(DoRebalanceTransitionCallback.class);
private String topologyid;
private StormStatus oldStatus;
public DoRebalanceTransitionCallback(NimbusData data, String topologyid,
StormStatus status) {
// this.data = data;
this.topologyid = topologyid;
this.oldStatus = status;
}
@Override
public <T> Object execute(T... args) {
try {
TopologyAssignEvent event = new TopologyAssignEvent();
event.setTopologyId(topologyid);
event.setScratch(true);
event.setOldStatus(oldStatus);
TopologyAssign.push(event);
} catch (Exception e) {
LOG.error("do-rebalance error!", e);
}
// FIXME Why oldStatus?
return oldStatus.getOldStatus();
}
}