Fraser Crossman created AMQ-8068:
------------------------------------
Summary: Topic memory leak on message eviction using
UniquePropertyMessageEvictionStrategy
Key: AMQ-8068
URL: https://issues.apache.org/jira/browse/AMQ-8068
Project: ActiveMQ
Issue Type: Bug
Components: Broker
Affects Versions: 5.16.0
Reporter: Fraser Crossman
Fix For: 5.x
Attachments: patchfile.txt
The current implementation of UniquePropertyMessageEvictionStrategy does not
conform to the expected behaviour of a MessageEvictionStrategySupport
implementation resulting in a memory leak.
All MessageEvictionStrategySupport implementations remove from the passed list
of MessageReference objects the messages that should be evicted and then
returns those items in an array. The calling code expects this to be the case
and decrements message reference counters accordingly.
The current implementation of UniquePropertyMessageEvictionStrategy does one of
two things depending on the state of the buffered messages:
# If the buffer already contains a single message per unique property then the
oldest message is returned in the array for message removal but is not removed
from the passed message list. This leaves a reference to the message intended
for removal in the passed message reference list - not intended behaviour.
(i.e. intended behaviour is identical to OldestMessageEvictionStrategy)
# If the buffer contains more than one instance of a message with the same
unique property then only the latest messages (largest timestamp) for each of
those sets are removed from the passed list of message references. At this
point, the passed list of message references contains all the messages we
expect to be removed so it is converted to an array and returned. But this list
should contain all those messages that should be retained - not intended
behaviour.
The patch contains the necessary changes to
UniquePropertyMessageEvictionStrategy to prevent this memory leak and an
assertion added to the UniquePropertyMessageEvictionStrategyTest.testEviction
to demonstrate the memory is correctly freed after applying the fix.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)