Sergiy Barlabanov created AMQ-5136:
--------------------------------------
Summary: MemoryUsage is not decremented on a JMS topic when
rolling back a transacted session ->
Key: AMQ-5136
URL: https://issues.apache.org/jira/browse/AMQ-5136
Project: ActiveMQ
Issue Type: Bug
Components: Broker
Affects Versions: 5.9.0, 5.8.0
Reporter: Sergiy Barlabanov
When sending a message to a topic using a transacted session, memory usage is
not decremented correctly when session.rollback is called. It is decremented on
commit but not on rollback. This has quite bad consequences since after some
time depending on the system memory usage settings and amount of rolled back
messages, the broker starts to reject messages saying that Usage Manager memory
limit is reached. The only solution is to restart the broker.
I created a small Maven project (see the attachment) with a unit test starting
an embedded broker and two test methods: one sending messages with
session.commit and another with session.rollback(). The last one fails to
assert the memory usage. In the output one can see quite a lot of error logs
written by ActiveMQ. The problem is reproducible with 5.8.0 and 5.9.0.
The problem seems to be in
org.apache.activemq.broker.region.Topic#doMessageSend method where a
transaction synchronization is registered. In the transaction synchronization
only afterCommit is supplied, but no afterRollback. So there seems to be nobody
calling message.decrementReferenceCount().
--
This message was sent by Atlassian JIRA
(v6.2#6252)