From ad92d39b89921f528ee5ae734c7fa5a7f10c94f1 Mon Sep 17 00:00:00 2001 From: Nikita Koksharov Date: Wed, 16 Jan 2019 16:43:03 +0300 Subject: [PATCH 1/3] Fixed - RedissonSessionRepository process changes of unnecessary keys #1864 --- .../spring/session/RedissonSessionRepository.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/redisson/src/main/java/org/redisson/spring/session/RedissonSessionRepository.java b/redisson/src/main/java/org/redisson/spring/session/RedissonSessionRepository.java index dcd9ce7c7..c5d8ab719 100644 --- a/redisson/src/main/java/org/redisson/spring/session/RedissonSessionRepository.java +++ b/redisson/src/main/java/org/redisson/spring/session/RedissonSessionRepository.java @@ -249,11 +249,11 @@ public class RedissonSessionRepository implements FindByIndexNameSessionReposito publishEvent(new SessionCreatedEvent(this, session)); } } else if (deletedTopic.getPatternNames().contains(pattern.toString())) { - if (!body.contains(":")) { + if (!body.startsWith(keyPrefix)) { return; } - String id = body.split(":")[1]; + String id = body.split(keyPrefix)[1]; RedissonSession session = new RedissonSession(keyPrefix, id); if (session.load()) { session.clearPrincipal(); @@ -262,11 +262,11 @@ public class RedissonSessionRepository implements FindByIndexNameSessionReposito publishEvent(new SessionDeletedEvent(this, id)); } } else if (expiredTopic.getPatternNames().contains(pattern.toString())) { - if (!body.contains(":")) { + if (!body.startsWith(keyPrefix)) { return; } - String id = body.split(":")[1]; + String id = body.split(keyPrefix)[1]; RedissonSession session = new RedissonSession(keyPrefix, id); if (session.load()) { session.clearPrincipal(); From 332c95ab84171809efa987ec5aead010788973f5 Mon Sep 17 00:00:00 2001 From: Nikita Koksharov Date: Wed, 16 Jan 2019 17:44:32 +0300 Subject: [PATCH 2/3] Fixed - ReplicatedConnectionManager doesn't recover Master node as Slave after failover. #1845 --- .../MasterSlaveConnectionManager.java | 7 ++++++- .../ReplicatedConnectionManager.java | 18 ++++++++++++++---- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/redisson/src/main/java/org/redisson/connection/MasterSlaveConnectionManager.java b/redisson/src/main/java/org/redisson/connection/MasterSlaveConnectionManager.java index a6082dfd4..864c5ca55 100644 --- a/redisson/src/main/java/org/redisson/connection/MasterSlaveConnectionManager.java +++ b/redisson/src/main/java/org/redisson/connection/MasterSlaveConnectionManager.java @@ -249,7 +249,12 @@ public class MasterSlaveConnectionManager implements ConnectionManager { } RedisConnection connection = nodeConnections.get(key); if (connection != null) { - return RedissonPromise.newSucceededFuture(connection); + if (!connection.isActive()) { + nodeConnections.remove(key); + connection.closeAsync(); + } else { + return RedissonPromise.newSucceededFuture(connection); + } } if (addr != null) { diff --git a/redisson/src/main/java/org/redisson/connection/ReplicatedConnectionManager.java b/redisson/src/main/java/org/redisson/connection/ReplicatedConnectionManager.java index cfdeac52a..3580e92ed 100644 --- a/redisson/src/main/java/org/redisson/connection/ReplicatedConnectionManager.java +++ b/redisson/src/main/java/org/redisson/connection/ReplicatedConnectionManager.java @@ -32,6 +32,7 @@ import org.redisson.config.Config; import org.redisson.config.MasterSlaveServersConfig; import org.redisson.config.ReadMode; import org.redisson.config.ReplicatedServersConfig; +import org.redisson.connection.ClientConnectionsEntry.FreezeReason; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -119,15 +120,15 @@ public class ReplicatedConnectionManager extends MasterSlaveConnectionManager { monitorFuture = group.schedule(new Runnable() { @Override public void run() { + if (isShuttingDown()) { + return; + } + final URI master = currentMaster.get(); log.debug("Current master: {}", master); final AtomicInteger count = new AtomicInteger(cfg.getNodeAddresses().size()); for (final URI addr : cfg.getNodeAddresses()) { - if (isShuttingDown()) { - return; - } - RFuture connectionFuture = connectToNode(cfg, addr, null, addr.getHost()); connectionFuture.addListener(new FutureListener() { @Override @@ -166,6 +167,8 @@ public class ReplicatedConnectionManager extends MasterSlaveConnectionManager { } else if (currentMaster.compareAndSet(master, addr)) { changeMaster(singleSlotRange.getStartSlot(), addr); } + } else if (!config.checkSkipSlavesInit()) { + slaveUp(addr); } if (count.decrementAndGet() == 0) { @@ -181,6 +184,13 @@ public class ReplicatedConnectionManager extends MasterSlaveConnectionManager { }, cfg.getScanInterval(), TimeUnit.MILLISECONDS); } + private void slaveUp(URI uri) { + MasterSlaveEntry entry = getEntry(singleSlotRange.getStartSlot()); + if (entry.slaveUp(uri, FreezeReason.MANAGER)) { + log.info("slave: {} has up", uri); + } + } + @Override public void shutdown() { if (monitorFuture != null) { From 110989b98347152269ad1d1a32e9429521e64073 Mon Sep 17 00:00:00 2001 From: Nikita Koksharov Date: Wed, 16 Jan 2019 20:28:42 +0300 Subject: [PATCH 3/3] compilation fixed --- .../java/org/redisson/cache/LocalCacheView.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/redisson/src/main/java/org/redisson/cache/LocalCacheView.java b/redisson/src/main/java/org/redisson/cache/LocalCacheView.java index 7f143d992..b3352ea54 100644 --- a/redisson/src/main/java/org/redisson/cache/LocalCacheView.java +++ b/redisson/src/main/java/org/redisson/cache/LocalCacheView.java @@ -65,6 +65,11 @@ public class LocalCacheView { public K next() { return (K) iter.next().getKey(); } + + @Override + public void remove() { + iter.remove(); + } }; } @@ -111,6 +116,11 @@ public class LocalCacheView { public V next() { return (V) iter.next().getValue(); } + + @Override + public void remove() { + iter.remove(); + } }; } @@ -152,6 +162,11 @@ public class LocalCacheView { CacheValue e = iter.next(); return new AbstractMap.SimpleEntry((K)e.getKey(), (V)e.getValue()); } + + @Override + public void remove() { + iter.remove(); + } }; }