Timeout cancellation. #123

pull/126/head
Nikita 10 years ago
parent 2cfb173e59
commit f83e4b8bd3

@ -102,19 +102,23 @@ public class MasterSlaveConnectionManager implements ConnectionManager {
this.codec = new RedisCodecWrapper(cfg.getCodec());
}
public <T> FutureListener<T> createReleaseWriteListener(final int slot, final RedisConnection conn) {
public <T> FutureListener<T> createReleaseWriteListener(final int slot,
final RedisConnection conn, final Timeout timeout) {
return new FutureListener<T>() {
@Override
public void operationComplete(io.netty.util.concurrent.Future<T> future) throws Exception {
timeout.cancel();
releaseWrite(slot, conn);
}
};
}
public <T> FutureListener<T> createReleaseReadListener(final int slot, final RedisConnection conn) {
public <T> FutureListener<T> createReleaseReadListener(final int slot,
final RedisConnection conn, final Timeout timeout) {
return new FutureListener<T>() {
@Override
public void operationComplete(io.netty.util.concurrent.Future<T> future) throws Exception {
timeout.cancel();
releaseRead(slot, conn);
}
};
@ -156,8 +160,8 @@ public class MasterSlaveConnectionManager implements ConnectionManager {
asyncOperation.execute(promise, async);
ex.set(new RedisTimeoutException());
timer.newTimeout(timerTask, config.getTimeout(), TimeUnit.MILLISECONDS);
promise.addListener(createReleaseWriteListener(slot, connection));
Timeout timeout = timer.newTimeout(timerTask, config.getTimeout(), TimeUnit.MILLISECONDS);
promise.addListener(createReleaseWriteListener(slot, connection, timeout));
} catch (RedisConnectionException e) {
ex.set(e);
timer.newTimeout(timerTask, config.getRetryInterval(), TimeUnit.MILLISECONDS);
@ -228,8 +232,8 @@ public class MasterSlaveConnectionManager implements ConnectionManager {
asyncOperation.execute(promise, async);
ex.set(new RedisTimeoutException());
timer.newTimeout(timerTask, config.getTimeout(), TimeUnit.MILLISECONDS);
promise.addListener(createReleaseWriteListener(slot, connection));
Timeout timeout = timer.newTimeout(timerTask, config.getTimeout(), TimeUnit.MILLISECONDS);
promise.addListener(createReleaseWriteListener(slot, connection, timeout));
} catch (RedisConnectionException e) {
ex.set(e);
timer.newTimeout(timerTask, config.getRetryInterval(), TimeUnit.MILLISECONDS);
@ -421,8 +425,8 @@ public class MasterSlaveConnectionManager implements ConnectionManager {
asyncOperation.execute(promise, async);
ex.set(new RedisTimeoutException());
timer.newTimeout(timerTask, config.getTimeout(), TimeUnit.MILLISECONDS);
promise.addListener(createReleaseReadListener(slot, connection));
Timeout timeout = timer.newTimeout(timerTask, config.getTimeout(), TimeUnit.MILLISECONDS);
promise.addListener(createReleaseReadListener(slot, connection, timeout));
} catch (RedisConnectionException e) {
ex.set(e);
timer.newTimeout(timerTask, config.getRetryInterval(), TimeUnit.MILLISECONDS);

Loading…
Cancel
Save