diff --git a/src/main/java/org/redisson/RedissonCountDownLatch.java b/src/main/java/org/redisson/RedissonCountDownLatch.java index 3ec1005cf..bbb10f203 100644 --- a/src/main/java/org/redisson/RedissonCountDownLatch.java +++ b/src/main/java/org/redisson/RedissonCountDownLatch.java @@ -263,17 +263,17 @@ public class RedissonCountDownLatch extends RedissonObject implements RCountDown } @Override - public void delete() { - connectionManager.write(getName(), new SyncOperation() { + public boolean delete() { + return connectionManager.write(getName(), new SyncOperation() { @Override - public Void execute(RedisConnection conn) { + public Boolean execute(RedisConnection conn) { conn.multi(); conn.del(getName()); conn.publish(getChannelName(), zeroCountMessage); if (conn.exec().size() != 2) { throw new IllegalStateException(); } - return null; + return true; } }); } diff --git a/src/main/java/org/redisson/RedissonLock.java b/src/main/java/org/redisson/RedissonLock.java index 94e456ecf..eed005e6f 100644 --- a/src/main/java/org/redisson/RedissonLock.java +++ b/src/main/java/org/redisson/RedissonLock.java @@ -490,8 +490,9 @@ public class RedissonLock extends RedissonObject implements RLock { } @Override - public void delete() { + public boolean delete() { forceUnlock(); + return true; } } diff --git a/src/main/java/org/redisson/RedissonObject.java b/src/main/java/org/redisson/RedissonObject.java index bfeabdab3..c32be6fd1 100644 --- a/src/main/java/org/redisson/RedissonObject.java +++ b/src/main/java/org/redisson/RedissonObject.java @@ -18,7 +18,8 @@ package org.redisson; import io.netty.util.concurrent.Future; import io.netty.util.concurrent.Promise; -import org.redisson.async.ResultOperation; +import org.redisson.async.AsyncOperation; +import org.redisson.async.OperationListener; import org.redisson.connection.ConnectionManager; import org.redisson.core.RObject; @@ -48,17 +49,22 @@ abstract class RedissonObject implements RObject { return name; } - public void delete() { - delete(getName()); + public boolean delete() { + return connectionManager.get(deleteAsync()); } - void delete(String name) { - connectionManager.write(getName(), new ResultOperation() { + public Future deleteAsync() { + return connectionManager.writeAsync(getName(), new AsyncOperation() { @Override - protected Future execute(RedisAsyncConnection async) { - return async.del(getName()); + public void execute(final Promise promise, RedisAsyncConnection async) { + async.del(getName()).addListener(new OperationListener(promise, async, this) { + @Override + public void onOperationComplete(Future future) throws Exception { + promise.setSuccess(((Number) future.get()).byteValue() == 1); + } + }); } }); } - + } diff --git a/src/main/java/org/redisson/RedissonTopic.java b/src/main/java/org/redisson/RedissonTopic.java index b9e384c21..4e4280985 100644 --- a/src/main/java/org/redisson/RedissonTopic.java +++ b/src/main/java/org/redisson/RedissonTopic.java @@ -92,8 +92,8 @@ public class RedissonTopic extends RedissonObject implements RTopic { } @Override - public void delete() { - // nothing to delete + public boolean delete() { + throw new UnsupportedOperationException(); } } diff --git a/src/main/java/org/redisson/core/RObject.java b/src/main/java/org/redisson/core/RObject.java index c8915b3c5..01bd759bc 100644 --- a/src/main/java/org/redisson/core/RObject.java +++ b/src/main/java/org/redisson/core/RObject.java @@ -15,6 +15,8 @@ */ package org.redisson.core; +import io.netty.util.concurrent.Future; + /** * Base interface for all Redisson objects * @@ -33,6 +35,8 @@ public interface RObject { /** * Deletes the object */ - void delete(); + boolean delete(); + + Future deleteAsync(); } diff --git a/src/test/java/org/redisson/RedissonBucketTest.java b/src/test/java/org/redisson/RedissonBucketTest.java index d05d0c15e..603c833e7 100755 --- a/src/test/java/org/redisson/RedissonBucketTest.java +++ b/src/test/java/org/redisson/RedissonBucketTest.java @@ -25,8 +25,9 @@ public class RedissonBucketTest extends BaseTest { String value = "somevalue"; bucket.set(value); Assert.assertEquals(value, bucket.get()); - bucket.delete(); + Assert.assertTrue(bucket.delete()); Assert.assertNull(bucket.get()); + Assert.assertFalse(bucket.delete()); }