[ 
https://issues.apache.org/jira/browse/AMQ-5851?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14597520#comment-14597520
 ] 

Gary Tully commented on AMQ-5851:
---------------------------------

[~christopher.l.shannon] great detail ;-). Seems that the broker reaction to 
the expiredAck is excessive. maybe that should be treated as a 
single/individual ack and just remove the single message that has expired, it 
can check the count attribute to ensure it should match a single message. 
Currently in prefetchsub there is a check on all dispatched messages which 
seems excessive in this scenario. I think that is the crux of the problem.

For a long time, there was no message expiry processing thread so the only 
checks were on dispatch, it seems when there is periodic expiry some of the 
additional checks are candidates from removal.

> Unmatched acknowledge: MessageAck {commandId = 77, responseRequired = false, 
> ackType = 2, ...Could not find Message-ID XXX in dispatched-list (start of 
> ack)
> ------------------------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: AMQ-5851
>                 URL: https://issues.apache.org/jira/browse/AMQ-5851
>             Project: ActiveMQ
>          Issue Type: Bug
>          Components: JMS client
>    Affects Versions: 5.10.0, 5.11.0, 5.11.1
>            Reporter: Grijesh Saini
>              Labels: ttl
>         Attachments: AcknowledgeIssue.zip
>
>
> When lot of messages got expired because of JMS client Time to Live (TTL) 
> property then below error will appear and consumer will freeze
> {code:xml}
>  Connection to broker failed: Unmatched acknowledge: MessageAck {commandId = 
> 77, responseRequired = false, ackType = 2, consumerId =XXX firstMessageId = 
> ID:XXX
>  lastMessageId = ID:XXX
> , destination = queue://abc, transactionId = null, messageCount = 1, 
> poisonCause = null}; Could not find Message-ID in dispatched-list (start of 
> ack)
>          at 
> org.apache.activemq.broker.region.PrefetchSubscription.assertAckMatchesDispatched(PrefetchSubscription.java:477)
>  [activemq-broker-5.11.1.jar:5.11.1
>  at 
> org.apache.activemq.broker.region.PrefetchSubscription.acknowledge(PrefetchSubscription.java:212)
>  [activemq-broker-5.11.1.jar:5.11.1]
>  at 
> org.apache.activemq.broker.region.AbstractRegion.acknowledge(AbstractRegion.java:441)
>  [activemq-broker-5.11.1.jar:5.11.1]
>  at 
> org.apache.activemq.broker.region.RegionBroker.acknowledge(RegionBroker.java:484)
>  [activemq-broker-5.11.1.jar:5.11.1]
>  at org.apache.activemq.broker.BrokerFilter.acknowledge(BrokerFilter.java:87) 
> [activemq-broker-5.11.1.jar:5.11.1]
>  at org.apache.activemq.broker.BrokerFilter.acknowledge(BrokerFilter.java:87) 
> [activemq-broker-5.11.1.jar:5.11.1]
>  at 
> org.apache.activemq.broker.TransactionBroker.acknowledge(TransactionBroker.java:277)
>  [activemq-broker-5.11.1.jar:5.11.1]
>  at 
> org.apache.activemq.broker.MutableBrokerFilter.acknowledge(MutableBrokerFilter.java:97)
>  [activemq-broker-5.11.1.jar:5.11.1]
>  at 
> org.apache.activemq.broker.TransportConnection.processMessageAck(TransportConnection.java:550)
>  [activemq-broker-5.11.1.jar:5.11.1]
>  at org.apache.activemq.command.MessageAck.visit(MessageAck.java:245) 
> [activemq-client-5.11.1.jar:5.11.1]
>  at 
> org.apache.activemq.broker.TransportConnection.service(TransportConnection.java:334)
>  [activemq-broker-5.11.1.jar:5.11.1]
>  at 
> org.apache.activemq.broker.TransportConnection$1.onCommand(TransportConnection.java:188)
>  [activemq-broker-5.11.1.jar:5.11.1]
>  at 
> org.apache.activemq.transport.MutexTransport.onCommand(MutexTransport.java:50)
>  [activemq-client-5.11.1.jar:5.11.1]
>  at 
> org.apache.activemq.transport.WireFormatNegotiator.onCommand(WireFormatNegotiator.java:113)
>  [activemq-client-5.11.1.jar:5.11.1]
>  at 
> org.apache.activemq.transport.AbstractInactivityMonitor.onCommand(AbstractInactivityMonitor.java:270)
>  [activemq-client-5.11.1.jar:5.11.1]
>  at 
> org.apache.activemq.transport.TransportSupport.doConsume(TransportSupport.java:83)
>  [activemq-client-5.11.1.jar:5.11.1]
>  at 
> org.apache.activemq.transport.tcp.TcpTransport.doRun(TcpTransport.java:214) 
> [activemq-client-5.11.1.jar:5.11.1]
>  at org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:196) 
> [activemq-client-5.11.1.jar:5.11.1]
>  at java.lang.Thread.run(Thread.java:745) [rt.jar:1.8.0_25]
> {code}
> Steps to reproduce :
> 1. Enable TTL property for JMS client
> 2. Keep TTL value very low say 5 sec
> 3. Send lot of messages so some message will get expired
> 4. Make sure that some message should expired when they are in MDB means 
> running inside MDB
> Then we will see above error in the logs



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to