From 89e1eb35b9b84167ac3a0e68609e83d2a25ca456 Mon Sep 17 00:00:00 2001 From: Peter Uhlenbruck <13527750+puhlenbruck@users.noreply.github.com> Date: Tue, 23 Jul 2019 09:33:11 -0700 Subject: [PATCH] GH-2999: Fix TimeoutCountSeqSizeReleaseStrategy Fixes https://github.com/spring-projects/spring-integration/issues/2999 Remove `else` block from `findEarliestTimestamp` causing the method to return with `Long.MAX_VALUE` if the condition was ever `false`. **Cherry-pick to 5.1.x** --- .../TimeoutCountSequenceSizeReleaseStrategy.java | 4 +--- ...outCountSequenceSizeReleaseStrategyTests.java | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/spring-integration-core/src/main/java/org/springframework/integration/aggregator/TimeoutCountSequenceSizeReleaseStrategy.java b/spring-integration-core/src/main/java/org/springframework/integration/aggregator/TimeoutCountSequenceSizeReleaseStrategy.java index d270e5ee76..8a82e83c33 100755 --- a/spring-integration-core/src/main/java/org/springframework/integration/aggregator/TimeoutCountSequenceSizeReleaseStrategy.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/aggregator/TimeoutCountSequenceSizeReleaseStrategy.java @@ -31,6 +31,7 @@ import org.springframework.messaging.Message; * * @author Dave Syer * @author Gary Russell + * @author Peter Uhlenbruck * * @since 2.0 */ @@ -80,9 +81,6 @@ public class TimeoutCountSequenceSizeReleaseStrategy implements ReleaseStrategy if (timestamp != null && timestamp < result) { result = timestamp; } - else { - return Long.MAX_VALUE; // can't release based on time if there is no timestamp - } } return result; } diff --git a/spring-integration-core/src/test/java/org/springframework/integration/aggregator/TimeoutCountSequenceSizeReleaseStrategyTests.java b/spring-integration-core/src/test/java/org/springframework/integration/aggregator/TimeoutCountSequenceSizeReleaseStrategyTests.java index f1958faa53..cbbfbe247f 100755 --- a/spring-integration-core/src/test/java/org/springframework/integration/aggregator/TimeoutCountSequenceSizeReleaseStrategyTests.java +++ b/spring-integration-core/src/test/java/org/springframework/integration/aggregator/TimeoutCountSequenceSizeReleaseStrategyTests.java @@ -27,6 +27,7 @@ import org.springframework.messaging.Message; /** * @author Dave Syer * @author Artme Bilan + * @author Peter Uhlenbruck */ public class TimeoutCountSequenceSizeReleaseStrategyTests { @@ -52,6 +53,21 @@ public class TimeoutCountSequenceSizeReleaseStrategyTests { assertThat(releaseStrategy.canRelease(messages)).isTrue(); } + @Test + public void testIncompleteListWithTimeoutForMultipleMessages() { + Message message1 = MessageBuilder.withPayload("test1") + .setSequenceSize(3).build(); + Message message2 = MessageBuilder.withPayload("test2") + .setSequenceSize(3).build(); + SimpleMessageGroup messages = new SimpleMessageGroup("FOO"); + messages.add(message1); + messages.add(message2); + TimeoutCountSequenceSizeReleaseStrategy releaseStrategy = + new TimeoutCountSequenceSizeReleaseStrategy(TimeoutCountSequenceSizeReleaseStrategy.DEFAULT_THRESHOLD, + -100); + assertThat(releaseStrategy.canRelease(messages)).isTrue(); + } + @Test public void testIncompleteListWithCount() { Message message = MessageBuilder.withPayload("test1")