[ 
https://issues.apache.org/jira/browse/QPID-4779?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Michal Zerola updated QPID-4779:
--------------------------------

    Attachment: policies_prototype.patch
    
> Implementation of policies for queues in Java Qpid Broker
> ---------------------------------------------------------
>
>                 Key: QPID-4779
>                 URL: https://issues.apache.org/jira/browse/QPID-4779
>             Project: Qpid
>          Issue Type: Improvement
>          Components: Java Broker
>    Affects Versions: Future
>            Reporter: Michal Zerola
>            Priority: Minor
>             Fix For: Future
>
>         Attachments: policies_prototype.patch
>
>
> Hi,
> currently the Java Broker doesn't provide the same policies for queues like 
> C++ Broker does. In particular, there is no option to hard limit the maximum 
> number of messages for queue and instruct the broker to act according to some 
> policy if there is an attempt to exceed this limit.
> I think it would be nice to have possibility to set queue to REJECT or 
> RING-TYPE policy like in C++ version.
> In the attachment is a dirty-prototype using which I am trying to outline the 
> main idea of possible implementation. Please, consider it is as an 
> illustration of the principle, there is definitely more (technical) work 
> needed (including tests).
> Some explanation along the way:
> REJECT policy:
> The idea should be quite straight-forward. If the new message is supposed to 
> be enqueued on some queue which current depth is already at the limit, the 
> message should be rejected.
> RING policy:
> Each queue should be able to delete the least important message and create 
> the free slot for new incoming message if the limit is met. The definition of 
> least important differs among the queue types. For standard queue, it should 
> be the oldest message, which can be easily found at the head of the queue. 
> For priority queues (inspired by C++ implementation) it should be the oldest 
> message with the lowest priority. For sorted queues I leave this up to 
> discussion. Personally, I would assume that oldest message is the least 
> important.
> NONE policy:
> Current situation, the queue grows until JVM memory limits allow it.
> As you can see from the patch, I have added the decision what to do with the 
> message into the postCommit() method of PostEnqueueAction. According to the 
> policy type, the new message is either rejected (AMQException thrown) or 
> enqueued. In the case of RING policy, the least important message is deleted.
> I have added the method deleteLowestPriorityEntry() into the AMQQueue. The 
> implementation in SimpleAMQQueue illustrates the idea - try to acquire and 
> delete the least priority entry. To find the lowest priority entry from the 
> entry list I have added the new iterator into the QueueEntryList interface. 
> Each implementation can have different way how to find such an entry. 
> SimpleAMQQueueEntryList just takes the first (oldest one). PriorityQueueList 
> starts with the oldest with the lowest priority entry. I have not implemented 
> yet the version for Sorted queues.
> Please try to look into the patch and let me know if the implementation based 
> on this idea would be reasonable. I will provide the enhanced version of the 
> patch then.
> Thank you.
> Michal

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@qpid.apache.org
For additional commands, e-mail: dev-h...@qpid.apache.org

Reply via email to