package com.alipay.bluewhale.core.work.refresh;
import java.util.Map;
import java.util.concurrent.atomic.AtomicBoolean;
import backtype.storm.Config;
import com.alipay.bluewhale.core.callback.RunnableCallback;
import com.alipay.bluewhale.core.cluster.StormBase;
import com.alipay.bluewhale.core.cluster.StormClusterState;
import com.alipay.bluewhale.core.daemon.StatusType;
/**
* ��zk�ж�ȡ��ǰstorm�ĵ�ǰ״̬�Ƿ�Ϊactive�������µ�zkActive��
*
* @author yannian
*
*/
public class RefreshActive extends RunnableCallback {
private AtomicBoolean active;
@SuppressWarnings("rawtypes")
private Map conf;
private StormClusterState zkCluster;
private String topologyId;
private AtomicBoolean zkActive;
// private Object lock = new Object();
@SuppressWarnings("rawtypes")
public RefreshActive(AtomicBoolean active, Map conf,
StormClusterState zkCluster, String topologyId,
AtomicBoolean zkActive) {
this.active = active;
this.conf = conf;
this.zkCluster = zkCluster;
this.topologyId = topologyId;
this.zkActive = zkActive;
}
@Override
public void run() {
// zkActive�Ѿ����̰߳�ȫ
// synchronized (lock) {
StormBase base = zkCluster.storm_base(topologyId, this);
if (base == null) {
zkActive.set(false);
} else {
StatusType type = base.getStatus().getStatusType();
boolean isActive = type.equals(StatusType.active);
zkActive.set(isActive);
}
// }
}
@Override
public Object getResult() {
if (active.get()) {
String key = Config.TASK_REFRESH_POLL_SECS;
return conf.get(key);
}
return -1;
}
}