Fix cache cleanup issue in DefaultSubscriptionRegistry

Issue: SPR-11931
This commit is contained in:
Sebastien Deleuze 2014-07-01 11:55:02 +02:00 committed by Rossen Stoyanchev
parent 669386abac
commit 083d415fc4
2 changed files with 17 additions and 1 deletions

View File

@ -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);
}
}

View File

@ -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<String, String> 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() {