From 20323d813260800896a35a695d7b78972fbfed25 Mon Sep 17 00:00:00 2001 From: Nikita Date: Mon, 23 Apr 2018 14:52:27 +0300 Subject: [PATCH 1/8] refactoring --- .../MasterSlaveConnectionManager.java | 29 ++++++++--- .../redisson/connection/MasterSlaveEntry.java | 48 ++++++++++--------- .../balancer/LoadBalancerManager.java | 13 +++-- 3 files changed, 55 insertions(+), 35 deletions(-) diff --git a/redisson/src/main/java/org/redisson/connection/MasterSlaveConnectionManager.java b/redisson/src/main/java/org/redisson/connection/MasterSlaveConnectionManager.java index d2ad9c769..e23ac43e3 100644 --- a/redisson/src/main/java/org/redisson/connection/MasterSlaveConnectionManager.java +++ b/redisson/src/main/java/org/redisson/connection/MasterSlaveConnectionManager.java @@ -147,7 +147,7 @@ public class MasterSlaveConnectionManager implements ConnectionManager { private final ExecutorService executor; private final CommandSyncService commandExecutor; - + private final Config cfg; protected final DnsAddressResolverGroup resolverGroup; @@ -186,7 +186,7 @@ public class MasterSlaveConnectionManager implements ConnectionManager { } else if (cfg.getTransportMode() == TransportMode.KQUEUE) { if (cfg.getEventLoopGroup() == null) { this.group = new KQueueEventLoopGroup(cfg.getNettyThreads(), new DefaultThreadFactory("redisson-netty")); - } else { + } else { this.group = cfg.getEventLoopGroup(); } @@ -218,7 +218,24 @@ public class MasterSlaveConnectionManager implements ConnectionManager { this.shutdownPromise = new RedissonPromise(); this.commandExecutor = new CommandSyncService(this); } + + /* + * Remove it once https://github.com/netty/netty/issues/7882 get resolved + */ + protected DnsAddressResolverGroup createResolverGroup() { + if (cfg.getTransportMode() == TransportMode.EPOLL) { + return cfg.getAddressResolverGroupFactory().create(EpollDatagramChannel.class, DnsServerAddressStreamProviders.platformDefault()); + } else if (cfg.getTransportMode() == TransportMode.KQUEUE) { + return cfg.getAddressResolverGroupFactory().create(KQueueDatagramChannel.class, DnsServerAddressStreamProviders.platformDefault()); + } + + return cfg.getAddressResolverGroupFactory().create(NioDatagramChannel.class, DnsServerAddressStreamProviders.platformDefault()); + } + public SlotGenerator getSlotGenerator() { + return slotGenerator; + } + protected void closeNodeConnections() { List> futures = new ArrayList>(); for (RedisConnection connection : nodeConnections.values()) { @@ -351,7 +368,7 @@ public class MasterSlaveConnectionManager implements ConnectionManager { } RFuture f = entry.setupMasterEntry(config.getMasterAddress()); f.syncUninterruptibly(); - + for (int slot = singleSlotRange.getStartSlot(); slot < singleSlotRange.getEndSlot() + 1; slot++) { addEntry(slot, entry); } @@ -499,14 +516,14 @@ public class MasterSlaveConnectionManager implements ConnectionManager { for (MasterSlaveEntry entry : client2entry.values()) { if (URIBuilder.compare(entry.getClient().getAddr(), addr)) { return entry; - } + } if (entry.hasSlave(addr)) { return entry; } } return null; } - + @Override public MasterSlaveEntry getEntry(RedisClient redisClient) { MasterSlaveEntry entry = client2entry.get(redisClient); @@ -636,7 +653,7 @@ public class MasterSlaveConnectionManager implements ConnectionManager { for (MasterSlaveEntry entry : getEntrySet()) { entry.shutdown(); } - + if (cfg.getExecutor() == null) { executor.shutdown(); try { diff --git a/redisson/src/main/java/org/redisson/connection/MasterSlaveEntry.java b/redisson/src/main/java/org/redisson/connection/MasterSlaveEntry.java index b1155f0a9..119addfff 100644 --- a/redisson/src/main/java/org/redisson/connection/MasterSlaveEntry.java +++ b/redisson/src/main/java/org/redisson/connection/MasterSlaveEntry.java @@ -115,7 +115,7 @@ public class MasterSlaveEntry { } return result; } - + public RFuture setupMasterEntry(InetSocketAddress address, URI uri) { RedisClient client = connectionManager.createClient(NodeType.MASTER, address, uri, sslHostname); return setupMasterEntry(client); @@ -139,25 +139,25 @@ public class MasterSlaveEntry { return; } - masterEntry = new ClientConnectionsEntry( - client, - config.getMasterConnectionMinimumIdleSize(), - config.getMasterConnectionPoolSize(), - config.getSubscriptionConnectionMinimumIdleSize(), - config.getSubscriptionConnectionPoolSize(), - connectionManager, + masterEntry = new ClientConnectionsEntry( + client, + config.getMasterConnectionMinimumIdleSize(), + config.getMasterConnectionPoolSize(), + config.getSubscriptionConnectionMinimumIdleSize(), + config.getSubscriptionConnectionPoolSize(), + connectionManager, NodeType.MASTER); - - CountableListener listener = new CountableListener(result, client); - RFuture writeFuture = writeConnectionPool.add(masterEntry); - listener.incCounter(); - writeFuture.addListener(listener); - - if (config.getSubscriptionMode() == SubscriptionMode.MASTER) { - RFuture pubSubFuture = pubSubConnectionPool.add(masterEntry); - listener.incCounter(); - pubSubFuture.addListener(listener); - } + + CountableListener listener = new CountableListener(result, client); + RFuture writeFuture = writeConnectionPool.add(masterEntry); + listener.incCounter(); + writeFuture.addListener(listener); + + if (config.getSubscriptionMode() == SubscriptionMode.MASTER) { + RFuture pubSubFuture = pubSubConnectionPool.add(masterEntry); + listener.incCounter(); + pubSubFuture.addListener(listener); + } } }); @@ -306,7 +306,7 @@ public class MasterSlaveEntry { public RFuture addSlave(InetSocketAddress address, URI uri) { return addSlave(address, uri, false, NodeType.SLAVE); } - + private RFuture addSlave(final RedisClient client, final boolean freezed, final NodeType nodeType) { final RPromise result = new RedissonPromise(); RFuture addrFuture = client.resolveAddr(); @@ -317,7 +317,7 @@ public class MasterSlaveEntry { result.tryFailure(future.cause()); return; } - + ClientConnectionsEntry entry = new ClientConnectionsEntry(client, config.getSlaveConnectionMinimumIdleSize(), config.getSlaveConnectionPoolSize(), @@ -335,7 +335,7 @@ public class MasterSlaveEntry { }); return result; } - + private RFuture addSlave(InetSocketAddress address, URI uri, final boolean freezed, final NodeType nodeType) { RedisClient client = connectionManager.createClient(NodeType.SLAVE, address, uri, sslHostname); return addSlave(client, freezed, nodeType); @@ -346,6 +346,10 @@ public class MasterSlaveEntry { return addSlave(client, freezed, nodeType); } + public ClientConnectionsEntry getSlaveEntry(RedisClient client) { + return slaveBalancer.getEntry(client); + } + public Collection getSlaveEntries() { List result = new ArrayList(); for (ClientConnectionsEntry slaveEntry : slaveBalancer.getEntries()) { diff --git a/redisson/src/main/java/org/redisson/connection/balancer/LoadBalancerManager.java b/redisson/src/main/java/org/redisson/connection/balancer/LoadBalancerManager.java index d4d14f0d0..af5f51597 100644 --- a/redisson/src/main/java/org/redisson/connection/balancer/LoadBalancerManager.java +++ b/redisson/src/main/java/org/redisson/connection/balancer/LoadBalancerManager.java @@ -86,8 +86,8 @@ public class LoadBalancerManager { CountableListener listener = new CountableListener(result, null) { @Override protected void onSuccess(Void value) { - client2Entry.put(entry.getClient(), entry); - } + client2Entry.put(entry.getClient(), entry); + } }; RFuture slaveFuture = slaveConnectionPool.add(entry); @@ -149,12 +149,12 @@ public class LoadBalancerManager { } return false; } - + public ClientConnectionsEntry freeze(URI address, FreezeReason freezeReason) { ClientConnectionsEntry connectionEntry = getEntry(address); return freeze(connectionEntry, freezeReason); } - + public ClientConnectionsEntry freeze(InetSocketAddress address, FreezeReason freezeReason) { ClientConnectionsEntry connectionEntry = getEntry(address); return freeze(connectionEntry, freezeReason); @@ -197,7 +197,7 @@ public class LoadBalancerManager { public boolean contains(URI addr) { return getEntry(addr) != null; } - + public boolean contains(RedisClient redisClient) { return getEntry(redisClient) != null; } @@ -222,8 +222,7 @@ public class LoadBalancerManager { return null; } - - protected ClientConnectionsEntry getEntry(RedisClient redisClient) { + public ClientConnectionsEntry getEntry(RedisClient redisClient) { return client2Entry.get(redisClient); } From 42d676503bb8d136a82c29f836f9561db4bfc327 Mon Sep 17 00:00:00 2001 From: Nikita Date: Mon, 23 Apr 2018 16:17:23 +0300 Subject: [PATCH 2/8] comments improved --- redisson/src/main/java/org/redisson/api/BatchOptions.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/redisson/src/main/java/org/redisson/api/BatchOptions.java b/redisson/src/main/java/org/redisson/api/BatchOptions.java index 2dc85bd78..dfd15d5c3 100644 --- a/redisson/src/main/java/org/redisson/api/BatchOptions.java +++ b/redisson/src/main/java/org/redisson/api/BatchOptions.java @@ -122,7 +122,7 @@ public class BatchOptions { } /** - * Atomically executes all batched commands as a single command. + * Switches batch to atomic mode. Redis atomically executes all commands of this batch as a single command. *

* Please note, that in cluster mode all objects should be on the same cluster slot. * https://github.com/antirez/redis/issues/3682 @@ -138,7 +138,7 @@ public class BatchOptions { } /** - * Inform Redis not to send reply. It may save network traffic. + * Inform Redis not to send reply. This allows to save network traffic for commands with batch with big response. *

* NOTE: Redis 3.2+ required * From d7ff1b93f0bd694bbf6ea049b1910ec86bd57a9a Mon Sep 17 00:00:00 2001 From: Nikita Date: Mon, 23 Apr 2018 16:17:29 +0300 Subject: [PATCH 3/8] refactoring --- .../org/redisson/connection/MasterSlaveConnectionManager.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/redisson/src/main/java/org/redisson/connection/MasterSlaveConnectionManager.java b/redisson/src/main/java/org/redisson/connection/MasterSlaveConnectionManager.java index e23ac43e3..b4d6698df 100644 --- a/redisson/src/main/java/org/redisson/connection/MasterSlaveConnectionManager.java +++ b/redisson/src/main/java/org/redisson/connection/MasterSlaveConnectionManager.java @@ -232,10 +232,6 @@ public class MasterSlaveConnectionManager implements ConnectionManager { return cfg.getAddressResolverGroupFactory().create(NioDatagramChannel.class, DnsServerAddressStreamProviders.platformDefault()); } - public SlotGenerator getSlotGenerator() { - return slotGenerator; - } - protected void closeNodeConnections() { List> futures = new ArrayList>(); for (RedisConnection connection : nodeConnections.values()) { From cd39e884c930e4108aefde986de7ebaa94322385 Mon Sep 17 00:00:00 2001 From: Nikita Date: Mon, 23 Apr 2018 16:20:25 +0300 Subject: [PATCH 4/8] refactoring --- .../connection/MasterSlaveConnectionManager.java | 8 -------- .../redisson/connection/MasterSlaveEntry.java | 16 ---------------- 2 files changed, 24 deletions(-) diff --git a/redisson/src/main/java/org/redisson/connection/MasterSlaveConnectionManager.java b/redisson/src/main/java/org/redisson/connection/MasterSlaveConnectionManager.java index b4d6698df..24a765c6a 100644 --- a/redisson/src/main/java/org/redisson/connection/MasterSlaveConnectionManager.java +++ b/redisson/src/main/java/org/redisson/connection/MasterSlaveConnectionManager.java @@ -142,8 +142,6 @@ public class MasterSlaveConnectionManager implements ConnectionManager { private final ConnectionEventsHub connectionEventsHub = new ConnectionEventsHub(); - private final AsyncSemaphore[] locks = new AsyncSemaphore[50]; - private final ExecutorService executor; private final CommandSyncService commandExecutor; @@ -156,12 +154,6 @@ public class MasterSlaveConnectionManager implements ConnectionManager { private final Map nodeConnections = PlatformDependent.newConcurrentHashMap(); - { - for (int i = 0; i < locks.length; i++) { - locks[i] = new AsyncSemaphore(1); - } - } - public MasterSlaveConnectionManager(MasterSlaveServersConfig cfg, Config config, UUID id) { this(config, id); this.config = cfg; diff --git a/redisson/src/main/java/org/redisson/connection/MasterSlaveEntry.java b/redisson/src/main/java/org/redisson/connection/MasterSlaveEntry.java index 119addfff..a9be96df1 100644 --- a/redisson/src/main/java/org/redisson/connection/MasterSlaveEntry.java +++ b/redisson/src/main/java/org/redisson/connection/MasterSlaveEntry.java @@ -471,22 +471,6 @@ public class MasterSlaveEntry { }); } - public boolean isFreezed() { - return masterEntry.isFreezed(); - } - - public FreezeReason getFreezeReason() { - return masterEntry.getFreezeReason(); - } - - public void unfreeze() { - masterEntry.resetFirstFail(); - synchronized (masterEntry) { - masterEntry.setFreezed(false); - masterEntry.setFreezeReason(null); - } - } - public void shutdownMasterAsync() { if (!active.compareAndSet(true, false)) { return; From b4f69ba9746f8187eb870778b6ced201136604ce Mon Sep 17 00:00:00 2001 From: Nikita Date: Mon, 23 Apr 2018 17:52:06 +0300 Subject: [PATCH 5/8] RLiveObjectService.delete throws NPE if entity doesn't exist. #1401 --- .../main/java/org/redisson/RedissonLiveObjectService.java | 8 ++++++-- .../main/java/org/redisson/api/RLiveObjectService.java | 6 ++++-- .../java/org/redisson/RedissonLiveObjectServiceTest.java | 5 +++++ 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/redisson/src/main/java/org/redisson/RedissonLiveObjectService.java b/redisson/src/main/java/org/redisson/RedissonLiveObjectService.java index fd43b66ae..5c5bbab13 100644 --- a/redisson/src/main/java/org/redisson/RedissonLiveObjectService.java +++ b/redisson/src/main/java/org/redisson/RedissonLiveObjectService.java @@ -485,8 +485,12 @@ public class RedissonLiveObjectService implements RLiveObjectService { } @Override - public void delete(Class entityClass, K id) { - asLiveObject(get(entityClass, id)).delete(); + public boolean delete(Class entityClass, K id) { + T entity = get(entityClass, id); + if (entity == null) { + return false; + } + return asLiveObject(entity).delete(); } @Override diff --git a/redisson/src/main/java/org/redisson/api/RLiveObjectService.java b/redisson/src/main/java/org/redisson/api/RLiveObjectService.java index f5cae8c8c..cffaaf23f 100644 --- a/redisson/src/main/java/org/redisson/api/RLiveObjectService.java +++ b/redisson/src/main/java/org/redisson/api/RLiveObjectService.java @@ -120,9 +120,11 @@ public interface RLiveObjectService { * @param Key type * @param entityClass - object class * @param id - object id + * + * @return true if entity was deleted successfully, false otherwise */ - void delete(Class entityClass, K id); - + boolean delete(Class entityClass, K id); + /** * To cast the instance to RLiveObject instance. * diff --git a/redisson/src/test/java/org/redisson/RedissonLiveObjectServiceTest.java b/redisson/src/test/java/org/redisson/RedissonLiveObjectServiceTest.java index 560820f6e..682326814 100644 --- a/redisson/src/test/java/org/redisson/RedissonLiveObjectServiceTest.java +++ b/redisson/src/test/java/org/redisson/RedissonLiveObjectServiceTest.java @@ -1401,6 +1401,11 @@ public class RedissonLiveObjectServiceTest extends BaseTest { assertThat(redisson.getKeys().count()).isEqualTo(1); } + @Test + public void testDeleteNotExisted() { + RLiveObjectService service = redisson.getLiveObjectService(); + assertThat(service.delete(Customer.class, "id")).isFalse(); + } @Test public void testDelete() { From ef25d8f3d55362f804fb6060917c08eb4a097f61 Mon Sep 17 00:00:00 2001 From: Nikita Date: Mon, 23 Apr 2018 18:04:00 +0300 Subject: [PATCH 6/8] checkstyle and pmd plugins updated --- redisson/pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/redisson/pom.xml b/redisson/pom.xml index e63618e65..4d5cc140c 100644 --- a/redisson/pom.xml +++ b/redisson/pom.xml @@ -357,7 +357,7 @@ org.apache.maven.plugins maven-pmd-plugin - 3.6 + 3.9.0 verify @@ -378,7 +378,7 @@ org.apache.maven.plugins maven-checkstyle-plugin - 2.17 + 3.0.0 verify From 110536e4a471823ae0a10d01e159543247869ed5 Mon Sep 17 00:00:00 2001 From: Nikita Date: Mon, 23 Apr 2018 18:04:11 +0300 Subject: [PATCH 7/8] checkstyle fixed --- redisson/checkstyle.xml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/redisson/checkstyle.xml b/redisson/checkstyle.xml index 20bda8834..36595370f 100644 --- a/redisson/checkstyle.xml +++ b/redisson/checkstyle.xml @@ -128,7 +128,9 @@ - + + + From 4738d0557ced2c9ea31726550c8539bc56660cb8 Mon Sep 17 00:00:00 2001 From: Nikita Date: Mon, 23 Apr 2018 18:12:08 +0300 Subject: [PATCH 8/8] plugins updated --- redisson/pom.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/redisson/pom.xml b/redisson/pom.xml index 4d5cc140c..ee1b7b84b 100644 --- a/redisson/pom.xml +++ b/redisson/pom.xml @@ -335,7 +335,7 @@ org.codehaus.mojo versions-maven-plugin - 2.2 + 2.5 @@ -396,7 +396,7 @@ maven-compiler-plugin - 3.6.1 + 3.7.0 ${source.version} ${source.version} @@ -422,7 +422,7 @@ org.apache.maven.plugins maven-surefire-plugin - 2.19.1 + 2.21.0