From 8a0d083fd9a33d39e23ab21567ff7f792c58fae7 Mon Sep 17 00:00:00 2001 From: Nikita Date: Tue, 27 Mar 2018 13:30:46 +0300 Subject: [PATCH 01/15] [maven-release-plugin] prepare release redisson-2.11.4 --- pom.xml | 4 ++-- redisson-all/pom.xml | 4 ++-- redisson-tomcat/pom.xml | 2 +- redisson-tomcat/redisson-tomcat-6/pom.xml | 2 +- redisson-tomcat/redisson-tomcat-7/pom.xml | 2 +- redisson-tomcat/redisson-tomcat-8/pom.xml | 2 +- redisson-tomcat/redisson-tomcat-9/pom.xml | 2 +- redisson/pom.xml | 2 +- 8 files changed, 10 insertions(+), 10 deletions(-) diff --git a/pom.xml b/pom.xml index 07b0a7a84..6e690466b 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ org.redisson redisson-parent - 2.11.4-SNAPSHOT + 2.11.4 pom Redisson @@ -27,7 +27,7 @@ scm:git:git@github.com:redisson/redisson.git scm:git:git@github.com:redisson/redisson.git scm:git:git@github.com:redisson/redisson.git - HEAD + redisson-2.11.4 diff --git a/redisson-all/pom.xml b/redisson-all/pom.xml index c4c3a9827..70712481c 100644 --- a/redisson-all/pom.xml +++ b/redisson-all/pom.xml @@ -4,7 +4,7 @@ org.redisson redisson-parent - 2.11.4-SNAPSHOT + 2.11.4 ../ @@ -26,7 +26,7 @@ scm:git:git@github.com:mrniko/redisson.git scm:git:git@github.com:mrniko/redisson.git scm:git:git@github.com:mrniko/redisson.git - redisson-parent-0.9.0 + redisson-2.11.4 diff --git a/redisson-tomcat/pom.xml b/redisson-tomcat/pom.xml index d4044e948..458c16f09 100644 --- a/redisson-tomcat/pom.xml +++ b/redisson-tomcat/pom.xml @@ -4,7 +4,7 @@ org.redisson redisson-parent - 2.11.4-SNAPSHOT + 2.11.4 ../ diff --git a/redisson-tomcat/redisson-tomcat-6/pom.xml b/redisson-tomcat/redisson-tomcat-6/pom.xml index e20a07ce4..d7fae32fe 100644 --- a/redisson-tomcat/redisson-tomcat-6/pom.xml +++ b/redisson-tomcat/redisson-tomcat-6/pom.xml @@ -4,7 +4,7 @@ org.redisson redisson-tomcat - 2.11.4-SNAPSHOT + 2.11.4 ../ diff --git a/redisson-tomcat/redisson-tomcat-7/pom.xml b/redisson-tomcat/redisson-tomcat-7/pom.xml index 45269cca4..c129d4956 100644 --- a/redisson-tomcat/redisson-tomcat-7/pom.xml +++ b/redisson-tomcat/redisson-tomcat-7/pom.xml @@ -4,7 +4,7 @@ org.redisson redisson-tomcat - 2.11.4-SNAPSHOT + 2.11.4 ../ diff --git a/redisson-tomcat/redisson-tomcat-8/pom.xml b/redisson-tomcat/redisson-tomcat-8/pom.xml index a4e41bf87..1dcfcb463 100644 --- a/redisson-tomcat/redisson-tomcat-8/pom.xml +++ b/redisson-tomcat/redisson-tomcat-8/pom.xml @@ -4,7 +4,7 @@ org.redisson redisson-tomcat - 2.11.4-SNAPSHOT + 2.11.4 ../ diff --git a/redisson-tomcat/redisson-tomcat-9/pom.xml b/redisson-tomcat/redisson-tomcat-9/pom.xml index c54a39e5f..c93384ce4 100644 --- a/redisson-tomcat/redisson-tomcat-9/pom.xml +++ b/redisson-tomcat/redisson-tomcat-9/pom.xml @@ -4,7 +4,7 @@ org.redisson redisson-tomcat - 2.11.4-SNAPSHOT + 2.11.4 ../ diff --git a/redisson/pom.xml b/redisson/pom.xml index 8c46f40d8..0b597ab36 100644 --- a/redisson/pom.xml +++ b/redisson/pom.xml @@ -4,7 +4,7 @@ org.redisson redisson-parent - 2.11.4-SNAPSHOT + 2.11.4 ../ From d9e57be29ebad43967cee66fbb95803a60dd4b35 Mon Sep 17 00:00:00 2001 From: Nikita Date: Tue, 27 Mar 2018 13:30:59 +0300 Subject: [PATCH 02/15] [maven-release-plugin] prepare for next development iteration --- pom.xml | 4 ++-- redisson-all/pom.xml | 4 ++-- redisson-tomcat/pom.xml | 2 +- redisson-tomcat/redisson-tomcat-6/pom.xml | 2 +- redisson-tomcat/redisson-tomcat-7/pom.xml | 2 +- redisson-tomcat/redisson-tomcat-8/pom.xml | 2 +- redisson-tomcat/redisson-tomcat-9/pom.xml | 2 +- redisson/pom.xml | 2 +- 8 files changed, 10 insertions(+), 10 deletions(-) diff --git a/pom.xml b/pom.xml index 6e690466b..5009e46bf 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ org.redisson redisson-parent - 2.11.4 + 2.11.5-SNAPSHOT pom Redisson @@ -27,7 +27,7 @@ scm:git:git@github.com:redisson/redisson.git scm:git:git@github.com:redisson/redisson.git scm:git:git@github.com:redisson/redisson.git - redisson-2.11.4 + HEAD diff --git a/redisson-all/pom.xml b/redisson-all/pom.xml index 70712481c..b4eb0e2ca 100644 --- a/redisson-all/pom.xml +++ b/redisson-all/pom.xml @@ -4,7 +4,7 @@ org.redisson redisson-parent - 2.11.4 + 2.11.5-SNAPSHOT ../ @@ -26,7 +26,7 @@ scm:git:git@github.com:mrniko/redisson.git scm:git:git@github.com:mrniko/redisson.git scm:git:git@github.com:mrniko/redisson.git - redisson-2.11.4 + redisson-parent-0.9.0 diff --git a/redisson-tomcat/pom.xml b/redisson-tomcat/pom.xml index 458c16f09..02e3be46c 100644 --- a/redisson-tomcat/pom.xml +++ b/redisson-tomcat/pom.xml @@ -4,7 +4,7 @@ org.redisson redisson-parent - 2.11.4 + 2.11.5-SNAPSHOT ../ diff --git a/redisson-tomcat/redisson-tomcat-6/pom.xml b/redisson-tomcat/redisson-tomcat-6/pom.xml index d7fae32fe..ce757faae 100644 --- a/redisson-tomcat/redisson-tomcat-6/pom.xml +++ b/redisson-tomcat/redisson-tomcat-6/pom.xml @@ -4,7 +4,7 @@ org.redisson redisson-tomcat - 2.11.4 + 2.11.5-SNAPSHOT ../ diff --git a/redisson-tomcat/redisson-tomcat-7/pom.xml b/redisson-tomcat/redisson-tomcat-7/pom.xml index c129d4956..be135812c 100644 --- a/redisson-tomcat/redisson-tomcat-7/pom.xml +++ b/redisson-tomcat/redisson-tomcat-7/pom.xml @@ -4,7 +4,7 @@ org.redisson redisson-tomcat - 2.11.4 + 2.11.5-SNAPSHOT ../ diff --git a/redisson-tomcat/redisson-tomcat-8/pom.xml b/redisson-tomcat/redisson-tomcat-8/pom.xml index 1dcfcb463..adc865da2 100644 --- a/redisson-tomcat/redisson-tomcat-8/pom.xml +++ b/redisson-tomcat/redisson-tomcat-8/pom.xml @@ -4,7 +4,7 @@ org.redisson redisson-tomcat - 2.11.4 + 2.11.5-SNAPSHOT ../ diff --git a/redisson-tomcat/redisson-tomcat-9/pom.xml b/redisson-tomcat/redisson-tomcat-9/pom.xml index c93384ce4..d4877f5bd 100644 --- a/redisson-tomcat/redisson-tomcat-9/pom.xml +++ b/redisson-tomcat/redisson-tomcat-9/pom.xml @@ -4,7 +4,7 @@ org.redisson redisson-tomcat - 2.11.4 + 2.11.5-SNAPSHOT ../ diff --git a/redisson/pom.xml b/redisson/pom.xml index 0b597ab36..022b9f919 100644 --- a/redisson/pom.xml +++ b/redisson/pom.xml @@ -4,7 +4,7 @@ org.redisson redisson-parent - 2.11.4 + 2.11.5-SNAPSHOT ../ From e351e9f844818a81c60c98822dde3fda42f202de Mon Sep 17 00:00:00 2001 From: Nikita Koksharov Date: Tue, 27 Mar 2018 14:21:30 +0300 Subject: [PATCH 03/15] Update CHANGELOG.md --- CHANGELOG.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 741a3e05d..5e5e15286 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,17 @@ Redisson Releases History Try __[Redisson PRO](https://redisson.pro)__ version. +### 27-Mar-2018 - versions 2.11.4 and 3.6.4 released + +Feature - `RSet.getLock` method added +Fixed - race condition with load balancer node selection +Fixed - `READONLY can't write against a read only slave` error during failover +Fixed - NPE during failover in Sentinel mode +Fixed - `JCache.getAll` causes io.netty.util.IllegalReferenceCountException +Fixed - NPE in CommandDecoder handler while using RBatch object +Fixed - `RSortedSet` object tries to compare wrong types +Fixed - `ClassCastException` in `RListMultimapCache.removeAll` method + ### 14-Mar-2018 - versions 2.11.3 and 3.6.3 released Feature - DNS monitoring for Sentinel nodes From 6196f9993cc5d1ad60d325e1c6664b0027fdc487 Mon Sep 17 00:00:00 2001 From: Nikita Koksharov Date: Tue, 27 Mar 2018 14:28:41 +0300 Subject: [PATCH 04/15] Update README.md --- README.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index ba2d7e9ac..fcd45c55e 100644 --- a/README.md +++ b/README.md @@ -6,8 +6,8 @@ Based on high-performance async and lock-free Java Redis client and [Netty](http | Stable
Release Version | Release Date | JDK Version
compatibility | `CompletionStage`
support | `ProjectReactor` version
compatibility | | ------------- | ------------- | ------------| -----------| -----------| -| 3.6.3 | 14.03.2018 | 1.8, 1.9+ | Yes | 3.1.x | -| 2.11.3 | 14.03.2018 | 1.6, 1.7, 1.8, 1.9 and Android | No | 2.0.8 | +| 3.6.4 | 27.03.2018 | 1.8, 1.9+ | Yes | 3.1.x | +| 2.11.4 | 27.03.2018 | 1.6, 1.7, 1.8, 1.9 and Android | No | 2.0.8 | Features @@ -95,23 +95,23 @@ Quick start org.redisson redisson - 3.6.3 + 3.6.4 org.redisson redisson - 2.11.3 + 2.11.4 #### Gradle // JDK 1.8+ compatible - compile 'org.redisson:redisson:3.6.3' + compile 'org.redisson:redisson:3.6.4' // JDK 1.6+ compatible - compile 'org.redisson:redisson:2.11.3' + compile 'org.redisson:redisson:2.11.4' #### Java @@ -136,11 +136,11 @@ RExecutorService executor = redisson.getExecutorService("myExecutorService"); Downloads =============================== -[Redisson 3.6.3](https://repository.sonatype.org/service/local/artifact/maven/redirect?r=central-proxy&g=org.redisson&a=redisson&v=3.6.3&e=jar), -[Redisson node 3.6.3](https://repository.sonatype.org/service/local/artifact/maven/redirect?r=central-proxy&g=org.redisson&a=redisson-all&v=3.6.3&e=jar) +[Redisson 3.6.4](https://repository.sonatype.org/service/local/artifact/maven/redirect?r=central-proxy&g=org.redisson&a=redisson&v=3.6.4&e=jar), +[Redisson node 3.6.4](https://repository.sonatype.org/service/local/artifact/maven/redirect?r=central-proxy&g=org.redisson&a=redisson-all&v=3.6.4&e=jar) -[Redisson 2.11.3](https://repository.sonatype.org/service/local/artifact/maven/redirect?r=central-proxy&g=org.redisson&a=redisson&v=2.11.3&e=jar), -[Redisson node 2.11.3](https://repository.sonatype.org/service/local/artifact/maven/redirect?r=central-proxy&g=org.redisson&a=redisson-all&v=2.11.3&e=jar) +[Redisson 2.11.4](https://repository.sonatype.org/service/local/artifact/maven/redirect?r=central-proxy&g=org.redisson&a=redisson&v=2.11.4&e=jar), +[Redisson node 2.11.4](https://repository.sonatype.org/service/local/artifact/maven/redirect?r=central-proxy&g=org.redisson&a=redisson-all&v=2.11.4&e=jar) ### Supported by From 1b4474f9433f1758f327066fecd8d9c5f838a87b Mon Sep 17 00:00:00 2001 From: Rui Gu Date: Thu, 29 Mar 2018 00:40:29 +0100 Subject: [PATCH 05/15] added FAQs link --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index fcd45c55e..4beeb9f5a 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ Redisson: Redis based In-Memory Data Grid for Java. ==== -[Quick start](https://github.com/redisson/redisson#quick-start) | [Documentation](https://github.com/redisson/redisson/wiki) | [Javadocs](http://www.javadoc.io/doc/org.redisson/redisson/3.5.7) | [Changelog](https://github.com/redisson/redisson/blob/master/CHANGELOG.md) | [Code examples](https://github.com/redisson/redisson-examples) | [Support chat](https://gitter.im/mrniko/redisson) | **[Redisson PRO](https://redisson.pro)** +[Quick start](https://github.com/redisson/redisson#quick-start) | [Documentation](https://github.com/redisson/redisson/wiki) | [Javadocs](http://www.javadoc.io/doc/org.redisson/redisson/3.5.7) | [Changelog](https://github.com/redisson/redisson/blob/master/CHANGELOG.md) | [Code examples](https://github.com/redisson/redisson-examples) | [FAQs](https://github.com/redisson/redisson/wiki/16.-FAQ) | [Support chat](https://gitter.im/mrniko/redisson) | **[Redisson PRO](https://redisson.pro)** Based on high-performance async and lock-free Java Redis client and [Netty](http://netty.io) framework. From dece260e2b777678e0a2a5945866df9b1a2fe275 Mon Sep 17 00:00:00 2001 From: Nikita Date: Thu, 29 Mar 2018 11:37:11 +0300 Subject: [PATCH 06/15] Fixed - hdel wasn't used during remote service task removal. #1363 --- redisson/src/main/java/org/redisson/RedissonRemoteService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/redisson/src/main/java/org/redisson/RedissonRemoteService.java b/redisson/src/main/java/org/redisson/RedissonRemoteService.java index bac760f29..807d0999b 100644 --- a/redisson/src/main/java/org/redisson/RedissonRemoteService.java +++ b/redisson/src/main/java/org/redisson/RedissonRemoteService.java @@ -92,7 +92,7 @@ public class RedissonRemoteService extends BaseRemoteService implements RRemoteS protected RFuture removeAsync(String requestQueueName, RequestId taskId) { return commandExecutor.evalWriteAsync(name, LongCodec.INSTANCE, RedisCommands.EVAL_BOOLEAN, "redis.call('lrem', KEYS[1], 1, ARGV[1]); " - + "redis.call('hset', KEYS[2], ARGV[1]);" + + "redis.call('hdel', KEYS[2], ARGV[1]);" + "return 1;", Arrays.asList(requestQueueName, requestQueueName + ":tasks"), taskId.toString()); From 601ba4d16fd5f7b6510e788e927cb1415e86a0f6 Mon Sep 17 00:00:00 2001 From: Nikita Date: Thu, 29 Mar 2018 12:19:28 +0300 Subject: [PATCH 07/15] Fixed - RObject.migrate method. --- .../java/org/redisson/RedissonObject.java | 10 +++---- .../main/java/org/redisson/api/RObject.java | 3 +- .../java/org/redisson/api/RObjectAsync.java | 3 +- .../java/org/redisson/RedissonBucketTest.java | 30 +++++++++++++++++++ 4 files changed, 39 insertions(+), 7 deletions(-) diff --git a/redisson/src/main/java/org/redisson/RedissonObject.java b/redisson/src/main/java/org/redisson/RedissonObject.java index c999e032e..39bf5a541 100644 --- a/redisson/src/main/java/org/redisson/RedissonObject.java +++ b/redisson/src/main/java/org/redisson/RedissonObject.java @@ -94,15 +94,15 @@ public abstract class RedissonObject implements RObject { } @Override - public void migrate(String host, int port, int database) { - get(migrateAsync(host, port, database)); + public void migrate(String host, int port, int database, long timeout) { + get(migrateAsync(host, port, database, timeout)); } @Override - public RFuture migrateAsync(String host, int port, int database) { - return commandExecutor.writeAsync(getName(), RedisCommands.MIGRATE, host, port, getName(), database); + public RFuture migrateAsync(String host, int port, int database, long timeout) { + return commandExecutor.writeAsync(getName(), RedisCommands.MIGRATE, host, port, getName(), database, timeout); } - + @Override public boolean move(int database) { return get(moveAsync(database)); diff --git a/redisson/src/main/java/org/redisson/api/RObject.java b/redisson/src/main/java/org/redisson/api/RObject.java index a56d5ef63..12f265630 100644 --- a/redisson/src/main/java/org/redisson/api/RObject.java +++ b/redisson/src/main/java/org/redisson/api/RObject.java @@ -38,8 +38,9 @@ public interface RObject extends RObjectAsync { * @param host - destination host * @param port - destination port * @param database - destination database + * @param timeout - maximum idle time in any moment of the communication with the destination instance in milliseconds */ - void migrate(String host, int port, int database); + void migrate(String host, int port, int database, long timeout); /** * Move object to another database diff --git a/redisson/src/main/java/org/redisson/api/RObjectAsync.java b/redisson/src/main/java/org/redisson/api/RObjectAsync.java index 3c5cdae3f..072f7573d 100644 --- a/redisson/src/main/java/org/redisson/api/RObjectAsync.java +++ b/redisson/src/main/java/org/redisson/api/RObjectAsync.java @@ -37,9 +37,10 @@ public interface RObjectAsync { * @param host - destination host * @param port - destination port * @param database - destination database + * @param timeout - maximum idle time in any moment of the communication with the destination instance in milliseconds * @return void */ - RFuture migrateAsync(String host, int port, int database); + RFuture migrateAsync(String host, int port, int database, long timeout); /** * Move object to another database in async mode diff --git a/redisson/src/test/java/org/redisson/RedissonBucketTest.java b/redisson/src/test/java/org/redisson/RedissonBucketTest.java index 55c087330..56c0cf925 100755 --- a/redisson/src/test/java/org/redisson/RedissonBucketTest.java +++ b/redisson/src/test/java/org/redisson/RedissonBucketTest.java @@ -2,13 +2,18 @@ package org.redisson; import static org.assertj.core.api.Assertions.assertThat; +import java.io.IOException; import java.util.Arrays; import java.util.List; import java.util.concurrent.TimeUnit; import org.junit.Assert; import org.junit.Test; +import org.redisson.RedisRunner.FailedToStartRedisException; +import org.redisson.RedisRunner.RedisProcess; import org.redisson.api.RBucket; +import org.redisson.api.RedissonClient; +import org.redisson.config.Config; public class RedissonBucketTest extends BaseTest { @@ -112,6 +117,31 @@ public class RedissonBucketTest extends BaseTest { Assert.assertEquals("someValue", newBucket.get()); Assert.assertFalse(newBucket.renamenx("test2")); } + + @Test + public void testMigrate() throws FailedToStartRedisException, IOException, InterruptedException { + RedisProcess runner = new RedisRunner() + .appendonly(true) + .randomDir() + .randomPort() + .run(); + + RBucket bucket = redisson.getBucket("test"); + bucket.set("someValue"); + + bucket.migrate(runner.getRedisServerBindAddress(), runner.getRedisServerPort(), 0, 5000); + + Config config = new Config(); + config.useSingleServer().setAddress(runner.getRedisServerAddressAndPort()); + RedissonClient r = Redisson.create(config); + + RBucket bucket2 = r.getBucket("test"); + assertThat(bucket2.get()).isEqualTo("someValue"); + assertThat(bucket.isExists()).isFalse(); + + runner.stop(); + } + @Test public void testRename() { From b5688fc07ea3d277e17ec386f983040b92353518 Mon Sep 17 00:00:00 2001 From: Nikita Date: Thu, 29 Mar 2018 12:22:25 +0300 Subject: [PATCH 08/15] RObject.copy method added --- .../java/org/redisson/RedissonObject.java | 10 ++++++++ .../main/java/org/redisson/api/RObject.java | 12 +++++++++- .../java/org/redisson/api/RObjectAsync.java | 14 ++++++++++- .../java/org/redisson/RedissonBucketTest.java | 23 +++++++++++++++++++ 4 files changed, 57 insertions(+), 2 deletions(-) diff --git a/redisson/src/main/java/org/redisson/RedissonObject.java b/redisson/src/main/java/org/redisson/RedissonObject.java index 39bf5a541..927624228 100644 --- a/redisson/src/main/java/org/redisson/RedissonObject.java +++ b/redisson/src/main/java/org/redisson/RedissonObject.java @@ -103,6 +103,16 @@ public abstract class RedissonObject implements RObject { return commandExecutor.writeAsync(getName(), RedisCommands.MIGRATE, host, port, getName(), database, timeout); } + @Override + public void copy(String host, int port, int database, long timeout) { + get(copyAsync(host, port, database, timeout)); + } + + @Override + public RFuture copyAsync(String host, int port, int database, long timeout) { + return commandExecutor.writeAsync(getName(), RedisCommands.MIGRATE, host, port, getName(), database, timeout, "COPY"); + } + @Override public boolean move(int database) { return get(moveAsync(database)); diff --git a/redisson/src/main/java/org/redisson/api/RObject.java b/redisson/src/main/java/org/redisson/api/RObject.java index 12f265630..760ffd2f0 100644 --- a/redisson/src/main/java/org/redisson/api/RObject.java +++ b/redisson/src/main/java/org/redisson/api/RObject.java @@ -33,7 +33,7 @@ public interface RObject extends RObjectAsync { boolean touch(); /** - * Transfer an object from source Redis instance to destination Redis instance + * Copy object from source Redis instance to destination Redis instance * * @param host - destination host * @param port - destination port @@ -42,6 +42,16 @@ public interface RObject extends RObjectAsync { */ void migrate(String host, int port, int database, long timeout); + /** + * Copy object from source Redis instance to destination Redis instance + * + * @param host - destination host + * @param port - destination port + * @param database - destination database + * @param timeout - maximum idle time in any moment of the communication with the destination instance in milliseconds + */ + void copy(String host, int port, int database, long timeout); + /** * Move object to another database * diff --git a/redisson/src/main/java/org/redisson/api/RObjectAsync.java b/redisson/src/main/java/org/redisson/api/RObjectAsync.java index 072f7573d..11e44eedd 100644 --- a/redisson/src/main/java/org/redisson/api/RObjectAsync.java +++ b/redisson/src/main/java/org/redisson/api/RObjectAsync.java @@ -31,7 +31,7 @@ public interface RObjectAsync { RFuture touchAsync(); /** - * Transfer an object from source Redis instance to destination Redis instance + * Transfer object from source Redis instance to destination Redis instance * in async mode * * @param host - destination host @@ -42,6 +42,18 @@ public interface RObjectAsync { */ RFuture migrateAsync(String host, int port, int database, long timeout); + /** + * Copy object from source Redis instance to destination Redis instance + * in async mode + * + * @param host - destination host + * @param port - destination port + * @param database - destination database + * @param timeout - maximum idle time in any moment of the communication with the destination instance in milliseconds + * @return void + */ + RFuture copyAsync(String host, int port, int database, long timeout); + /** * Move object to another database in async mode * diff --git a/redisson/src/test/java/org/redisson/RedissonBucketTest.java b/redisson/src/test/java/org/redisson/RedissonBucketTest.java index 56c0cf925..f1e2a2bef 100755 --- a/redisson/src/test/java/org/redisson/RedissonBucketTest.java +++ b/redisson/src/test/java/org/redisson/RedissonBucketTest.java @@ -142,6 +142,29 @@ public class RedissonBucketTest extends BaseTest { runner.stop(); } + @Test + public void testCopy() throws FailedToStartRedisException, IOException, InterruptedException { + RedisProcess runner = new RedisRunner() + .appendonly(true) + .randomDir() + .randomPort() + .run(); + + RBucket bucket = redisson.getBucket("test"); + bucket.set("someValue"); + + bucket.copy(runner.getRedisServerBindAddress(), runner.getRedisServerPort(), 0, 5000); + + Config config = new Config(); + config.useSingleServer().setAddress(runner.getRedisServerAddressAndPort()); + RedissonClient r = Redisson.create(config); + + RBucket bucket2 = r.getBucket("test"); + assertThat(bucket2.get()).isEqualTo("someValue"); + assertThat(bucket.get()).isEqualTo("someValue"); + + runner.stop(); + } @Test public void testRename() { From 4e900cb412fcc9757ed08826855639e38c8b9fb7 Mon Sep 17 00:00:00 2001 From: Nikita Date: Thu, 29 Mar 2018 12:32:23 +0300 Subject: [PATCH 09/15] RKeys.copy method added --- .../main/java/org/redisson/RedissonKeys.java | 18 ++++++++++++++---- .../src/main/java/org/redisson/api/RKeys.java | 16 ++++++++++++++-- .../main/java/org/redisson/api/RKeysAsync.java | 18 ++++++++++++++++-- 3 files changed, 44 insertions(+), 8 deletions(-) diff --git a/redisson/src/main/java/org/redisson/RedissonKeys.java b/redisson/src/main/java/org/redisson/RedissonKeys.java index 662599b3d..36f588d4b 100644 --- a/redisson/src/main/java/org/redisson/RedissonKeys.java +++ b/redisson/src/main/java/org/redisson/RedissonKeys.java @@ -485,15 +485,25 @@ public class RedissonKeys implements RKeys { } @Override - public void migrate(String name, String host, int port, int database) { - commandExecutor.get(migrateAsync(name, host, port, database)); + public void migrate(String name, String host, int port, int database, long timeout) { + commandExecutor.get(migrateAsync(name, host, port, database, timeout)); } @Override - public RFuture migrateAsync(String name, String host, int port, int database) { - return commandExecutor.writeAsync(name, RedisCommands.MIGRATE, host, port, name, database); + public RFuture migrateAsync(String name, String host, int port, int database, long timeout) { + return commandExecutor.writeAsync(name, RedisCommands.MIGRATE, host, port, name, database, timeout); } + @Override + public void copy(String name, String host, int port, int database, long timeout) { + commandExecutor.get(copyAsync(name, host, port, database, timeout)); + } + + @Override + public RFuture copyAsync(String name, String host, int port, int database, long timeout) { + return commandExecutor.writeAsync(name, RedisCommands.MIGRATE, host, port, name, database, timeout, "COPY"); + } + @Override public boolean move(String name, int database) { return commandExecutor.get(moveAsync(name, database)); diff --git a/redisson/src/main/java/org/redisson/api/RKeys.java b/redisson/src/main/java/org/redisson/api/RKeys.java index 8836c1e22..b9ae272b0 100644 --- a/redisson/src/main/java/org/redisson/api/RKeys.java +++ b/redisson/src/main/java/org/redisson/api/RKeys.java @@ -35,14 +35,26 @@ public interface RKeys extends RKeysAsync { boolean move(String name, int database); /** - * Transfer an object from source Redis instance to destination Redis instance + * Transfer object from source Redis instance to destination Redis instance * * @param name of object * @param host - destination host * @param port - destination port * @param database - destination database + * @param timeout - maximum idle time in any moment of the communication with the destination instance in milliseconds */ - void migrate(String name, String host, int port, int database); + void migrate(String name, String host, int port, int database, long timeout); + + /** + * Copy object from source Redis instance to destination Redis instance + * + * @param name of object + * @param host - destination host + * @param port - destination port + * @param database - destination database + * @param timeout - maximum idle time in any moment of the communication with the destination instance in milliseconds + */ + void copy(String name, String host, int port, int database, long timeout); /** * Set a timeout for object. After the timeout has expired, diff --git a/redisson/src/main/java/org/redisson/api/RKeysAsync.java b/redisson/src/main/java/org/redisson/api/RKeysAsync.java index 826e2bd90..463e3e474 100644 --- a/redisson/src/main/java/org/redisson/api/RKeysAsync.java +++ b/redisson/src/main/java/org/redisson/api/RKeysAsync.java @@ -35,15 +35,29 @@ public interface RKeysAsync { RFuture moveAsync(String name, int database); /** - * Transfer an object from source Redis instance to destination Redis instance + * Transfer object from source Redis instance to destination Redis instance * * @param name of object * @param host - destination host * @param port - destination port * @param database - destination database + * @param timeout - maximum idle time in any moment of the communication with the destination instance in milliseconds * @return void */ - RFuture migrateAsync(String name, String host, int port, int database); + RFuture migrateAsync(String name, String host, int port, int database, long timeout); + + /** + * Copy object from source Redis instance to destination Redis instance + * in async mode + * + * @param name of object + * @param host - destination host + * @param port - destination port + * @param database - destination database + * @param timeout - maximum idle time in any moment of the communication with the destination instance in milliseconds + * @return void + */ + RFuture copyAsync(String name, String host, int port, int database, long timeout); /** * Set a timeout for object. After the timeout has expired, From bcdc19d7dbbdfa9ff52c6c7a045dad0a862e473f Mon Sep 17 00:00:00 2001 From: Nikita Date: Thu, 29 Mar 2018 15:54:41 +0300 Subject: [PATCH 10/15] Fixed - an error shouldn't appear if Redisson successfully got the information at least from one sentinel/cluster server. #1366 --- .../java/org/redisson/cluster/ClusterConnectionManager.java | 4 +++- .../org/redisson/connection/SentinelConnectionManager.java | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/redisson/src/main/java/org/redisson/cluster/ClusterConnectionManager.java b/redisson/src/main/java/org/redisson/cluster/ClusterConnectionManager.java index a8d260a80..b06198ece 100644 --- a/redisson/src/main/java/org/redisson/cluster/ClusterConnectionManager.java +++ b/redisson/src/main/java/org/redisson/cluster/ClusterConnectionManager.java @@ -347,7 +347,9 @@ public class ClusterConnectionManager extends MasterSlaveConnectionManager { private void checkClusterState(final ClusterServersConfig cfg, final Iterator iterator, final AtomicReference lastException) { if (!iterator.hasNext()) { - log.error("Can't update cluster state", lastException.get()); + if (lastException.get() != null) { + log.error("Can't update cluster state", lastException.get()); + } scheduleClusterChangeCheck(cfg, null); return; } diff --git a/redisson/src/main/java/org/redisson/connection/SentinelConnectionManager.java b/redisson/src/main/java/org/redisson/connection/SentinelConnectionManager.java index f0c37fe66..20c140115 100755 --- a/redisson/src/main/java/org/redisson/connection/SentinelConnectionManager.java +++ b/redisson/src/main/java/org/redisson/connection/SentinelConnectionManager.java @@ -248,7 +248,9 @@ public class SentinelConnectionManager extends MasterSlaveConnectionManager { private void checkState(final SentinelServersConfig cfg, final Iterator iterator, final AtomicReference lastException) { if (!iterator.hasNext()) { - log.error("Can't update cluster state", lastException.get()); + if (lastException.get() != null) { + log.error("Can't update cluster state", lastException.get()); + } scheduleChangeCheck(cfg, null); return; } From 1897135ac5e9ac9dc47e8459450fe8cad8f9be74 Mon Sep 17 00:00:00 2001 From: Rui Gu Date: Wed, 4 Apr 2018 11:45:43 +0100 Subject: [PATCH 11/15] Added FAQs section --- README.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/README.md b/README.md index 4beeb9f5a..4fed8f2e3 100644 --- a/README.md +++ b/README.md @@ -133,6 +133,24 @@ RExecutorService executor = redisson.getExecutorService("myExecutorService"); ``` +FAQs +=============================== +[Q: I saw a RedisTimeOutException, What does it mean? What shall I do? Can Redisson Team fix it?](https://github.com/redisson/redisson/wiki/16.-FAQ#q-i-saw-a-redistimeoutexception-what-does-it-mean-what-shall-i-do-can-redisson-team-fix-it) + +[Q: I saw a com.fasterxml.jackson.databind.JsonMappingException during deserialization process, can you fix it?](https://github.com/redisson/redisson/wiki/16.-FAQ#q-i-saw-a-comfasterxmljacksondatabindjsonmappingexception-during-deserialization-process-can-you-fix-it) + +[Q: There were too many quotes appeared in the redis-cli console output, how do I fix it?](https://github.com/redisson/redisson/wiki/16.-FAQ#q-there-were-too-many-quotes-appeared-in-the-redis-cli-console-output-how-do-i-fix-it) + +[Q: When do I need to shut down a Redisson instance, at the end of each request or the end of the life of a thread?](https://github.com/redisson/redisson/wiki/16.-FAQ#q-when-do-i-need-to-shut-down-a-redisson-instance-at-the-end-of-each-request-or-the-end-of-the-life-of-a-thread) + +[Q: In MapCache/SetCache/SpringCache/JCache, I have set an expiry time to an entry, why is it still there when it should be disappeared?](https://github.com/redisson/redisson/wiki/16.-FAQ#q-in-mapcachesetcachespringcachejcache-i-have-set-an-expiry-time-to-an-entry-why-is-it-still-there-when-it-should-be-disappeared) + +[Q: How can I perform Pipelining/Transaction through Redisson?](https://github.com/redisson/redisson/wiki/16.-FAQ#q-how-can-i-perform-pipeliningtransaction-through-redisson) + +[Q: Is Redisson thread safe? Can I share an instance of it between different threads?](https://github.com/redisson/redisson/wiki/16.-FAQ#q-is-redisson-thread-safe-can-i-share-an-instance-of-it-between-different-threads) + +[Q: Can I use different encoder/decoders for different tasks?](https://github.com/redisson/redisson/wiki/16.-FAQ#q-can-i-use-different-encoderdecoders-for-different-tasks) + Downloads =============================== From 096155dff628c84fe04cb86bdac1623202704201 Mon Sep 17 00:00:00 2001 From: Nikita Date: Wed, 4 Apr 2018 17:01:24 +0300 Subject: [PATCH 12/15] RSetCache.getLock method added --- .../java/org/redisson/RedissonSetCache.java | 17 +++++++++++++++++ .../main/java/org/redisson/api/RSetCache.java | 8 ++++++++ 2 files changed, 25 insertions(+) diff --git a/redisson/src/main/java/org/redisson/RedissonSetCache.java b/redisson/src/main/java/org/redisson/RedissonSetCache.java index 06cb3fe39..a4bdbe431 100644 --- a/redisson/src/main/java/org/redisson/RedissonSetCache.java +++ b/redisson/src/main/java/org/redisson/RedissonSetCache.java @@ -25,6 +25,7 @@ import java.util.Set; import java.util.concurrent.TimeUnit; import org.redisson.api.RFuture; +import org.redisson.api.RLock; import org.redisson.api.RSetCache; import org.redisson.api.RedissonClient; import org.redisson.api.mapreduce.RCollectionMapReduce; @@ -37,6 +38,7 @@ import org.redisson.client.protocol.decoder.ScanObjectEntry; import org.redisson.command.CommandAsyncExecutor; import org.redisson.eviction.EvictionScheduler; import org.redisson.mapreduce.RedissonCollectionMapReduce; +import org.redisson.misc.Hash; import org.redisson.misc.RedissonPromise; import io.netty.buffer.ByteBuf; @@ -351,4 +353,19 @@ public class RedissonSetCache extends RedissonExpirable implements RSetCache< delete(); } + private String getLockName(Object value) { + ByteBuf state = encode(value); + try { + return suffixName(getName(value), Hash.hash128toBase64(state) + ":lock"); + } finally { + state.release(); + } + } + + @Override + public RLock getLock(V value) { + String lockName = getLockName(value); + return new RedissonLock(commandExecutor, lockName); + } + } diff --git a/redisson/src/main/java/org/redisson/api/RSetCache.java b/redisson/src/main/java/org/redisson/api/RSetCache.java index a149f1ad3..c1749867d 100644 --- a/redisson/src/main/java/org/redisson/api/RSetCache.java +++ b/redisson/src/main/java/org/redisson/api/RSetCache.java @@ -40,6 +40,14 @@ import org.redisson.api.mapreduce.RCollectionMapReduce; */ public interface RSetCache extends Set, RExpirable, RSetCacheAsync { + /** + * Returns lock instance associated with value + * + * @param value - set value + * @return lock + */ + RLock getLock(V value); + /** * Returns values iterator matches pattern. * From f1c7b209744161743c8535624ba948c97d5be54e Mon Sep 17 00:00:00 2001 From: Nikita Date: Mon, 9 Apr 2018 11:15:57 +0300 Subject: [PATCH 13/15] Fixed - RSetMultimap.get() does not update multimap correctly. #1375 --- .../org/redisson/RedissonListMultimap.java | 24 ++++++ .../org/redisson/RedissonSetMultimap.java | 24 ++++++ .../org/redisson/RedissonSetMultimapTest.java | 85 +++++++++++++++++++ 3 files changed, 133 insertions(+) diff --git a/redisson/src/main/java/org/redisson/RedissonListMultimap.java b/redisson/src/main/java/org/redisson/RedissonListMultimap.java index ca73597d1..b752efd6f 100644 --- a/redisson/src/main/java/org/redisson/RedissonListMultimap.java +++ b/redisson/src/main/java/org/redisson/RedissonListMultimap.java @@ -189,6 +189,30 @@ public class RedissonListMultimap extends RedissonMultimap implement return new RedissonList(codec, commandExecutor, setName, null) { + @Override + public RFuture addAsync(V value) { + return RedissonListMultimap.this.putAsync(key, value); + } + + @Override + public RFuture addAllAsync(Collection c) { + return RedissonListMultimap.this.putAllAsync(key, c); + } + + @Override + public RFuture removeAsync(Object value) { + return RedissonListMultimap.this.removeAsync(key, value); + } + + @Override + public RFuture removeAllAsync(Collection c) { + ByteBuf keyState = encodeMapKey(key); + return commandExecutor.evalWriteAsync(RedissonListMultimap.this.getName(), codec, RedisCommands.EVAL_BOOLEAN, + "redis.call('hdel', KEYS[1], ARGV[1]); " + + "return redis.call('del', KEYS[2]) > 0; ", + Arrays.asList(RedissonListMultimap.this.getName(), setName), keyState); + } + @Override public RFuture deleteAsync() { ByteBuf keyState = encodeMapKey(key); diff --git a/redisson/src/main/java/org/redisson/RedissonSetMultimap.java b/redisson/src/main/java/org/redisson/RedissonSetMultimap.java index d29aa265e..8f02137dc 100644 --- a/redisson/src/main/java/org/redisson/RedissonSetMultimap.java +++ b/redisson/src/main/java/org/redisson/RedissonSetMultimap.java @@ -167,6 +167,30 @@ public class RedissonSetMultimap extends RedissonMultimap implements return new RedissonSet(codec, commandExecutor, setName, null) { + @Override + public RFuture addAsync(V value) { + return RedissonSetMultimap.this.putAsync(key, value); + } + + @Override + public RFuture addAllAsync(Collection c) { + return RedissonSetMultimap.this.putAllAsync(key, c); + } + + @Override + public RFuture removeAsync(Object value) { + return RedissonSetMultimap.this.removeAsync(key, value); + } + + @Override + public RFuture removeAllAsync(Collection c) { + ByteBuf keyState = encodeMapKey(key); + return commandExecutor.evalWriteAsync(RedissonSetMultimap.this.getName(), codec, RedisCommands.EVAL_BOOLEAN_AMOUNT, + "redis.call('hdel', KEYS[1], ARGV[1]); " + + "return redis.call('del', KEYS[2]); ", + Arrays.asList(RedissonSetMultimap.this.getName(), setName), keyState); + } + @Override public RFuture deleteAsync() { ByteBuf keyState = encodeMapKey(key); diff --git a/redisson/src/test/java/org/redisson/RedissonSetMultimapTest.java b/redisson/src/test/java/org/redisson/RedissonSetMultimapTest.java index 3036e3e49..35b93e9fe 100644 --- a/redisson/src/test/java/org/redisson/RedissonSetMultimapTest.java +++ b/redisson/src/test/java/org/redisson/RedissonSetMultimapTest.java @@ -117,6 +117,91 @@ public class RedissonSetMultimapTest extends BaseTest { } + @Test + public void testGetAdd() { + RSetMultimap multimap1 = redisson.getSetMultimap("myMultimap1"); + Set one = multimap1.get("1"); + Set two = multimap1.get("2"); + Set four = multimap1.get("4"); + one.add(1); + one.add(2); + one.add(3); + two.add(5); + two.add(6); + four.add(7); + + assertThat(multimap1.keySet()).containsOnly("1", "2", "4"); + assertThat(multimap1.keySize()).isEqualTo(3); + assertThat(multimap1.get("1")).containsOnly(1, 2, 3); + assertThat(multimap1.get("2")).containsOnly(5, 6); + assertThat(multimap1.get("4")).containsOnly(7); + } + + @Test + public void testGetAddAll() { + RSetMultimap multimap1 = redisson.getSetMultimap("myMultimap1"); + Set one = multimap1.get("1"); + Set two = multimap1.get("2"); + Set four = multimap1.get("4"); + one.addAll(Arrays.asList(1, 2, 3)); + two.addAll(Arrays.asList(5, 6)); + four.addAll(Arrays.asList(7)); + + assertThat(multimap1.keySet()).containsOnly("1", "2", "4"); + assertThat(multimap1.keySize()).isEqualTo(3); + assertThat(multimap1.get("1")).containsOnly(1, 2, 3); + assertThat(multimap1.get("2")).containsOnly(5, 6); + assertThat(multimap1.get("4")).containsOnly(7); + } + + + @Test + public void testGetRemove() { + RSetMultimap multimap1 = redisson.getSetMultimap("myMultimap1"); + Set one = multimap1.get("1"); + Set two = multimap1.get("2"); + Set four = multimap1.get("4"); + one.add(1); + one.add(2); + one.add(3); + two.add(5); + two.add(6); + four.add(7); + + assertThat(one.remove(1)).isTrue(); + assertThat(one.remove(2)).isTrue(); + assertThat(two.remove(5)).isTrue(); + assertThat(four.remove(7)).isTrue(); + + assertThat(multimap1.keySet()).containsOnly("1", "2"); + assertThat(multimap1.keySize()).isEqualTo(2); + assertThat(multimap1.get("1")).containsOnly(3); + assertThat(multimap1.get("2")).containsOnly(6); + } + + @Test + public void testGetRemoveAll() { + RSetMultimap multimap1 = redisson.getSetMultimap("myMultimap1"); + Set one = multimap1.get("1"); + Set two = multimap1.get("2"); + Set four = multimap1.get("4"); + one.add(1); + one.add(2); + one.add(3); + two.add(5); + two.add(6); + four.add(7); + + assertThat(one.removeAll(Arrays.asList(1, 2, 3))).isTrue(); + assertThat(two.removeAll(Arrays.asList(5, 6))).isTrue(); + assertThat(four.removeAll(Arrays.asList(7))).isTrue(); + assertThat(four.removeAll(Arrays.asList(9))).isFalse(); + + assertThat(multimap1.keySet()).isEmpty(); + assertThat(multimap1.keySize()).isEqualTo(0); + } + + @Test public void testSize() { RSetMultimap map = redisson.getSetMultimap("test1"); From a42a20ba112d908409777e3eed177f36007e5028 Mon Sep 17 00:00:00 2001 From: Nikita Date: Mon, 9 Apr 2018 12:13:33 +0300 Subject: [PATCH 14/15] Fixed - CommandDecoder doesn't remove command with failed response from commands queue. #1377 --- .../client/handler/CommandDecoder.java | 12 ++++++--- .../test/java/org/redisson/RedissonTest.java | 25 ++++++++++++++----- 2 files changed, 27 insertions(+), 10 deletions(-) diff --git a/redisson/src/main/java/org/redisson/client/handler/CommandDecoder.java b/redisson/src/main/java/org/redisson/client/handler/CommandDecoder.java index bca6d64f3..182220b88 100644 --- a/redisson/src/main/java/org/redisson/client/handler/CommandDecoder.java +++ b/redisson/src/main/java/org/redisson/client/handler/CommandDecoder.java @@ -98,6 +98,7 @@ public class CommandDecoder extends ReplayingDecoder { } } catch (Exception e) { log.error("Unable to decode data. channel: {} message: {}", ctx.channel(), in.toString(0, in.writerIndex(), CharsetUtil.UTF_8), e); + sendNext(ctx); throw e; } } else if (data instanceof CommandData) { @@ -111,6 +112,7 @@ public class CommandDecoder extends ReplayingDecoder { } catch (Exception e) { log.error("Unable to decode data. channel: {} message: {}", ctx.channel(), in.toString(0, in.writerIndex(), CharsetUtil.UTF_8), e); cmd.tryFailure(e); + sendNext(ctx); throw e; } } else if (data instanceof CommandsData) { @@ -119,13 +121,17 @@ public class CommandDecoder extends ReplayingDecoder { decodeCommandBatch(ctx, in, data, commands); } catch (Exception e) { commands.getPromise().tryFailure(e); + sendNext(ctx); throw e; } return; } - ctx.pipeline().get(CommandsQueue.class).sendNextCommand(ctx.channel()); + sendNext(ctx); + } + protected void sendNext(ChannelHandlerContext ctx) { + ctx.pipeline().get(CommandsQueue.class).sendNextCommand(ctx.channel()); state(null); } @@ -242,9 +248,7 @@ public class CommandDecoder extends ReplayingDecoder { } } - ctx.pipeline().get(CommandsQueue.class).sendNextCommand(ctx.channel()); - - state(null); + sendNext(ctx); } else { checkpoint(); state().setBatchIndex(i); diff --git a/redisson/src/test/java/org/redisson/RedissonTest.java b/redisson/src/test/java/org/redisson/RedissonTest.java index ef8a2ebbe..59f2d27c4 100644 --- a/redisson/src/test/java/org/redisson/RedissonTest.java +++ b/redisson/src/test/java/org/redisson/RedissonTest.java @@ -1,7 +1,7 @@ package org.redisson; -import static org.awaitility.Awaitility.*; import static org.assertj.core.api.Assertions.assertThat; +import static org.awaitility.Awaitility.await; import static org.redisson.BaseTest.createInstance; import java.io.IOException; @@ -31,31 +31,44 @@ import org.redisson.RedisRunner.RedisProcess; import org.redisson.api.ClusterNode; import org.redisson.api.Node; import org.redisson.api.Node.InfoSection; -import org.redisson.api.listener.MessageListener; -import org.redisson.api.listener.StatusListener; import org.redisson.api.NodesGroup; import org.redisson.api.RFuture; import org.redisson.api.RMap; -import org.redisson.api.RTopic; import org.redisson.api.RedissonClient; import org.redisson.client.RedisClient; import org.redisson.client.RedisConnectionException; import org.redisson.client.RedisOutOfMemoryException; +import org.redisson.client.codec.StringCodec; import org.redisson.client.protocol.decoder.ListScanResult; import org.redisson.client.protocol.decoder.ScanObjectEntry; +import org.redisson.codec.JsonJacksonCodec; import org.redisson.codec.SerializationCodec; import org.redisson.config.Config; import org.redisson.connection.ConnectionListener; import org.redisson.connection.balancer.RandomLoadBalancer; import org.redisson.misc.HashValue; -import io.netty.buffer.Unpooled; - public class RedissonTest { protected RedissonClient redisson; protected static RedissonClient defaultRedisson; + @Test + public void testDecoderError() { + redisson.getBucket("testbucket", new StringCodec()).set("{INVALID JSON!}"); + + for (int i = 0; i < 256; i++) { + try { + redisson.getBucket("testbucket", new JsonJacksonCodec()).get(); + Assert.fail(); + } catch (Exception e) { + // skip + } + } + + redisson.getBucket("testbucket2").set("should work"); + } + @Test public void testSmallPool() throws InterruptedException { Config config = new Config(); From 5a8877d5fc8220732925f0d693605364d0274e4a Mon Sep 17 00:00:00 2001 From: Nikita Date: Mon, 9 Apr 2018 12:17:24 +0300 Subject: [PATCH 15/15] refactoring --- redisson/src/main/java/org/redisson/RedissonSet.java | 2 +- .../java/org/redisson/api/LocalCachedMapOptions.java | 2 +- redisson/src/main/java/org/redisson/api/MapOptions.java | 2 +- .../java/org/redisson/command/CommandBatchService.java | 9 +++------ redisson/src/main/java/org/redisson/config/Config.java | 4 +++- .../java/org/redisson/connection/MasterSlaveEntry.java | 2 +- 6 files changed, 10 insertions(+), 11 deletions(-) diff --git a/redisson/src/main/java/org/redisson/RedissonSet.java b/redisson/src/main/java/org/redisson/RedissonSet.java index 1f258957c..d2fa8cd32 100644 --- a/redisson/src/main/java/org/redisson/RedissonSet.java +++ b/redisson/src/main/java/org/redisson/RedissonSet.java @@ -53,7 +53,7 @@ public class RedissonSet extends RedissonExpirable implements RSet, ScanIt RedissonClient redisson; - protected RedissonSet(CommandAsyncExecutor commandExecutor, String name, RedissonClient redisson) { + public RedissonSet(CommandAsyncExecutor commandExecutor, String name, RedissonClient redisson) { super(commandExecutor, name); this.redisson = redisson; } diff --git a/redisson/src/main/java/org/redisson/api/LocalCachedMapOptions.java b/redisson/src/main/java/org/redisson/api/LocalCachedMapOptions.java index 0a6069d0f..6227b04e6 100644 --- a/redisson/src/main/java/org/redisson/api/LocalCachedMapOptions.java +++ b/redisson/src/main/java/org/redisson/api/LocalCachedMapOptions.java @@ -21,7 +21,7 @@ import org.redisson.api.map.MapLoader; import org.redisson.api.map.MapWriter; /** - * RLocalCachedMap options object. Used to specify RLocalCachedMap settings. + * Configuration for LocalCachedMap object. * * @author Nikita Koksharov * diff --git a/redisson/src/main/java/org/redisson/api/MapOptions.java b/redisson/src/main/java/org/redisson/api/MapOptions.java index 168aec97b..8d790d451 100644 --- a/redisson/src/main/java/org/redisson/api/MapOptions.java +++ b/redisson/src/main/java/org/redisson/api/MapOptions.java @@ -19,7 +19,7 @@ import org.redisson.api.map.MapLoader; import org.redisson.api.map.MapWriter; /** - * RMap options object. + * Configuration for Map object. * * @author Nikita Koksharov * diff --git a/redisson/src/main/java/org/redisson/command/CommandBatchService.java b/redisson/src/main/java/org/redisson/command/CommandBatchService.java index 35dc7a957..b3268efc7 100644 --- a/redisson/src/main/java/org/redisson/command/CommandBatchService.java +++ b/redisson/src/main/java/org/redisson/command/CommandBatchService.java @@ -235,16 +235,13 @@ public class CommandBatchService extends CommandAsyncService { List responses = new ArrayList(entries.size()); int syncedSlaves = 0; for (BatchCommandData commandEntry : entries) { - if (!isWaitCommand(commandEntry) - && !commandEntry.getCommand().getName().equals(RedisCommands.MULTI.getName()) + if (isWaitCommand(commandEntry)) { + syncedSlaves = (Integer) commandEntry.getPromise().getNow(); + } else if (!commandEntry.getCommand().getName().equals(RedisCommands.MULTI.getName()) && !commandEntry.getCommand().getName().equals(RedisCommands.EXEC.getName())) { Object entryResult = commandEntry.getPromise().getNow(); entryResult = tryHandleReference(entryResult); responses.add(entryResult); - } else { - if (isWaitCommand(commandEntry)) { - syncedSlaves = (Integer) commandEntry.getPromise().getNow(); - } } } diff --git a/redisson/src/main/java/org/redisson/config/Config.java b/redisson/src/main/java/org/redisson/config/Config.java index c2576d8f7..18ebd7b87 100644 --- a/redisson/src/main/java/org/redisson/config/Config.java +++ b/redisson/src/main/java/org/redisson/config/Config.java @@ -604,9 +604,11 @@ public class Config { * Switch to round robin {@link io.netty.resolver.dns.RoundRobinDnsAddressResolverGroup} when you need to optimize the url resolving. * * @param addressResolverGroupFactory + * @return config */ - public void setAddressResolverGroupFactory(AddressResolverGroupFactory addressResolverGroupFactory) { + public Config setAddressResolverGroupFactory(AddressResolverGroupFactory addressResolverGroupFactory) { this.addressResolverGroupFactory = addressResolverGroupFactory; + return this; } public AddressResolverGroupFactory getAddressResolverGroupFactory() { return addressResolverGroupFactory; diff --git a/redisson/src/main/java/org/redisson/connection/MasterSlaveEntry.java b/redisson/src/main/java/org/redisson/connection/MasterSlaveEntry.java index cea2c62f2..5b51ea5c3 100644 --- a/redisson/src/main/java/org/redisson/connection/MasterSlaveEntry.java +++ b/redisson/src/main/java/org/redisson/connection/MasterSlaveEntry.java @@ -418,7 +418,7 @@ public class MasterSlaveEntry { * Shutdown old master client. * * @param address of Redis - * @return + * @return client */ public RFuture changeMaster(URI address) { final ClientConnectionsEntry oldMaster = masterEntry;