java.lang.RuntimeException: AMQ119028: Timeout waiting for LargeMessage Body
at org.apache.activemq.artemis.core.client.impl.LargeMessageControllerImpl.waitCompletion(LargeMessageControllerImpl.java:313)
at org.apache.activemq.artemis.core.client.impl.LargeMessageControllerImpl.saveBuffer(LargeMessageControllerImpl.java:276)
at org.apache.activemq.artemis.core.client.impl.ClientLargeMessageImpl.checkBuffer(ClientLargeMessageImpl.java:161)
at org.apache.activemq.artemis.core.client.impl.ClientLargeMessageImpl.getBodyBuffer(ClientLargeMessageImpl.java:89)
at org.apache.activemq.artemis.tests.integration.client.PagingTest.testDLAOnLargeMessageAndPaging(PagingTest.java:4157)
ERROR [org.apache.activemq.artemis.core.server] AMQ224016: Caught exception: ActiveMQIllegalStateException[errorType=ILLEGAL_STATE message=AMQ119027: Could not find reference on consumer ID=0, messageId = 59 queue = SimpleAddress] at org.apache.activemq.artemis.core.server.impl.ServerConsumerImpl.acknowledge(ServerConsumerImpl.java:664) [artemis-server-1.1.0.wildfly-012.jar:] at org.apache.activemq.artemis.core.server.impl.ServerSessionImpl.acknowledge(ServerSessionImpl.java:706) [artemis-server-1.1.0.wildfly-012.jar:] at org.apache.activemq.artemis.core.protocol.core.ServerSessionPacketHandler.handlePacket(ServerSessionPacketHandler.java:275) [artemis-server-1.1.0.wildfly-012.jar:] at org.apache.activemq.artemis.core.protocol.core.impl.ChannelImpl.handlePacket(ChannelImpl.java:567) [artemis-core-client-1.1.0.wildfly-012.jar:] at org.apache.activemq.artemis.core.protocol.core.impl.RemotingConnectionImpl.doBufferReceived(RemotingConnectionImpl.java:349) [artemis-core-client-1.1.0.wildfly-012.jar:] at org.apache.activemq.artemis.core.protocol.core.impl.RemotingConnectionImpl.bufferReceived(RemotingConnectionImpl.java:331) [artemis-core-client-1.1.0.wildfly-012.jar:] at org.apache.activemq.artemis.core.remoting.server.impl.RemotingServiceImpl$DelegatingBufferHandler.bufferReceived(RemotingServiceImpl.java:605) [artemis-server-1.1.0.wildfly-012.jar:] at org.apache.activemq.artemis.core.remoting.impl.invm.InVMConnection$1.run(InVMConnection.java:171) [artemis-server-1.1.0.wildfly-012.jar:] at org.apache.activemq.artemis.utils.OrderedExecutorFactory$OrderedExecutor$ExecutorTask.run(OrderedExecutorFactory.java:100) [artemis-core-client-1.1.0.wildfly-012.jar:] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [rt.jar:1.8.0_71] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [rt.jar:1.8.0_71] at java.lang.Thread.run(Thread.java:745) [rt.jar:1.8.0_71]
I've found out what happened but I am not sure if it is bug or wrong test.
Problem lies in [1]. Server sends messages to consumer and holds references of sent messages. Consumer receives messages and holds them in buffer in which they wait for processing. Imagine a situation:
- Server sent 10 messages (msg1...msg10)
- Consumer received 9 messages (msg1...msg9)
- Msg10 is somewhere on net
- We call session.rollback
- Consumer clear his buffer
- Server clear his buffer
- Msg10 is delivered to consumer
- We call consumer.receive and we get Msg10 instead of Msg1
Is it bug or this situation should be treated by the test code?
[1]
for (int i = 0; i < 5; i++) { ClientMessage msg = cons.receive(5000); assertNotNull(msg); msg.acknowledge(); for (int j = 0; j < messageSize; j++) { assertEquals(getSamplebyte(j), msg.getBodyBuffer().readByte()); } session.rollback(); }
- blocks
-
JBEAP-2574 Stabilization of ActiveMQ Artemis upstream test suite
- Closed