diff options
author | Robert Godfrey <rgodfrey@apache.org> | 2014-02-07 15:21:20 +0000 |
---|---|---|
committer | Robert Godfrey <rgodfrey@apache.org> | 2014-02-07 15:21:20 +0000 |
commit | 64d93cc17582005fb493f9e9557141c5e2698a17 (patch) | |
tree | d9bb78d5b86cac09f6eb6fa52c9a9b4e9223a218 | |
parent | e306ec25b555b4d03d14b3cc83a2ad91ea67cb5c (diff) | |
download | qpid-python-64d93cc17582005fb493f9e9557141c5e2698a17.tar.gz |
Update broker behaviour in the face of rejects with queues having no max redelivery set
git-svn-id: https://svn.apache.org/repos/asf/qpid/branches/java-broker-amqp-1-0-management@1565686 13f79535-47bb-0310-9956-ffa450edef68
3 files changed, 44 insertions, 2 deletions
diff --git a/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/handler/BasicRejectMethodHandler.java b/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/handler/BasicRejectMethodHandler.java index fa8d6d0ea2..fdbd44b06d 100644 --- a/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/handler/BasicRejectMethodHandler.java +++ b/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/handler/BasicRejectMethodHandler.java @@ -124,7 +124,7 @@ public class BasicRejectMethodHandler implements StateAwareMethodListener<BasicR } else { - channel.deadLetter(body.getDeliveryTag()); + channel.requeue(deliveryTag); } } } diff --git a/java/systests/src/main/java/org/apache/qpid/test/unit/client/MaxDeliveryCountTest.java b/java/systests/src/main/java/org/apache/qpid/test/unit/client/MaxDeliveryCountTest.java index 40db17f799..6356b17e6f 100644 --- a/java/systests/src/main/java/org/apache/qpid/test/unit/client/MaxDeliveryCountTest.java +++ b/java/systests/src/main/java/org/apache/qpid/test/unit/client/MaxDeliveryCountTest.java @@ -26,6 +26,7 @@ import org.apache.qpid.AMQException; import org.apache.qpid.client.AMQDestination; import org.apache.qpid.client.AMQQueue; import org.apache.qpid.client.AMQSession; +import org.apache.qpid.client.RejectBehaviour; import org.apache.qpid.configuration.ClientProperties; import org.apache.qpid.server.queue.AMQQueueFactory; import org.apache.qpid.test.utils.QpidBrokerTestCase; @@ -86,7 +87,7 @@ public class MaxDeliveryCountTest extends QpidBrokerTestCase // dead-lettered or requeued. if (!isBroker010()) { - setTestClientSystemProperty(ClientProperties.REJECT_BEHAVIOUR_PROP_NAME, "server"); + setTestClientSystemProperty(ClientProperties.REJECT_BEHAVIOUR_PROP_NAME, RejectBehaviour.SERVER.toString()); } super.setUp(); diff --git a/java/systests/src/main/java/org/apache/qpid/test/unit/transacted/CommitRollbackTest.java b/java/systests/src/main/java/org/apache/qpid/test/unit/transacted/CommitRollbackTest.java index 610628a02d..14914664d6 100644 --- a/java/systests/src/main/java/org/apache/qpid/test/unit/transacted/CommitRollbackTest.java +++ b/java/systests/src/main/java/org/apache/qpid/test/unit/transacted/CommitRollbackTest.java @@ -20,6 +20,7 @@ */ package org.apache.qpid.test.unit.transacted; +import org.apache.qpid.client.RejectBehaviour; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -638,4 +639,44 @@ public class CommitRollbackTest extends QpidBrokerTestCase } } } + + + public void testResendUnseenMessagesAfterRollback() throws Exception + { + resendAfterRollback(); + } + + public void testResendUnseenMessagesAfterRollbackWithServerReject() throws Exception + { + setTestSystemProperty(ClientProperties.REJECT_BEHAVIOUR_PROP_NAME, RejectBehaviour.SERVER.toString()); + resendAfterRollback(); + } + + private void resendAfterRollback() throws Exception + { + newConnection(); + + assertTrue("session is not transacted", _session.getTransacted()); + assertTrue("session is not transacted", _pubSession.getTransacted()); + + _logger.info("sending test message"); + String MESSAGE_TEXT = "message text"; + + _publisher.send(_pubSession.createTextMessage(MESSAGE_TEXT)); + _publisher.send(_pubSession.createTextMessage(MESSAGE_TEXT)); + + _pubSession.commit(); + + assertNotNull("two messages were sent, but none has been received", _consumer.receive(1000)); + + _session.rollback(); + + _logger.info("receiving result"); + + assertNotNull("two messages were sent, but none has been received", _consumer.receive(1000)); + assertNotNull("two messages were sent, but only one has been received", _consumer.receive(1000)); + assertNull("Only two messages were sent, but more have been received", _consumer.receive(100)); + + _session.commit(); + } } |