RLock.delete result fixed. #305

pull/337/head
Nikita 9 years ago
parent a9055f1c3b
commit 0385443b56

@ -224,8 +224,11 @@ public class RedissonCountDownLatch extends RedissonObject implements RCountDown
public Future<Boolean> deleteAsync() {
return commandExecutor.evalWriteAsync(getName(), LongCodec.INSTANCE, RedisCommands.EVAL_BOOLEAN_R1,
"if redis.call('del', KEYS[1]) == 1 then "
+ "redis.call('publish', ARGV[2], ARGV[1]); "
+ "return true else return false end",
+ "redis.call('publish', ARGV[2], ARGV[1]); "
+ "return true "
+ "else "
+ "return false "
+ "end",
Collections.<Object>singletonList(getName()), newCountMessage, getChannelName());
}

@ -26,15 +26,12 @@ import org.redisson.client.RedisPubSubListener;
import org.redisson.client.codec.LongCodec;
import org.redisson.client.protocol.RedisCommands;
import org.redisson.client.protocol.pubsub.PubSubType;
import org.redisson.codec.JsonJacksonCodec;
import org.redisson.command.CommandExecutor;
import org.redisson.connection.PubSubConnectionEntry;
import org.redisson.core.RLock;
import io.netty.util.Timeout;
import io.netty.util.TimerTask;
import io.netty.util.concurrent.Future;
import io.netty.util.concurrent.FutureListener;
import io.netty.util.concurrent.Promise;
import io.netty.util.internal.PlatformDependent;
@ -363,7 +360,12 @@ public class RedissonLock extends RedissonExpirable implements RLock {
private Future<Boolean> forceUnlockAsync() {
stopRefreshTask();
return commandExecutor.evalWriteAsync(getName(), LongCodec.INSTANCE, RedisCommands.EVAL_BOOLEAN_R1,
"redis.call('del', KEYS[1]); redis.call('publish', ARGV[2], ARGV[1]); return true",
"if (redis.call('del', KEYS[1]) == 1) then "
+ "redis.call('publish', ARGV[2], ARGV[1]); "
+ "return true "
+ "else "
+ "return false "
+ "end",
Collections.<Object>singletonList(getName()), unlockMessage, getChannelName());
}
@ -404,12 +406,6 @@ public class RedissonLock extends RedissonExpirable implements RLock {
return opStatus.intValue();
}
@Override
public boolean delete() {
forceUnlock();
return true;
}
@Override
public Future<Boolean> deleteAsync() {
return forceUnlockAsync();

@ -13,7 +13,7 @@ public abstract class BaseConcurrentTest extends BaseTest {
protected void testMultiInstanceConcurrency(int iterations, final RedissonRunnable runnable) throws InterruptedException {
ExecutorService executor = Executors.newCachedThreadPool();
final Map<Integer, Redisson> instances = new HashMap<Integer, Redisson>();
final Map<Integer, RedissonClient> instances = new HashMap<Integer, RedissonClient>();
for (int i = 0; i < iterations; i++) {
instances.put(i, BaseTest.createInstance());
}
@ -24,7 +24,7 @@ public abstract class BaseConcurrentTest extends BaseTest {
executor.execute(new Runnable() {
@Override
public void run() {
Redisson redisson = instances.get(n);
RedissonClient redisson = instances.get(n);
runnable.run(redisson);
}
});
@ -37,7 +37,7 @@ public abstract class BaseConcurrentTest extends BaseTest {
executor = Executors.newCachedThreadPool();
for (final Redisson redisson : instances.values()) {
for (final RedissonClient redisson : instances.values()) {
executor.execute(new Runnable() {
@Override
public void run() {
@ -53,7 +53,7 @@ public abstract class BaseConcurrentTest extends BaseTest {
protected void testSingleInstanceConcurrency(int iterations, final RedissonRunnable runnable) throws InterruptedException {
ExecutorService executor = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());
final Redisson redisson = BaseTest.createInstance();
final RedissonClient redisson = BaseTest.createInstance();
long watch = System.currentTimeMillis();
for (int i = 0; i < iterations; i++) {
executor.execute(new Runnable() {

@ -6,7 +6,7 @@ import org.junit.BeforeClass;
public abstract class BaseTest {
protected static Redisson redisson;
protected static RedissonClient redisson;
@BeforeClass
public static void beforeClass() {
@ -35,7 +35,7 @@ public abstract class BaseTest {
return config;
}
public static Redisson createInstance() {
public static RedissonClient createInstance() {
Config config = createConfig();
return Redisson.create(config);
}

@ -17,7 +17,7 @@ public class ConcurrentRedissonSortedSetTest extends BaseConcurrentTest {
public void testAdd_SingleInstance() throws InterruptedException {
final String name = "testAdd_SingleInstance";
Redisson r = BaseTest.createInstance();
RedissonClient r = BaseTest.createInstance();
RSortedSet<Integer> map = r.getSortedSet(name);
map.clear();
@ -30,7 +30,7 @@ public class ConcurrentRedissonSortedSetTest extends BaseConcurrentTest {
final AtomicInteger counter = new AtomicInteger(-1);
testSingleInstanceConcurrency(length, new RedissonRunnable() {
@Override
public void run(Redisson redisson) {
public void run(RedissonClient redisson) {
RSortedSet<Integer> set = redisson.getSortedSet(name);
int c = counter.incrementAndGet();
Integer element = elements.get(c);
@ -41,7 +41,7 @@ public class ConcurrentRedissonSortedSetTest extends BaseConcurrentTest {
// for (Integer integer : map) {
// System.out.println("int: " + integer);
// }
Collections.sort(elements);
Integer[] p = elements.toArray(new Integer[elements.size()]);
MatcherAssert.assertThat(map, Matchers.contains(p));
@ -54,7 +54,7 @@ public class ConcurrentRedissonSortedSetTest extends BaseConcurrentTest {
public void testAddNegative_SingleInstance() throws InterruptedException {
final String name = "testAddNegative_SingleInstance";
Redisson r = BaseTest.createInstance();
RedissonClient r = BaseTest.createInstance();
RSortedSet<Integer> map = r.getSortedSet(name);
map.clear();
@ -62,7 +62,7 @@ public class ConcurrentRedissonSortedSetTest extends BaseConcurrentTest {
final AtomicInteger counter = new AtomicInteger();
testSingleInstanceConcurrency(length, new RedissonRunnable() {
@Override
public void run(Redisson redisson) {
public void run(RedissonClient redisson) {
RSortedSet<Integer> set = redisson.getSortedSet(name);
int c = counter.decrementAndGet();
Assert.assertTrue(set.add(c));

@ -18,7 +18,7 @@ public class RedissonConcurrentMapTest extends BaseConcurrentTest {
testSingleInstanceConcurrency(100, new RedissonRunnable() {
@Override
public void run(Redisson redisson) {
public void run(RedissonClient redisson) {
ConcurrentMap<String, String> map = redisson.getMap(name);
map.replace("1", "122", "32");
map.replace("1", "0", "31");
@ -39,7 +39,7 @@ public class RedissonConcurrentMapTest extends BaseConcurrentTest {
map.putIfAbsent("1", "0");
testSingleInstanceConcurrency(100, new RedissonRunnable() {
@Override
public void run(Redisson redisson) {
public void run(RedissonClient redisson) {
ConcurrentMap<String, String> map = redisson.getMap(name);
map.remove("1", "0");
}
@ -57,7 +57,7 @@ public class RedissonConcurrentMapTest extends BaseConcurrentTest {
testSingleInstanceConcurrency(100, new RedissonRunnable() {
@Override
public void run(Redisson redisson) {
public void run(RedissonClient redisson) {
ConcurrentMap<String, String> map = redisson.getMap(name);
map.replace("1", "3");
}
@ -73,7 +73,7 @@ public class RedissonConcurrentMapTest extends BaseConcurrentTest {
public void test_Multi_Replace_MultiInstance() throws InterruptedException {
final String name = "test_Multi_Replace_MultiInstance";
Redisson redisson = BaseTest.createInstance();
RedissonClient redisson = BaseTest.createInstance();
ConcurrentMap<Integer, Integer> map = redisson.getMap(name);
for (int i = 0; i < 5; i++) {
map.put(i, 1);
@ -82,7 +82,7 @@ public class RedissonConcurrentMapTest extends BaseConcurrentTest {
final SecureRandom secureRandom = new SecureRandom();
testSingleInstanceConcurrency(100, new RedissonRunnable() {
@Override
public void run(Redisson redisson) {
public void run(RedissonClient redisson) {
ConcurrentMap<Integer, Integer> map = redisson.getMap(name);
Assert.assertNotNull(map.replace(secureRandom.nextInt(5), 2));
}
@ -110,7 +110,7 @@ public class RedissonConcurrentMapTest extends BaseConcurrentTest {
final SecureRandom secureRandom = new SecureRandom();
testMultiInstanceConcurrency(100, new RedissonRunnable() {
@Override
public void run(Redisson redisson) {
public void run(RedissonClient redisson) {
ConcurrentMap<String, String> map = redisson.getMap(name);
map.remove(secureRandom.nextInt(10), 1);
}
@ -127,7 +127,7 @@ public class RedissonConcurrentMapTest extends BaseConcurrentTest {
map.putIfAbsent("1", "0");
testSingleInstanceConcurrency(100, new RedissonRunnable() {
@Override
public void run(Redisson redisson) {
public void run(RedissonClient redisson) {
ConcurrentMap<String, String> map = redisson.getMap(name);
map.putIfAbsent("1", "1");
}
@ -144,7 +144,7 @@ public class RedissonConcurrentMapTest extends BaseConcurrentTest {
final String name = "testMultiPutIfAbsent_SingleInstance";
testSingleInstanceConcurrency(100, new RedissonRunnable() {
@Override
public void run(Redisson redisson) {
public void run(RedissonClient redisson) {
ConcurrentMap<String, String> map = redisson.getMap(name);
map.putIfAbsent("" + Math.random(), "1");
}
@ -158,7 +158,7 @@ public class RedissonConcurrentMapTest extends BaseConcurrentTest {
final String name = "testMultiPutIfAbsent_MultiInstance";
testMultiInstanceConcurrency(100, new RedissonRunnable() {
@Override
public void run(Redisson redisson) {
public void run(RedissonClient redisson) {
ConcurrentMap<String, String> map = redisson.getMap(name);
map.putIfAbsent("" + Math.random(), "1");
}
@ -178,7 +178,7 @@ public class RedissonConcurrentMapTest extends BaseConcurrentTest {
final String name = "testMultiPut_SingleInstance";
testSingleInstanceConcurrency(100, new RedissonRunnable() {
@Override
public void run(Redisson redisson) {
public void run(RedissonClient redisson) {
Map<String, String> map = redisson.getMap(name);
map.put("" + Math.random(), "1");
}
@ -193,7 +193,7 @@ public class RedissonConcurrentMapTest extends BaseConcurrentTest {
final String name = "testMultiPut_MultiInstance";
testMultiInstanceConcurrency(100, new RedissonRunnable() {
@Override
public void run(Redisson redisson) {
public void run(RedissonClient redisson) {
ConcurrentMap<String, String> map = redisson.getMap(name);
map.putIfAbsent("" + Math.random(), "1");
}

@ -15,7 +15,7 @@ public class RedissonCountDownLatchConcurrentTest {
public void testSingleCountDownAwait_SingleInstance() throws InterruptedException {
final int iterations = Runtime.getRuntime().availableProcessors()*3;
Redisson redisson = BaseTest.createInstance();
RedissonClient redisson = BaseTest.createInstance();
final RCountDownLatch latch = redisson.getCountDownLatch("latch");
latch.trySetCount(iterations);

@ -11,6 +11,15 @@ import org.redisson.core.RLock;
public class RedissonLockTest extends BaseConcurrentTest {
@Test
public void testDelete() {
RLock lock = redisson.getLock("lock");
Assert.assertFalse(lock.delete());
lock.lock();
Assert.assertTrue(lock.delete());
}
@Test
public void testForceUnlock() {
RLock lock = redisson.getLock("lock");
@ -50,7 +59,7 @@ public class RedissonLockTest extends BaseConcurrentTest {
final CountDownLatch latch = new CountDownLatch(1);
testSingleInstanceConcurrency(1, new RedissonRunnable() {
@Override
public void run(Redisson redisson) {
public void run(RedissonClient redisson) {
RLock lock = redisson.getLock("lock");
lock.lock();
latch.countDown();
@ -204,7 +213,7 @@ public class RedissonLockTest extends BaseConcurrentTest {
int iterations = 15;
testSingleInstanceConcurrency(iterations, new RedissonRunnable() {
@Override
public void run(Redisson redisson) {
public void run(RedissonClient redisson) {
Lock lock = redisson.getLock("testConcurrency_SingleInstance");
System.out.println("lock1 " + Thread.currentThread().getId());
lock.lock();
@ -227,7 +236,7 @@ public class RedissonLockTest extends BaseConcurrentTest {
testMultiInstanceConcurrency(16, new RedissonRunnable() {
@Override
public void run(Redisson redisson) {
public void run(RedissonClient redisson) {
for (int i = 0; i < iterations; i++) {
redisson.getLock("testConcurrency_MultiInstance1").lock();
try {
@ -251,7 +260,7 @@ public class RedissonLockTest extends BaseConcurrentTest {
testMultiInstanceConcurrency(iterations, new RedissonRunnable() {
@Override
public void run(Redisson redisson) {
public void run(RedissonClient redisson) {
Lock lock = redisson.getLock("testConcurrency_MultiInstance2");
lock.lock();
lockedCounter.incrementAndGet();

@ -2,6 +2,6 @@ package org.redisson;
public interface RedissonRunnable {
void run(Redisson redisson);
void run(RedissonClient redisson);
}

@ -22,7 +22,7 @@ public class RedissonTest extends BaseTest {
Config config = new Config();
config.useSingleServer().setAddress("127.0.0.1:6379");
config.setCodec(new SerializationCodec());
Redisson r = Redisson.create(config);
RedissonClient r = Redisson.create(config);
r.getMap("test").put("1", new Dummy());
}

@ -55,7 +55,7 @@ public class RedissonTopicPatternTest {
public void testUnsubscribe() throws InterruptedException {
final CountDownLatch messageRecieved = new CountDownLatch(1);
Redisson redisson = BaseTest.createInstance();
RedissonClient redisson = BaseTest.createInstance();
RPatternTopic<Message> topic1 = redisson.getPatternTopic("topic1.*");
int listenerId = topic1.addListener(new PatternMessageListener<Message>() {
@Override
@ -86,7 +86,7 @@ public class RedissonTopicPatternTest {
public void testLazyUnsubscribe() throws InterruptedException {
final CountDownLatch messageRecieved = new CountDownLatch(1);
Redisson redisson1 = BaseTest.createInstance();
RedissonClient redisson1 = BaseTest.createInstance();
RPatternTopic<Message> topic1 = redisson1.getPatternTopic("topic.*");
int listenerId = topic1.addListener(new PatternMessageListener<Message>() {
@Override
@ -99,7 +99,7 @@ public class RedissonTopicPatternTest {
topic1.removeListener(listenerId);
Thread.sleep(1000);
Redisson redisson2 = BaseTest.createInstance();
RedissonClient redisson2 = BaseTest.createInstance();
RPatternTopic<Message> topic2 = redisson2.getPatternTopic("topic.*");
topic2.addListener(new PatternMessageListener<Message>() {
@Override
@ -125,7 +125,7 @@ public class RedissonTopicPatternTest {
final CountDownLatch messageRecieved = new CountDownLatch(5);
final CountDownLatch statusRecieved = new CountDownLatch(1);
Redisson redisson1 = BaseTest.createInstance();
RedissonClient redisson1 = BaseTest.createInstance();
RPatternTopic<Message> topic1 = redisson1.getPatternTopic("topic.*");
topic1.addListener(new BasePatternStatusListener() {
@Override
@ -142,7 +142,7 @@ public class RedissonTopicPatternTest {
}
});
Redisson redisson2 = BaseTest.createInstance();
RedissonClient redisson2 = BaseTest.createInstance();
RTopic<Message> topic2 = redisson2.getTopic("topic.t1");
topic2.addListener(new MessageListener<Message>() {
@Override
@ -171,7 +171,7 @@ public class RedissonTopicPatternTest {
@Test
public void testListenerRemove() throws InterruptedException {
Redisson redisson1 = BaseTest.createInstance();
RedissonClient redisson1 = BaseTest.createInstance();
RPatternTopic<Message> topic1 = redisson1.getPatternTopic("topic.*");
final CountDownLatch l = new CountDownLatch(1);
topic1.addListener(new BasePatternStatusListener() {
@ -188,7 +188,7 @@ public class RedissonTopicPatternTest {
}
});
Redisson redisson2 = BaseTest.createInstance();
RedissonClient redisson2 = BaseTest.createInstance();
RTopic<Message> topic2 = redisson2.getTopic("topic.t1");
topic1.removeListener(id);
topic2.publish(new Message("123"));

@ -49,7 +49,7 @@ public class RedissonTopicTest {
@Test
public void testInnerPublish() throws InterruptedException {
Redisson redisson1 = BaseTest.createInstance();
RedissonClient redisson1 = BaseTest.createInstance();
final RTopic<Message> topic1 = redisson1.getTopic("topic1");
final CountDownLatch messageRecieved = new CountDownLatch(3);
int listenerId = topic1.addListener(new MessageListener<Message>() {
@ -60,7 +60,7 @@ public class RedissonTopicTest {
}
});
Redisson redisson2 = BaseTest.createInstance();
RedissonClient redisson2 = BaseTest.createInstance();
final RTopic<Message> topic2 = redisson2.getTopic("topic2");
topic2.addListener(new MessageListener<Message>() {
@Override
@ -83,7 +83,7 @@ public class RedissonTopicTest {
@Test
public void testStatus() throws InterruptedException {
Redisson redisson = BaseTest.createInstance();
RedissonClient redisson = BaseTest.createInstance();
final RTopic<Message> topic1 = redisson.getTopic("topic1");
final CountDownLatch l = new CountDownLatch(1);
int listenerId = topic1.addListener(new BaseStatusListener() {
@ -112,7 +112,7 @@ public class RedissonTopicTest {
public void testUnsubscribe() throws InterruptedException {
final CountDownLatch messageRecieved = new CountDownLatch(1);
Redisson redisson = BaseTest.createInstance();
RedissonClient redisson = BaseTest.createInstance();
RTopic<Message> topic1 = redisson.getTopic("topic1");
int listenerId = topic1.addListener(new MessageListener<Message>() {
@Override
@ -143,7 +143,7 @@ public class RedissonTopicTest {
public void testLazyUnsubscribe() throws InterruptedException {
final CountDownLatch messageRecieved = new CountDownLatch(1);
Redisson redisson1 = BaseTest.createInstance();
RedissonClient redisson1 = BaseTest.createInstance();
RTopic<Message> topic1 = redisson1.getTopic("topic");
int listenerId = topic1.addListener(new MessageListener<Message>() {
@Override
@ -155,7 +155,7 @@ public class RedissonTopicTest {
topic1.removeListener(listenerId);
Thread.sleep(1000);
Redisson redisson2 = BaseTest.createInstance();
RedissonClient redisson2 = BaseTest.createInstance();
RTopic<Message> topic2 = redisson2.getTopic("topic");
topic2.addListener(new MessageListener<Message>() {
@Override
@ -177,7 +177,7 @@ public class RedissonTopicTest {
public void test() throws InterruptedException {
final CountDownLatch messageRecieved = new CountDownLatch(2);
Redisson redisson1 = BaseTest.createInstance();
RedissonClient redisson1 = BaseTest.createInstance();
RTopic<Message> topic1 = redisson1.getTopic("topic");
topic1.addListener(new MessageListener<Message>() {
@Override
@ -187,7 +187,7 @@ public class RedissonTopicTest {
}
});
Redisson redisson2 = BaseTest.createInstance();
RedissonClient redisson2 = BaseTest.createInstance();
RTopic<Message> topic2 = redisson2.getTopic("topic");
topic2.addListener(new MessageListener<Message>() {
@Override
@ -210,7 +210,7 @@ public class RedissonTopicTest {
public void testHeavyLoad() throws InterruptedException {
final CountDownLatch messageRecieved = new CountDownLatch(1000);
Redisson redisson1 = BaseTest.createInstance();
RedissonClient redisson1 = BaseTest.createInstance();
RTopic<Message> topic1 = redisson1.getTopic("topic");
topic1.addListener(new MessageListener<Message>() {
@Override
@ -221,7 +221,7 @@ public class RedissonTopicTest {
}
});
Redisson redisson2 = BaseTest.createInstance();
RedissonClient redisson2 = BaseTest.createInstance();
RTopic<Message> topic2 = redisson2.getTopic("topic");
topic2.addListener(new MessageListener<Message>() {
@Override
@ -246,7 +246,7 @@ public class RedissonTopicTest {
}
@Test
public void testListenerRemove() throws InterruptedException {
Redisson redisson1 = BaseTest.createInstance();
RedissonClient redisson1 = BaseTest.createInstance();
RTopic<Message> topic1 = redisson1.getTopic("topic");
int id = topic1.addListener(new MessageListener<Message>() {
@Override
@ -255,7 +255,7 @@ public class RedissonTopicTest {
}
});
Redisson redisson2 = BaseTest.createInstance();
RedissonClient redisson2 = BaseTest.createInstance();
RTopic<Message> topic2 = redisson2.getTopic("topic");
topic1.removeListener(id);
topic2.publish(new Message("123"));

@ -26,7 +26,7 @@ public class RedissonTwoLockedThread {
@Parameterized.Parameter(0)
public Codec codec;
private Redisson redisson;
private RedissonClient redisson;
@Before
public void before() {

Loading…
Cancel
Save