[
https://issues.apache.org/activemq/browse/AMQ-2439?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Colin MacNaughton reopened AMQ-2439:
------------------------------------
Assignee: Colin MacNaughton (was: Gary Tully)
Regression: [Regression]
Seeing the exception below in a 2 broker cluster with this fix which is causing
the cluster network connection to be dropped. When an MessageDispatch that was
sent async is sent through the bridge, it is sent oneway over the transport and
then acked back to the local broker in the sending thread. The problem is that
peer broker might concurrently be closing the subscription during the send, and
the resulting ack now generates an IllegalStateException when the subscription
isn't found. To fix, I'm adding tighter synchronization around subscription
tear down to avoid this case. (See attached patch)
{code}
22:19:55 [REMOTE] BROKER1: 22:19:55 WARN AbstractRegion: Ack for non existent
subscription, ack:MessageAck {commandId = 8392, responseRequired = false,
ackType = 4,
consumerId = ID:nbcmacnaug1-3881-1257920362625-5:1:1:6, firstMessageId = null,
lastMessageId = ID:nbcmacnaug1-3919-1257920382750-1:14:1:1:1236,
destination = queue://QUEUE-Profile-6, transactionId = null, messageCount = 1}
22:19:55 [REMOTE] BROKER1: 22:19:55 WARN Service: Async error occurred:
java.lang.IllegalArgumentException: The subscription does not exist:
ID:nbcmacnaug1-3881-1257920362625-5:1:1:6
22:19:55 [REMOTE] BROKER1: java.lang.IllegalArgumentException: The subscription
does not exist: ID:nbcmacnaug1-3881-1257920362625-5:1:1:6
22:19:55 [REMOTE] BROKER1: at
org.apache.activemq.broker.region.AbstractRegion.acknowledge(AbstractRegion.java:363)
22:19:55 [REMOTE] BROKER1: at
org.apache.activemq.broker.region.RegionBroker.acknowledge(RegionBroker.java:470)
22:19:55 [REMOTE] BROKER1: at
org.apache.activemq.broker.TransactionBroker.acknowledge(TransactionBroker.java:194)
22:19:55 [REMOTE] BROKER1: at
org.apache.activemq.broker.BrokerFilter.acknowledge(BrokerFilter.java:74)
22:19:55 [REMOTE] BROKER1: at
org.apache.activemq.broker.BrokerFilter.acknowledge(BrokerFilter.java:74)
22:19:55 [REMOTE] BROKER1: at
org.apache.activemq.broker.MutableBrokerFilter.acknowledge(MutableBrokerFilter.java:85)
22:19:55 [REMOTE] BROKER1: at
org.apache.activemq.broker.TransportConnection.processMessageAck(TransportConnection.java:449)
22:19:55 [REMOTE] BROKER1: at
org.apache.activemq.command.MessageAck.visit(MessageAck.java:205)
22:19:55 [REMOTE] BROKER1: at
org.apache.activemq.broker.TransportConnection.service(TransportConnection.java:297)
22:19:55 [REMOTE] BROKER1: at
org.apache.activemq.broker.TransportConnection$1.onCommand(TransportConnection.java:175)
22:19:55 [REMOTE] BROKER1: at
org.apache.activemq.transport.ResponseCorrelator.onCommand(ResponseCorrelator.java:109)
22:19:55 [REMOTE] BROKER1: at
org.apache.activemq.transport.TransportFilter.onCommand(TransportFilter.java:68)
22:19:55 [REMOTE] BROKER1: at
org.apache.activemq.transport.vm.VMTransport.oneway(VMTransport.java:112)
22:19:55 [REMOTE] BROKER1: at
org.apache.activemq.transport.MutexTransport.oneway(MutexTransport.java:40)
22:19:55 [REMOTE] BROKER1: at
org.apache.activemq.transport.ResponseCorrelator.oneway(ResponseCorrelator.java:60)
22:19:55 [REMOTE] BROKER1: at
org.apache.activemq.network.DemandForwardingBridgeSupport.serviceLocalCommand(DemandForwardingBridgeSupport.java:708)
22:19:55 [REMOTE] BROKER1: at
org.apache.activemq.network.DemandForwardingBridgeSupport$1.onCommand(DemandForwardingBridgeSupport.java:159)
22:19:55 [REMOTE] BROKER1: at
org.apache.activemq.transport.ResponseCorrelator.onCommand(ResponseCorrelator.java:109)
22:19:55 [REMOTE] BROKER1: at
org.apache.activemq.transport.TransportFilter.onCommand(TransportFilter.java:68)
22:19:55 [REMOTE] BROKER1: at
org.apache.activemq.transport.vm.VMTransport.oneway(VMTransport.java:112)
22:19:55 [REMOTE] BROKER1: at
org.apache.activemq.transport.MutexTransport.oneway(MutexTransport.java:40)
22:19:55 [REMOTE] BROKER1: at
org.apache.activemq.transport.ResponseCorrelator.oneway(ResponseCorrelator.java:60)
22:19:55 [REMOTE] BROKER1: at
org.apache.activemq.broker.TransportConnection.dispatch(TransportConnection.java:1190)
22:19:55 [REMOTE] BROKER1: at
org.apache.activemq.broker.TransportConnection.processDispatch(TransportConnection.java:779)
22:19:55 [REMOTE] BROKER1: at
org.apache.activemq.broker.TransportConnection.iterate(TransportConnection.java:815)
22:19:55 [REMOTE] BROKER1: at
org.apache.activemq.thread.PooledTaskRunner.runTask(PooledTaskRunner.java:122)
22:19:55 [REMOTE] BROKER1: at
org.apache.activemq.thread.PooledTaskRunner$1.run(PooledTaskRunner.java:43)
22:19:55 [REMOTE] BROKER1: at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
22:19:55 [REMOTE] BROKER1: at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
22:19:55 [REMOTE] BROKER1: at java.lang.Thread.run(Thread.java:595)
{code}
> KahaDB + Network of Brokers + Restart = Duplicate Messages that cannot be
> removed from the data store
> -----------------------------------------------------------------------------------------------------
>
> Key: AMQ-2439
> URL: https://issues.apache.org/activemq/browse/AMQ-2439
> Project: ActiveMQ
> Issue Type: Bug
> Components: Broker, Message Store
> Reporter: Hiram Chirino
> Assignee: Colin MacNaughton
> Fix For: 5.3.0
>
> Attachments: amq2439-patch.diff
>
>
> Every time the broker is restarted, the same set of duplicate messages get
> redelivered to consumers.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.