[ 
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 messages on durable subscriptions  (was: Fix 
durable message expiration)

> Fix expiration of 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
>
>
> There are several bugs related the broker handling expiration of 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 (topic 
> subs don't keep references after dispatch and there's no store to ack).
> 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


Reply via email to