[ 
https://issues.apache.org/jira/browse/ACTIVEMQ6-64?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14265155#comment-14265155
 ] 

clebert suconic commented on ACTIVEMQ6-64:
------------------------------------------

The issue here is that when you page a message through a transaction, you can't 
read the message until you finished the commit. On this case, since it's the 
first write operation on the journal the PageCursor can't look at the file 
until commit. So the system is performing a redelivery and setting the 
beggining of the chaing being the second page.


Since you got a new Iterator through totalIterator() the PageCursorIterator was 
looking at the list of redeliveries on the PageSubscription.


The fix was to move the redelivery list to the iterator, so when you get a new 
iterator you won't have the same redelivery list filled. And you should be fine 
after this fix.

> Queue.totalIterator() is showing Messages twice when batch of messages pushed 
> address over page threshold
> ---------------------------------------------------------------------------------------------------------
>
>                 Key: ACTIVEMQ6-64
>                 URL: https://issues.apache.org/jira/browse/ACTIVEMQ6-64
>             Project: Apache ActiveMQ 6
>          Issue Type: Bug
>            Reporter: Martyn Taylor
>            Assignee: clebert suconic
>
> When sending a batch of messages using the core protocol.  i.e. performing 
> producer.send(message); multiple times then calling session.commit().  The 
> messages are paged twice.  This happens when the number of messages in the 
> batch pushes the address over it's max allocated memory and initialises 
> paging on the address.
> If the messages are committed after the paging has started this bug does not 
> surface, nor does it occur if the total messages in the batch do not push the 
> address in paging mode.
> For example.
> I have an address "testAddress" backed up by a queue "testQueue".  The max 
> memory on the address is set to 10MB.
> If there are no messages in the queue, hence the total memory usage of the 
> address is <10MB and I send 20 x messages of 1MB, the call session.commit().  
> The messages that exceed the memory limit are paged twice.  Messages 1 - 10 
> stay in memory, messages 11 - 20 are paged twice.
> This does not happen when the address is already in paging mode.  If the 
> address is in paging mode before we send the 20 messages, the server behaves 
> as expected and pages all 20 messages once.
> I have created a test to show this behaviour here: 
> https://github.com/mtaylor/activemq-6/commit/b7bee77bcefb12c4b104c0beb3f4dc9aab545f6b



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to