ARTEMIS-1090 - Message not expired if absolute expiry time is 0 and ttl is set
https://issues.apache.org/jira/browse/ARTEMIS-1090 Project: http://git-wip-us.apache.org/repos/asf/activemq-artemis/repo Commit: http://git-wip-us.apache.org/repos/asf/activemq-artemis/commit/5529bf15 Tree: http://git-wip-us.apache.org/repos/asf/activemq-artemis/tree/5529bf15 Diff: http://git-wip-us.apache.org/repos/asf/activemq-artemis/diff/5529bf15 Branch: refs/heads/master Commit: 5529bf150a7b3ac2e1cae7a883ad78ce27f0fe30 Parents: 57bae51 Author: Andy Taylor <[email protected]> Authored: Mon Apr 3 08:22:51 2017 +0100 Committer: Martyn Taylor <[email protected]> Committed: Mon Apr 3 14:28:02 2017 +0100 ---------------------------------------------------------------------- .../protocol/amqp/broker/AMQPMessage.java | 2 +- .../amqp/AmqpExpiredMessageTest.java | 35 ++++++++++++++++++++ 2 files changed, 36 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/5529bf15/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/broker/AMQPMessage.java ---------------------------------------------------------------------- diff --git a/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/broker/AMQPMessage.java b/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/broker/AMQPMessage.java index d2a91df..affe49a 100644 --- a/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/broker/AMQPMessage.java +++ b/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/broker/AMQPMessage.java @@ -402,7 +402,7 @@ public class AMQPMessage extends RefCountMessage { if (section instanceof Properties) { _properties = (Properties) section; - if (_properties.getAbsoluteExpiryTime() != null) { + if (_properties.getAbsoluteExpiryTime() != null && _properties.getAbsoluteExpiryTime().getTime() > 0) { this.expiration = _properties.getAbsoluteExpiryTime().getTime(); } http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/5529bf15/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/amqp/AmqpExpiredMessageTest.java ---------------------------------------------------------------------- diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/amqp/AmqpExpiredMessageTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/amqp/AmqpExpiredMessageTest.java index c075be1..047d88d 100644 --- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/amqp/AmqpExpiredMessageTest.java +++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/amqp/AmqpExpiredMessageTest.java @@ -125,6 +125,41 @@ public class AmqpExpiredMessageTest extends AmqpClientTestSupport { } @Test(timeout = 60000) + public void testSendMessageThatIsExpiredUsingTTLWhenAbsoluteIsZero() throws Exception { + AmqpClient client = createAmqpClient(); + AmqpConnection connection = addConnection(client.connect()); + AmqpSession session = connection.createSession(); + + AmqpSender sender = session.createSender(getTestName()); + + // Get the Queue View early to avoid racing the delivery. + final Queue queueView = getProxyToQueue(getTestName()); + assertNotNull(queueView); + + AmqpMessage message = new AmqpMessage(); + message.setAbsoluteExpiryTime(0); + // AET should override any TTL set + message.setTimeToLive(1000); + message.setText("Test-Message"); + sender.send(message); + sender.close(); + + assertEquals(1, queueView.getMessageCount()); + + Thread.sleep(1000); + + // Now try and get the message + AmqpReceiver receiver = session.createReceiver(getTestName()); + receiver.flow(1); + AmqpMessage received = receiver.receive(1, TimeUnit.SECONDS); + assertNull(received); + + assertEquals(1, queueView.getMessagesExpired()); + + connection.close(); + } + + @Test(timeout = 60000) public void testSendMessageThatIsNotExpiredUsingAbsoluteTimeWithElspsedTTL() throws Exception { AmqpClient client = createAmqpClient(); AmqpConnection connection = addConnection(client.connect());
