Skip to content

Commit 72ce758

Browse files
committed
Fix KV store for group-to-message relationship
The `this.messagePrefix + groupId + '_' + messageId` logic is introduced since `6.2` via: 64f8ed5 The current fix for new `getMessageFromGroup()` and `removeMessageFromGroupById()` is to retrieve group and then perform plain `get` and `delete` against just message id Related to: #8773
1 parent cf5427f commit 72ce758

File tree

1 file changed

+13
-8
lines changed

1 file changed

+13
-8
lines changed

spring-integration-core/src/main/java/org/springframework/integration/store/AbstractKeyValueMessageStore.java

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -269,13 +269,19 @@ public void removeMessagesFromGroup(Object groupId, Collection<Message<?>> messa
269269
public Message<?> getMessageFromGroup(Object groupId, UUID messageId) {
270270
Assert.notNull(groupId, GROUP_ID_MUST_NOT_BE_NULL);
271271
Assert.notNull(messageId, "'messageId' must not be null");
272-
Object object = doRetrieve(this.messagePrefix + groupId + '_' + messageId);
273-
if (object != null) {
274-
return extractMessage(object);
275-
}
276-
else {
277-
return null;
272+
273+
Object mgm = doRetrieve(this.groupPrefix + groupId);
274+
if (mgm != null) {
275+
Assert.isInstanceOf(MessageGroupMetadata.class, mgm);
276+
MessageGroupMetadata messageGroupMetadata = (MessageGroupMetadata) mgm;
277+
278+
for (UUID id : messageGroupMetadata.getMessageIds()) {
279+
if (id.equals(messageId)) {
280+
return getMessage(messageId);
281+
}
282+
}
278283
}
284+
return null;
279285
}
280286

281287
@Override
@@ -289,8 +295,7 @@ public boolean removeMessageFromGroupById(Object groupId, UUID messageId) {
289295

290296
if (messageGroupMetadata.getMessageIds().contains(messageId)) {
291297
messageGroupMetadata.remove(messageId);
292-
String groupToMessageId = this.messagePrefix + groupId + '_' + messageId;
293-
if (doRemove(groupToMessageId) != null) {
298+
if (removeMessage(messageId) != null) {
294299
messageGroupMetadata.setLastModified(System.currentTimeMillis());
295300
doStore(this.groupPrefix + groupId, messageGroupMetadata);
296301
return true;

0 commit comments

Comments
 (0)