package com.zillabyte.motherbrain.coordination;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.TimeoutException;
import com.zillabyte.motherbrain.universe.Config;
/***
* Convenience class to provide overloaded methods for the interface
* @author jake
*
*/
public class CoordinationServiceWrapper implements CoordinationService {
/**
*
*/
private static final long serialVersionUID = -6365479966023733518L;
private CoordinationService _delegate;
/***
*
* @param delegate
*/
public CoordinationServiceWrapper(CoordinationService delegate) {
_delegate = delegate;
}
public void initialize() throws CoordinationException {
_delegate.initialize();
}
public void shutdown() throws CoordinationException {
_delegate.shutdown();
}
public <T> T getState(String key, T defaultState) throws CoordinationException {
return _delegate.getState(key, defaultState);
}
public <T> T getState(String key) throws CoordinationException {
return _delegate.getState(key, null);
}
public <T> void setState(String key, T state) throws CoordinationException {
_delegate.setState(key, state);
}
public boolean hasState(String key) throws CoordinationException {
return _delegate.hasState(key);
}
public void removeStateWithPrefix(String key) throws CoordinationException {
_delegate.removeStateWithPrefix(key);
}
public void clear() throws CoordinationException {
_delegate.clear();
}
public Lock lock(String lockPath, long timeout, long duration) throws CoordinationException, TimeoutException {
return _delegate.lock(lockPath, timeout, duration);
}
public Lock lock(String lockPath, long timeout) throws CoordinationException, TimeoutException {
return _delegate.lock(lockPath, timeout, getDefaultLockDuration());
}
public Lock lock(String lockPath) throws CoordinationException, TimeoutException {
return _delegate.lock(lockPath, getDefaultLockTimeout(), getDefaultLockDuration());
}
public void sendMessage(String channel, Object message) throws CoordinationException {
_delegate.sendMessage(channel, message);
}
public void sendTransactionalMessage(ExecutorService exec, String channel, Object message, long timeout) throws CoordinationException, TimeoutException {
_delegate.sendTransactionalMessage(exec, channel, message, timeout);
}
public void sendTransactionalMessage(ExecutorService exec, String channel, Object message) throws CoordinationException, TimeoutException {
_delegate.sendTransactionalMessage(exec, channel, message, getDefaultTransactionMessageTimeout());
}
public Watcher watchForMessage(ExecutorService exec, String channel, MessageHandler messageHandler) throws CoordinationException {
return _delegate.watchForMessage(exec, channel, messageHandler);
}
public Watcher watchForAsk(ExecutorService exec, String channel, AskHandler askHandler) throws CoordinationException {
return _delegate.watchForAsk(exec, channel, askHandler);
}
public Object ask(ExecutorService exec, String channel, Object message, long timeout) throws CoordinationException, TimeoutException {
return _delegate.ask(exec, channel, message, timeout);
}
public Object ask(ExecutorService exec, String channel, Object message) throws CoordinationException, TimeoutException {
return _delegate.ask(exec, channel, message, getDefaultAskTimeout());
}
private long getDefaultLockTimeout() {
return Config.getOrDefault("coordination.service.default.lock.timeout.ms", 1000L * 60 * 10);
}
private long getDefaultLockDuration() {
return Config.getOrDefault("coordination.service.default.lock.duration.ms", 1000L * 60 * 3);
}
private long getDefaultTransactionMessageTimeout() {
return Config.getOrDefault("coordination.service.default.transaction.message.timeout.ms", 1000L * 60 * 3);
}
private long getDefaultAskTimeout() {
return Config.getOrDefault("coordination.service.default.ask.timeout.ms", 1000L * 60 * 1);
}
}