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

Gary Tully reopened AMQ-2868:
-----------------------------


This sync is only needed for sends, but it impacts acks so it needs a revisit. 
it is too heavy handed.
It breaks concurrent consumption on a destination.

> NegativeQueueTest and JDBC variant - intermittent failure - missing message 
> when cache exhausted
> ------------------------------------------------------------------------------------------------
>
>                 Key: AMQ-2868
>                 URL: https://issues.apache.org/jira/browse/AMQ-2868
>             Project: ActiveMQ
>          Issue Type: Bug
>    Affects Versions: 5.4.0
>            Reporter: Gary Tully
>            Assignee: Gary Tully
>             Fix For: 5.4.1
>
>
> Test fails trying to consume all messages and misses one message on occasion.
> Problem, concurrent transaction completion leaves messages out of order in 
> the cursor w.r.t to the store. When the cursor is exhausted, the cache memory 
> limit is reached and subsequent messages are not cached so the next message 
> needs to be recovered from the store, the point at which we start reading 
> from the store is important. If, at the point at which the cache is full, the 
> cursor is out of order, it can skip a message in the store.
> Previously, the entire store was replayed, as if it was never cached and 
> these messages are suppressed by the cursor as duplicates, but there is a 
> size limit and producers spread limit on the duplicate suppression that means 
> messages can avoid duplicate detection. Also, in the case of consumer 
> transactions that rollback, duplicate delivery is required so out of order 
> messages may arrive on a subsequent dispatch.
> setBatch, ensuring that messages are replayed form the correct point in the 
> store is important to give ordering guarantees with failover and memory 
> limits, so synchronization of the store and cursor w.r.t concurrent 
> transactions is also needed in support of setBatch.
> Store commit and the after completions that update the cursor need to be 
> serialized for a destination to keep make this totally deterministic.
> recap, memory limits such that a cache will be filled, concurrent send 
> transaction completion so that store updates and cursor updated can overlap 
> with each other and with cache invalidation. setBatch trying to reduce the 
> replay of messages.
> Outstanding question:
> - do we make the use of setBatch and transaction sync with store and cursor 
> configurable. If setBatch is off, don't sync. Then at the mercy of consumer 
> transactions and duplicate suppression in the event of failover. An 
> alternative is to make the sync conditional on the use of the cache for a 
> destination. Very reliable but slow; slow is a very relative determination!
> Also, may need to be disabled for all destinations as a transaction can span 
> many destinations.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to