activemq-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "ying (JIRA)" <>
Subject [jira] Commented: (AMQ-2102) Master/slave out of sync with multiple consumers
Date Wed, 04 Mar 2009 23:23:59 GMT


ying commented on AMQ-2102:

thanks for the comment. 

from my approach, the attached patch seems work and I haven't seen a failure using 5000 msg
and 16 consumers and i will do more load test maybe. and my master/slave are on the same machine.

The thing that seems strange to me is the block in preProcessDispatch to sendAsyncToSlave
if temporary queue and sendSyncToSlave if persistent queue makes a difference. do you see
an explanation? because if no code change for this, i will only see the same error for temporary
queue messages and persistent queue with the addConsumer fix is fine.

your approach seems better, if you can have more control on the slave side. please share what
you have and i may dig in that route.


> Master/slave out of sync with multiple consumers
> ------------------------------------------------
>                 Key: AMQ-2102
>                 URL:
>             Project: ActiveMQ
>          Issue Type: Bug
>          Components: Broker
>    Affects Versions: 5.2.0
>            Reporter: Dan James
>            Assignee: Gary Tully
>         Attachments: master.xml,, MasterSlavePatch.patch, slave.xml
> I'm seeing exceptions like this in a simple master/slave setup:
> ERROR Service                        - Async error occurred: javax.jms.JMSException:
Slave broker out of sync with master: Dispatched message (ID:DUL1SJAMES-L2-1231-1233929569359-0:4:1:1:207)
was not in the pending list for MasterSlaveBug
> javax.jms.JMSException: Slave broker out of sync with master: Dispatched message (ID:DUL1SJAMES-L2-1231-1233929569359-0:4:1:1:207)
was not in the pending list for MasterSlaveBug
> The problem only happens when there are multiple consumers listening to the queue, and
is more likely to occur as there are more consumers listening.  I've written a test program
that demonstrates the problem.
> I start the master and slave with an empty data directory and let them both startup and
settle.  Then start the test program.  The test program creates a specified number of consumers,
and then starts queuing 256 messages.  The consumers process the message by sending a reply.
 The producer counts the replies.  Both consumers and the producer see all the messages, but
with multiple consumers it is very likely that the error above will occur and several of the
messages will still be queued on the slave.
> While debugging through the activemq code, I noticed that both the master and the slave
dispatch the message to a consumer's pending list independently.  In other words, it is possible
that the master will add the message to consumer A's pending list and the slave will add the
message to consumer B's pending list.  Once the message has been processed by consumer A,
the master sends a message to the slaving which specifies consumer A so that the slave can
remove the message.  The slave looks on its copy of consumer A's pending list and cannot find
the message.  As a result, it throws this exception and the message stays stuck on consumer
B's pending list on the slave.
> Master and slave configurations along with are attached to this issue.
> Start master and slave brokers:
> activemq xbean:master.xml
> activemq xbean:slave.xml
> Run with (only one consumer, the bug does not appear):
>    java -classpath .:activemq-all-5.2.0.jar MasterSlaveBug 1
> Run with (sixteen consumers, the bug does appear):
>    java -classpath .:activemq-all-5.2.0.jar MasterSlaveBug 16

This message is automatically generated by JIRA.
You can reply to this email to add a comment to the issue online.

View raw message