-
Bug
-
Resolution: Done
-
Blocker
-
EAP_EWP 5.1.2 CR2
-
None
-
Not Required
There is issue with producer which does not block when queue is full and block policy is used. This happens only after producer successly failovered to backup. After failover producer continue to send messages to backup but after some time it starts to retry send() of the message like during failover.
Test scenario:
1. Start server A and B in collocated topology - servers contain backup for each other
2. Start producer connected to server A - clients are active for the whole duration of the test
3. Server A is killed -> clients failover to backup on server B
4. Wait until all messages are read
I've attached NetBeans project with jms client which is used in reproducer.
How to reproduce:
1. copy following zip from messaging lab and then unzip:
scp messaging-05:/home/hudson/users-tmp/mnovak/tmp/reproducer.zip .
(alternative download it from hudson - https://hudson.qa.jboss.com/hudson/view/EAP5/view/HornetQ/job/_hornetq-RHEL4-x86-SunJDK1.6-AIO/ws/reproducer.zip)
2. start server A in a new console - sh start-server1.sh 127.0.0.1
3. start server B in a new console - sh start-server2.sh 127.0.0.2
4. start producer in a new console - sh start_producer.sh 127.0.0.1
5. start one more producer in a new console - sh start_producer.sh 127.0.0.1
6. kill server A using - kill -9 ... (jps -m - shows processes)
7. See that producers failovered to backup and continue to send messages - after some time when queue is full then producers won't block but do retry send():
Producer for node: messaging-19. Sent message with property count: 15441, messageId:ID:0415f416-2706-11e1-a762-001b217d6d91
Producer for node: messaging-19. Sent message with property count: 15442, messageId:ID:0417c8d7-2706-11e1-a762-001b217d6d91
javax.jms.JMSException: Timed out waiting for response when sending packet 71
at org.hornetq.core.protocol.core.impl.ChannelImpl.sendBlocking(ChannelImpl.java:302)
at org.hornetq.core.client.impl.ClientProducerImpl.doSend(ClientProducerImpl.java:287)
at org.hornetq.core.client.impl.ClientProducerImpl.send(ClientProducerImpl.java:142)
at org.hornetq.jms.client.HornetQMessageProducer.doSend(HornetQMessageProducer.java:451)
at org.hornetq.jms.client.HornetQMessageProducer.send(HornetQMessageProducer.java:199)
at org.jboss.qa.hornetq.TestProducer.startClient(TestProducer.java:78)
at org.jboss.qa.hornetq.TestProducer.main(TestProducer.java:36)
Caused by: HornetQException[errorCode=3 message=Timed out waiting for response when sending packet 71]
... 7 more
Sender RETRY (2) Sent message: 15443
javax.jms.JMSException: Timed out waiting for response when sending packet 71
at org.hornetq.core.protocol.core.impl.ChannelImpl.sendBlocking(ChannelImpl.java:302)
at org.hornetq.core.client.impl.ClientProducerImpl.doSend(ClientProducerImpl.java:287)
at org.hornetq.core.client.impl.ClientProducerImpl.send(ClientProducerImpl.java:142)
at org.hornetq.jms.client.HornetQMessageProducer.doSend(HornetQMessageProducer.java:451)
at org.hornetq.jms.client.HornetQMessageProducer.send(HornetQMessageProducer.java:199)
at org.jboss.qa.hornetq.TestProducer.resendMessage(TestProducer.java:132)
at org.jboss.qa.hornetq.TestProducer.startClient(TestProducer.java:84)
at org.jboss.qa.hornetq.TestProducer.main(TestProducer.java:36)
Caused by: HornetQException[errorCode=3 message=Timed out waiting for response when sending packet 71]
... 8 more
Sender RETRY (3) Sent message: 15443