Skip to content

Commit c083052

Browse files
authored
[ISSUE #10253] Fix stale wildcardGroupMap entries caused by incorrect parsing during LiteTopic wildcard unregistration (#10254)
1 parent 0752ddf commit c083052

2 files changed

Lines changed: 29 additions & 1 deletion

File tree

broker/src/main/java/org/apache/rocketmq/broker/lite/LiteSubscriptionRegistryImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -400,7 +400,7 @@ private void markWildcardGroup(String topic, String group) {
400400

401401
private void unmarkWildcardGroupIfNecessary(String lmqName) {
402402
if (!LiteUtil.isLiteTopicQueue(lmqName)) { // must be topic@group
403-
String[] topicAtGroup = StringUtils.split(lmqName);
403+
String[] topicAtGroup = StringUtils.split(lmqName, "@");
404404
if (null == topicAtGroup || topicAtGroup.length != 2) {
405405
return;
406406
}

broker/src/test/java/org/apache/rocketmq/broker/lite/LiteSubscriptionRegistryImplTest.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -307,6 +307,34 @@ public void testAddCompleteSubscription_WildcardGroup() {
307307
assertEquals(1, registry.getActiveSubscriptionNum());
308308
}
309309

310+
/**
311+
* Test removeCompleteSubscription cleans wildcard group metadata
312+
*/
313+
@Test
314+
public void testRemoveCompleteSubscription_WildcardGroupMetadataCleanup() {
315+
String clientId = "testClient";
316+
String group = "testGroup";
317+
String topic = "testTopic";
318+
Set<String> lmqNameAll = new HashSet<>();
319+
lmqNameAll.add("lmq1");
320+
321+
SubscriptionGroupConfig groupConfig = new SubscriptionGroupConfig();
322+
groupConfig.setGroupName(group);
323+
groupConfig.setWildcardLiteGroup(true);
324+
when(mockSubscriptionGroupManager.findSubscriptionGroupConfig(group)).thenReturn(groupConfig);
325+
326+
registry.addCompleteSubscription(clientId, group, topic, lmqNameAll, 1L);
327+
328+
assertTrue(registry.wildcardGroupMap.containsKey(topic));
329+
assertTrue(registry.wildcardGroupMap.get(topic).contains(group));
330+
331+
registry.removeCompleteSubscription(clientId);
332+
333+
assertFalse(registry.wildcardGroupMap.containsKey(topic));
334+
assertNull(registry.getLiteSubscription(clientId));
335+
assertEquals(0, registry.getActiveSubscriptionNum());
336+
}
337+
310338
/**
311339
* Test addCompleteSubscription updates complete subscription
312340
*/

0 commit comments

Comments
 (0)