Repository: activemq Updated Branches: refs/heads/master 94f1e98ad -> e16d05436
https://issues.apache.org/jira/browse/AMQ-5674 - revisit change - use single redelivey delay attribute for both initial and subsequent delays - resolves regression in BrokerRedeliveryTest Project: http://git-wip-us.apache.org/repos/asf/activemq/repo Commit: http://git-wip-us.apache.org/repos/asf/activemq/commit/1d71cb70 Tree: http://git-wip-us.apache.org/repos/asf/activemq/tree/1d71cb70 Diff: http://git-wip-us.apache.org/repos/asf/activemq/diff/1d71cb70 Branch: refs/heads/master Commit: 1d71cb70367859223edfab65405d999a0ef21f7d Parents: 7741e02 Author: gtully <[email protected]> Authored: Fri Apr 3 14:18:55 2015 +0100 Committer: gtully <[email protected]> Committed: Fri Apr 3 14:19:15 2015 +0100 ---------------------------------------------------------------------- .../apache/activemq/broker/util/RedeliveryPlugin.java | 14 ++++---------- .../java/org/apache/activemq/RedeliveryPolicy.java | 5 +---- .../apache/activemq/ra/ActiveMQActivationSpec.java | 1 + .../org/apache/activemq/RedeliveryPolicyTest.java | 6 +++--- .../apache/activemq/broker/BrokerRedeliveryTest.java | 2 +- 5 files changed, 10 insertions(+), 18 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/activemq/blob/1d71cb70/activemq-broker/src/main/java/org/apache/activemq/broker/util/RedeliveryPlugin.java ---------------------------------------------------------------------- diff --git a/activemq-broker/src/main/java/org/apache/activemq/broker/util/RedeliveryPlugin.java b/activemq-broker/src/main/java/org/apache/activemq/broker/util/RedeliveryPlugin.java index 5a90753..f270744 100644 --- a/activemq-broker/src/main/java/org/apache/activemq/broker/util/RedeliveryPlugin.java +++ b/activemq-broker/src/main/java/org/apache/activemq/broker/util/RedeliveryPlugin.java @@ -140,9 +140,10 @@ public class RedeliveryPlugin extends BrokerPluginSupport { int redeliveryCount = messageReference.getRedeliveryCounter(); if (RedeliveryPolicy.NO_MAXIMUM_REDELIVERIES == maximumRedeliveries || redeliveryCount < maximumRedeliveries) { - long delay = ( redeliveryCount == 0 ? - redeliveryPolicy.getInitialRedeliveryDelay() : - redeliveryPolicy.getNextRedeliveryDelay(getExistingDelay(messageReference))); + long delay = redeliveryPolicy.getInitialRedeliveryDelay(); + for (int i = 0; i < redeliveryCount; i++) { + delay = redeliveryPolicy.getNextRedeliveryDelay(delay); + } scheduleRedelivery(context, messageReference, delay, ++redeliveryCount); } else if (isSendToDlqIfMaxRetriesExceeded()) { @@ -199,11 +200,4 @@ public class RedeliveryPlugin extends BrokerPluginSupport { } } - private int getExistingDelay(MessageReference messageReference) throws IOException { - Object val = messageReference.getMessage().getProperty(REDELIVERY_DELAY); - if (val instanceof Long) { - return ((Long)val).intValue(); - } - return 0; - } } http://git-wip-us.apache.org/repos/asf/activemq/blob/1d71cb70/activemq-client/src/main/java/org/apache/activemq/RedeliveryPolicy.java ---------------------------------------------------------------------- diff --git a/activemq-client/src/main/java/org/apache/activemq/RedeliveryPolicy.java b/activemq-client/src/main/java/org/apache/activemq/RedeliveryPolicy.java index e0a8f33..91f2b71 100644 --- a/activemq-client/src/main/java/org/apache/activemq/RedeliveryPolicy.java +++ b/activemq-client/src/main/java/org/apache/activemq/RedeliveryPolicy.java @@ -98,10 +98,7 @@ public class RedeliveryPolicy extends DestinationMapEntry implements Cloneable, } public long getNextRedeliveryDelay(long previousDelay) { - long nextDelay = initialRedeliveryDelay; - if (nextDelay == 0) { - nextDelay = redeliveryDelay; - } + long nextDelay = redeliveryDelay; if (previousDelay > 0 && useExponentialBackOff && backOffMultiplier > 1) { nextDelay = (long) (previousDelay * backOffMultiplier); http://git-wip-us.apache.org/repos/asf/activemq/blob/1d71cb70/activemq-ra/src/main/java/org/apache/activemq/ra/ActiveMQActivationSpec.java ---------------------------------------------------------------------- diff --git a/activemq-ra/src/main/java/org/apache/activemq/ra/ActiveMQActivationSpec.java b/activemq-ra/src/main/java/org/apache/activemq/ra/ActiveMQActivationSpec.java index c17f7f0..0c1440b 100644 --- a/activemq-ra/src/main/java/org/apache/activemq/ra/ActiveMQActivationSpec.java +++ b/activemq-ra/src/main/java/org/apache/activemq/ra/ActiveMQActivationSpec.java @@ -639,6 +639,7 @@ public class ActiveMQActivationSpec implements MessageActivationSpec, Serializab */ public void setInitialRedeliveryDelay(long initialRedeliveryDelay) { lazyCreateRedeliveryPolicy().setInitialRedeliveryDelay(initialRedeliveryDelay); + redeliveryPolicy.setRedeliveryDelay(initialRedeliveryDelay); } /** http://git-wip-us.apache.org/repos/asf/activemq/blob/1d71cb70/activemq-unit-tests/src/test/java/org/apache/activemq/RedeliveryPolicyTest.java ---------------------------------------------------------------------- diff --git a/activemq-unit-tests/src/test/java/org/apache/activemq/RedeliveryPolicyTest.java b/activemq-unit-tests/src/test/java/org/apache/activemq/RedeliveryPolicyTest.java index 1f8f687..b7a870a 100644 --- a/activemq-unit-tests/src/test/java/org/apache/activemq/RedeliveryPolicyTest.java +++ b/activemq-unit-tests/src/test/java/org/apache/activemq/RedeliveryPolicyTest.java @@ -75,11 +75,11 @@ public class RedeliveryPolicyTest extends JmsTestSupport { policy.setInitialRedeliveryDelay(500); long delay = policy.getNextRedeliveryDelay(500); - assertEquals(500, delay); + assertEquals(1000, delay); delay = policy.getNextRedeliveryDelay(delay); - assertEquals(500, delay); + assertEquals(1000, delay); delay = policy.getNextRedeliveryDelay(delay); - assertEquals(500, delay); + assertEquals(1000, delay); } http://git-wip-us.apache.org/repos/asf/activemq/blob/1d71cb70/activemq-unit-tests/src/test/java/org/apache/activemq/broker/BrokerRedeliveryTest.java ---------------------------------------------------------------------- diff --git a/activemq-unit-tests/src/test/java/org/apache/activemq/broker/BrokerRedeliveryTest.java b/activemq-unit-tests/src/test/java/org/apache/activemq/broker/BrokerRedeliveryTest.java index 1fc7a6a..4320ade 100644 --- a/activemq-unit-tests/src/test/java/org/apache/activemq/broker/BrokerRedeliveryTest.java +++ b/activemq-unit-tests/src/test/java/org/apache/activemq/broker/BrokerRedeliveryTest.java @@ -81,7 +81,7 @@ public class BrokerRedeliveryTest extends org.apache.activemq.TestSupport { LOG.info("got: " + brokerRedeliveryMessage); assertNotNull("got message via broker redelivery after delay", brokerRedeliveryMessage); assertEquals("message matches", message.getStringProperty("data"), brokerRedeliveryMessage.getStringProperty("data")); - assertEquals("has expiryDelay specified", i == 0 ? initialRedeliveryDelayMillis : redeliveryDelayMillis, brokerRedeliveryMessage.getLongProperty(RedeliveryPlugin.REDELIVERY_DELAY)); + assertEquals("has expiryDelay specified - iteration:" + i, i == 0 ? initialRedeliveryDelayMillis : redeliveryDelayMillis, brokerRedeliveryMessage.getLongProperty(RedeliveryPlugin.REDELIVERY_DELAY)); consumerSession.rollback(); }
