From ee3704356b1698345db69cff4f66fdaf2a7d5ff4 Mon Sep 17 00:00:00 2001 From: Nikita Date: Wed, 16 Dec 2015 16:15:34 +0300 Subject: [PATCH] RedissonWriteLock forceUnlockAsync fixed --- src/main/java/org/redisson/RedissonWriteLock.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/main/java/org/redisson/RedissonWriteLock.java b/src/main/java/org/redisson/RedissonWriteLock.java index b50554372..13a718fb5 100644 --- a/src/main/java/org/redisson/RedissonWriteLock.java +++ b/src/main/java/org/redisson/RedissonWriteLock.java @@ -26,6 +26,8 @@ import org.redisson.client.protocol.RedisCommands; import org.redisson.command.CommandExecutor; import org.redisson.core.RLock; +import io.netty.util.concurrent.Future; + /** * Lock will be removed automatically if client disconnects. * @@ -110,6 +112,19 @@ public class RedissonWriteLock extends RedissonLock implements RLock { throw new UnsupportedOperationException(); } + Future forceUnlockAsync() { + cancelExpirationRenewal(); + return commandExecutor.evalWriteAsync(getName(), LongCodec.INSTANCE, RedisCommands.EVAL_BOOLEAN, + "if (redis.call('hget', KEYS[1], 'mode') == 'write') then " + + "redis.call('del', KEYS[1]); " + + "redis.call('publish', KEYS[2], ARGV[1]); " + + "return 1; " + + "else " + + "return 0; " + + "end;", + Arrays.asList(getName(), getChannelName()), unlockMessage); + } + @Override public boolean isLocked() { String res = commandExecutor.read(getName(), StringCodec.INSTANCE, RedisCommands.HGET, getName(), "mode");