Broker should purge more aggressively before invoking queue limit policy
------------------------------------------------------------------------
Key: QPID-3357
URL: https://issues.apache.org/jira/browse/QPID-3357
Project: Qpid
Issue Type: Bug
Components: C++ Broker
Reporter: Andy Goldstein
When enqueuing a message, the broker checks the message/byte count in the queue
and ensures the new message will not violate the queue's limits and limit
policy (reject, ring, etc). It does not take into account messages still in
the queue that have expired, which could result in a message being dropped or
the oldest message being removed unnecessarily. For example, create a queue
with a max count of 2 messages. Send 1 message with no ttl. Send a 2nd
message with a small ttl e.g. 1 second. Wait longer then the ttl so the 2nd
message expires. Try to send a 3rd message to the queue. If the queue policy
is reject, you will get an exception that the queue is full. If the queue
policy is ring, it will discard the 1st message (no ttl so unexpired) to make
room for the new message.
One possible solution would be to try to purge expired messages more
aggressively, e.g. when an enqueue would exceed the limit, try to purge any
expired messages, and then re-check the limit.
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira
---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project: http://qpid.apache.org
Use/Interact: mailto:[email protected]