From 083d415fc4d54ce19f7939b3d837f1f1eda5732a Mon Sep 17 00:00:00 2001 From: Sebastien Deleuze Date: Tue, 1 Jul 2014 11:55:02 +0200 Subject: [PATCH] Fix cache cleanup issue in DefaultSubscriptionRegistry Issue: SPR-11931 --- .../simp/broker/DefaultSubscriptionRegistry.java | 2 +- .../broker/DefaultSubscriptionRegistryTests.java | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/spring-messaging/src/main/java/org/springframework/messaging/simp/broker/DefaultSubscriptionRegistry.java b/spring-messaging/src/main/java/org/springframework/messaging/simp/broker/DefaultSubscriptionRegistry.java index a53495c6c5d..9646ff5e4d5 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/simp/broker/DefaultSubscriptionRegistry.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/simp/broker/DefaultSubscriptionRegistry.java @@ -96,7 +96,7 @@ public class DefaultSubscriptionRegistry extends AbstractSubscriptionRegistry { SessionSubscriptionInfo info = this.subscriptionRegistry.getSubscriptions(sessionId); if (info != null) { String destination = info.removeSubscription(subsId); - if (destination != null && info.getSubscriptions(destination) == null) { + if (destination != null) { this.destinationCache.updateAfterRemovedSubscription(destination, sessionId, subsId); } } diff --git a/spring-messaging/src/test/java/org/springframework/messaging/simp/broker/DefaultSubscriptionRegistryTests.java b/spring-messaging/src/test/java/org/springframework/messaging/simp/broker/DefaultSubscriptionRegistryTests.java index ce7b7aaa971..18593ab8f2f 100644 --- a/spring-messaging/src/test/java/org/springframework/messaging/simp/broker/DefaultSubscriptionRegistryTests.java +++ b/spring-messaging/src/test/java/org/springframework/messaging/simp/broker/DefaultSubscriptionRegistryTests.java @@ -270,6 +270,22 @@ public class DefaultSubscriptionRegistryTests { assertEquals(subscriptionIds, sort(actual.get(sessIds.get(2)))); } + // SPR-11931 + + @Test + public void registerTwiceAndUnregisterSubscriptions() { + + this.registry.registerSubscription(subscribeMessage("sess01", "subs01", "/foo")); + this.registry.registerSubscription(subscribeMessage("sess01", "subs02", "/foo")); + MultiValueMap actual = this.registry.findSubscriptions(message("/foo")); + assertEquals("Expected 1 element", 1, actual.size()); + + this.registry.unregisterSubscription(unsubscribeMessage("sess01", "subs01")); + this.registry.unregisterSubscription(unsubscribeMessage("sess01", "subs02")); + actual = this.registry.findSubscriptions(message("/foo")); + assertEquals("Expected no element", 0, actual.size()); + } + @Test public void unregisterAllSubscriptions() {