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)

Reply via email to