[
https://issues.apache.org/jira/browse/AMQ-9698?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Christopher L. Shannon updated AMQ-9698:
----------------------------------------
Summary: Fix expiration of persistent messages on durable subscriptions
(was: Fix expiration of messages on durable subscriptions)
> Fix expiration of persistent messages on durable subscriptions
> --------------------------------------------------------------
>
> Key: AMQ-9698
> URL: https://issues.apache.org/jira/browse/AMQ-9698
> Project: ActiveMQ Classic
> Issue Type: Bug
> Affects Versions: 5.19.0, 6.1.6
> Reporter: Christopher L. Shannon
> Assignee: Christopher L. Shannon
> Priority: Major
> Fix For: 6.2.0, 5.19.1, 6.1.7
>
> Time Spent: 1h 40m
> Remaining Estimate: 0h
>
> There are several bugs related the broker handling expiration of persistent
> messages on Durable topic subscriptions, both when the client expires and
> also the broker expires. The bugs are related specifically to durables in
> both the expiration thread and the pending message cursor and don't apply to
> Topic subs because topic subs A) go away when offline and B) when online
> don't keep references after dispatch and there's no store to ack. (However, I
> did notice that Topic subs may not handle advisories quite correctly when new
> messages are added and there is an eviction policy set, there might be the
> same reference issue. I need to investigate that more and that would be a
> separate follow on Jira if a problem). One other thing is that expiration of
> non-persistent messages is handled differently for topic subs and durables
> (not part of this thread) so that would be something else to investigate as
> well to see if that works right.
> The following issues exist:
> # *Skipping client expired acks:* If a client expires a message and sends
> back an expiration ack, the broker marks the message reference as expired.
> This means if multiple durable subs try and expire the same message and are
> using the same reference (this can happen when using caching in
> PendingMessageCursor) the first one will ack and the rest of the messages
> never get acked in the store. Furthermore, memory usage tracking is impacted
> as the counter isn't decremented.
> # *Memory tracking by the cursor:* AbstractStoreCursor does not decrement the
> usage counter on the message reference if removed using the
> cursor.remove(message) method. This causes the usage tracker to not decrement
> even after removal in some cases.
> # *Expiry thread:* The topic expiration thread has multiple problems.
> #* The thread is inefficient. It uses the browse method and just loads
> messages into the browse map even if there are no offline durables and
> iterates over every subscription.
> #* The thread will just expire the message on any offline durable or any
> durable that is marked to expire if online without taking into account
> whether the durable has already acked the message. This can lead to lots of
> warnings in the logs for unmatched acks if acking multiple times (which could
> happen if there was another online sub preventing the entire removal of the
> message)
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
For further information, visit: https://activemq.apache.org/contact