You are viewing a plain text version of this content. The canonical link for it is here.
Posted to gitbox@activemq.apache.org by GitBox <gi...@apache.org> on 2019/05/21 05:15:14 UTC
[GitHub] [activemq] borgstrom opened a new pull request #359: AMQ-7211
STOMP: Do not clear pending ACKs on COMMIT
borgstrom opened a new pull request #359: AMQ-7211 STOMP: Do not clear pending ACKs on COMMIT
URL: https://github.com/apache/activemq/pull/359
This PR first adds a test that proves the behavior is broken: c3729b0
When you run this test against master it will fail:
```
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running org.apache.activemq.transport.stomp.Stomp12Test
Tests run: 1, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 62.016 sec <<< FAILURE! - in org.apache.activemq.transport.stomp.Stomp12Test
testClientIndividualAckPrefetchTransaction(org.apache.activemq.transport.stomp.Stomp12Test) Time elapsed: 61.822 sec <<< FAILURE!
java.lang.AssertionError: null
at org.junit.Assert.fail(Assert.java:86)
at org.junit.Assert.assertTrue(Assert.java:41)
at org.junit.Assert.assertTrue(Assert.java:52)
at org.apache.activemq.transport.stomp.Stomp12Test.testClientIndividualAckPrefetchTransaction(Stomp12Test.java:413)
Results :
Failed tests:
Stomp12Test.testClientIndividualAckPrefetchTransaction:413 null
Tests run: 1, Failures: 1, Errors: 0, Skipped: 0
```
The test output shows:
```
2019-05-20 21:54:48,711 [0.1:55337@55324] - WARN ProtocolConverter - Exception occurred processing: ACK -> org.apache.activemq.transport.stomp.ProtocolException: Unexpected ACK received for message-id [null]
2019-05-20 21:54:48,712 [0.1:55337@55324] - DEBUG ProtocolConverter - Exception detail
org.apache.activemq.transport.stomp.ProtocolException: Unexpected ACK received for message-id [null]
at org.apache.activemq.transport.stomp.ProtocolConverter.onStompAck(ProtocolConverter.java:476)
at org.apache.activemq.transport.stomp.ProtocolConverter.onStompCommand(ProtocolConverter.java:251)
at org.apache.activemq.transport.stomp.StompTransportFilter.onCommand(StompTransportFilter.java:85)
at org.apache.activemq.transport.TransportSupport.doConsume(TransportSupport.java:83)
at org.apache.activemq.transport.tcp.TcpTransport.doRun(TcpTransport.java:233)
at org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:215)
at java.lang.Thread.run(Thread.java:748)
```
Which is the exception I reported in https://issues.apache.org/jira/browse/AMQ-7211
The fix for this (be19dcaa3) is simply to NOT clear pending ACKs on transaction COMMIT & ABORT.
Looking at the ticket referenced in the commit that added the `pedingAcks.clear()` lines (52d95ee01 / https://issues.apache.org/jira/browse/AMQ-5423) I believe that changing the `this.pedingAcks.get` to `this.pedingAcks.remove` is the real solution to the memory leak that prompted the change and that clearing the acks at the end of a transaction is not needed and incorrect behavior.
CC @tabish121 -- since you commited 52d95ee01 and worked on AMQ-5423
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
With regards,
Apache Git Services