Kevin Earls created AMQ-4920: -------------------------------- Summary: AmqpErrorException occurs with multiple concurrent amqp topic consumers Key: AMQ-4920 URL: https://issues.apache.org/jira/browse/AMQ-4920 Project: ActiveMQ Issue Type: Bug Reporter: Kevin Earls Assignee: Kevin Earls
I'll add a test to reproduce this. There are currently 2 problems. The more frequent one looks like: org.apache.qpid.amqp_1_0.type.AmqpErrorException at org.apache.qpid.amqp_1_0.codec.ValueHandler.readConstructor(ValueHandler.java:99) at org.apache.qpid.amqp_1_0.codec.ValueHandler.parse(ValueHandler.java:90) at org.apache.qpid.amqp_1_0.codec.ValueHandler.readConstructor(ValueHandler.java:105) at org.apache.qpid.amqp_1_0.codec.ValueHandler.parse(ValueHandler.java:90) … repeated many times at org.apache.qpid.amqp_1_0.codec.ValueHandler.readConstructor(ValueHandler.java:105) at org.apache.qpid.amqp_1_0.codec.ValueHandler.parse(ValueHandler.java:90) at org.apache.qpid.amqp_1_0.messaging.SectionDecoderImpl.parseAll(SectionDecoderImpl.java:49) at org.apache.qpid.amqp_1_0.client.Receiver.receive(Receiver.java:280) at org.apache.qpid.amqp_1_0.jms.impl.MessageConsumerImpl.receive0(MessageConsumerImpl.java:286) at org.apache.qpid.amqp_1_0.jms.impl.MessageConsumerImpl.receiveImpl(MessageConsumerImpl.java:255) at org.apache.qpid.amqp_1_0.jms.impl.MessageConsumerImpl.receive(MessageConsumerImpl.java:238) at org.apache.qpid.amqp_1_0.jms.impl.MessageConsumerImpl.receive(MessageConsumerImpl.java:56) at org.apache.activemq.transport.amqp.ENTMQ466ConsumerThread.run(ENTMQ466Test.java:123) This occurs at the line "final EncodedMessage amqp = outboundTransformer.transform(jms);" in the ConsumerContext.pumpOutbound() method of AmqpProtocolConverter(). This call sometimes returns with its content (amqp.getArray()) set to all zeros. On those messages this line LOG.info("In pumpOutbound, setting currentBuffer to offset {} length {} content [{}]", amqp.getArrayOffset(), amqp.getLength(), amqp.getArray()); returns: 2013-11-26 17:19:16,680 [calhost] Task-3] - INFO AmqpProtocolConverter - In pumpOutbound, setting currentBuffer to offset 0 length 162 content [[0, 0, 0, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0\ , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]] At the root of this, outboundTransformer is a (proton) AutoOutboundTransformer. It calls AMQPNativeOutboundTransformer.transform(), which calls msg.readBytes(data), which sometimes writes all 0s to data. Here msg is an ActiveMQBytesMessage. -- This message was sent by Atlassian JIRA (v6.1#6144)