package com.thenetcircle.comsumerdispatcher.distribution.watcher;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import com.thenetcircle.comsumerdispatcher.distribution.DistributionManager;
import com.thenetcircle.comsumerdispatcher.distribution.DistributionTreeConstants;
import com.thenetcircle.comsumerdispatcher.thread.ConsumerJobExecutorPool;
public class NewUrlWatcher extends BaseJobPoolLevelWatcher implements INewUrlWatcher {
private static Log _logger = LogFactory.getLog(NewUrlWatcher.class);
protected String newUrl;
@Override
public void register(ConsumerJobExecutorPool pool) {
super.register(pool);
if (DistributionManager.getInstance().isStandalone())
return;
_logger.info("[Distribution Watcher] going to register new url watcher...");
mutex = new Integer(-1);
try {
watchOrGetNode(true);
} catch (Exception e) {
_logger.error("[Distribution NewURL Watcher] error while trying to watch." + e, e);
}
}
@Override
public void process(WatchedEvent event) {
if(event.getType() == Watcher.Event.EventType.NodeDataChanged) {
_logger.info("[Distribution NewURL Watcher] got NewURL event....");
String eventUrl;
try {
eventUrl = watchOrGetNode(false);
pool.refreshUrl(eventUrl);
} catch (Exception e) {
_logger.error("[Distribution NewURL Watcher] error while processing watched event" + e, e);
}
}
try {
watchOrGetNode(true);
} catch (Exception e) {
_logger.error(e, e);
}
}
@Override
protected String findTheNodePathToWatch() {
return String.format(DistributionTreeConstants.CD_ROOT_DOMAIN_QUEUEONSERVER_REQURL, getDomainName(), pool.getJobDefinition().getLogicName());
}
@Override
protected Watcher getWatcher() {
return this;
}
@Override
protected void doExecute() {
if (DistributionManager.getInstance().isStandalone()) {
pool.refreshUrl(newUrl);
} else {
try {
zk.setData(findTheNodePathToWatch(), newUrl.getBytes(), -1);
} catch (Exception e) {
_logger.error("[Distribution CountChanged Watcher] error to set data for node: " + e, e);
}
}
}
@Override
protected void preExecute() {
}
@Override
protected void postExecute() {
}
public void setNewUrl(String url) {
this.newUrl = url;
}
}