package io.fathom.cloud.zookeeper;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.common.util.concurrent.SettableFuture;
public class ListenableWatcher implements Watcher {
private static final Logger log = LoggerFactory.getLogger(ListenableWatcher.class);
final SettableFuture<Object> future;
public ListenableWatcher(SettableFuture<Object> future) {
this.future = future;
}
@Override
public void process(WatchedEvent event) {
synchronized (future) {
if (future.isDone()) {
log.info("ZK event after already fired: {}", event);
return;
}
switch (event.getType()) {
case NodeDataChanged:
break;
default:
log.warn("Unexpected ZK event type: {}", event);
break;
}
future.set(event);
}
}
}