The AMQ Store allocates entries in the data logs for commands (including messages/acknowledgements/transaction boundaries etc) - but relies on the reference store for keeping track of data files that are being used. Updates to the reference store happen at a checkpoint() - asynchronously. The problem is that for a fast producer, the current data file (one being written to) can move on past the last known data file to the reference store. As the cleanup() task is a scheduled task - and not coupled to check points - the cleanup task can remove data files that the reference store is not yet aware of AND have are previous to the current data file being written too.
This issue can result in errors from the AMQ Store such as:
Message: java.io.IOException: Failed to read to journal for: offset =
2374, file = 1, size = -1, type = 0. Reason: java.io.IOException: Could
not locate data file data--1
see: http://www.nabble.com/Please-help-check-ActiveMQ-5.0.0-RC2-tf4692126s2354.html
Test case: org.apache.activemq.bugs.DurableConsumerTest