Skip to content

Commit ea2827b

Browse files
committed
* Fix JdbcMessageStore.removeMessage() and removeMessagesFromGroup()
to remove from `INT_MESSAGE` only if there is no other records in `INT_GROUP_TO_MESSAGE`
1 parent 032df62 commit ea2827b

File tree

2 files changed

+25
-4
lines changed

2 files changed

+25
-4
lines changed

spring-integration-jdbc/src/main/java/org/springframework/integration/jdbc/store/JdbcMessageStore.java

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,9 @@ SELECT COUNT(MESSAGE_ID)
172172
DELETE_MESSAGE("""
173173
DELETE from %PREFIX%MESSAGE
174174
where MESSAGE_ID=? and REGION=?
175+
and MESSAGE_ID not in (
176+
SELECT MESSAGE_ID from %PREFIX%GROUP_TO_MESSAGE
177+
where MESSAGE_ID=? and REGION = ?)
175178
"""),
176179

177180
CREATE_MESSAGE("""
@@ -389,7 +392,8 @@ public Message<?> removeMessage(UUID id) {
389392
if (message == null) {
390393
return null;
391394
}
392-
int updated = this.jdbcTemplate.update(getQuery(Query.DELETE_MESSAGE), getKey(id), this.region);
395+
String key = getKey(id);
396+
int updated = this.jdbcTemplate.update(getQuery(Query.DELETE_MESSAGE), key, this.region, key, this.region);
393397
if (updated != 0) {
394398
return message;
395399
}
@@ -580,15 +584,18 @@ public void removeMessagesFromGroup(Object groupId, Collection<Message<?>> messa
580584
(ps, messageToRemove) -> {
581585
ps.setString(1, groupKey); // NOSONAR - magic number
582586
ps.setString(2, getKey(messageToRemove.getHeaders().getId())); // NOSONAR - magic number
583-
ps.setString(3, JdbcMessageStore.this.region); // NOSONAR - magic number
587+
ps.setString(3, this.region); // NOSONAR - magic number
584588
});
585589

586590
this.jdbcTemplate.batchUpdate(getQuery(Query.DELETE_MESSAGE),
587591
messages,
588592
getRemoveBatchSize(),
589593
(ps, messageToRemove) -> {
590-
ps.setString(1, getKey(messageToRemove.getHeaders().getId())); // NOSONAR - magic number
591-
ps.setString(2, JdbcMessageStore.this.region); // NOSONAR - magic number
594+
String key = getKey(messageToRemove.getHeaders().getId());
595+
ps.setString(1, key); // NOSONAR - magic number
596+
ps.setString(2, this.region); // NOSONAR - magic number
597+
ps.setString(3, key); // NOSONAR - magic number
598+
ps.setString(4, this.region); // NOSONAR - magic number
592599
});
593600

594601
updateMessageGroup(groupKey);

spring-integration-jdbc/src/test/java/org/springframework/integration/jdbc/mysql/MySqlJdbcMessageStoreTests.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -513,6 +513,20 @@ public void sameMessageInTwoGroupsNotRemovedByFirstGroup() {
513513
assertThat(messageStore.getMessageCount()).isEqualTo(0);
514514
}
515515

516+
@Test
517+
public void removeMessagesFromGroupDontRemoveSameMessageInOtherGroup() {
518+
GenericMessage<String> testMessage = new GenericMessage<>("test data");
519+
520+
messageStore.addMessageToGroup("1", testMessage);
521+
messageStore.addMessageToGroup("2", testMessage);
522+
523+
messageStore.removeMessagesFromGroup("1", testMessage);
524+
525+
assertThat(messageStore.getMessageCount()).isEqualTo(1);
526+
assertThat(messageStore.messageGroupSize("1")).isEqualTo(0);
527+
assertThat(messageStore.messageGroupSize("2")).isEqualTo(1);
528+
}
529+
516530
@Configuration
517531
public static class Config {
518532

0 commit comments

Comments
 (0)