My understanding is that, KahaDB rewrite the KAHA_SUBSCRIPTION_COMMAND to latest journal file for ease of deletion the oldeset jorunal log, when the durable subscriber has no pending message.
But, in the following case, "Durable Subscriber C and D" aren't rewritten to latest journal despite they have no pending message, because "Durable Subscriber B" has pending messages. I think that it's becoming difficult to delete the oldest journal. - Durable Subscriber A, B, C, D - Validation order of cleanup is "A, B, C, D" - "Durable Subscriber A" has no pending message - "Durable Subscriber B" has some pending messages - "Durable Subscriber C" has no pending message - "Durable Subscriber D" has no pending message the following code is partial cleanup routine, pasted from ActiveMQ 5.13.1 (MessageDatabase.java line.1705-1732) Why is the condition "gcCandidateSet.first() == dataFileId" necessary? It seem that it's blocking the KahaDB cleanup routine. -- Sent from: http://activemq.2283324.n4.nabble.com/ActiveMQ-User-f2341805.html