[ 
https://issues.apache.org/jira/browse/QPID-6055?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14115723#comment-14115723
 ] 

Rob Godfrey commented on QPID-6055:
-----------------------------------

Can you give a little more information on how to reproduce this error?

Looking at the stack trace the error occurs here 

{noformat}
1336                return 
ByteBuffer.wrap(data,offsetInMessage,Math.min(size,data.length-offsetInMessage));
{noformat}

which comes (via one intermediate call) from here in 
MessageContentSourceBody.writePayload:

{noformat}
249         public void writePayload(DataOutput buffer) throws IOException
250         {
251             ByteBuffer buf = _message.getContent(_offset, _length);
252 
{noformat}

and the MessageContentSourceBody would come from line 202 here (because the 
path up from the exception leads through line 207

{noformat}
195             int maxBodySize = (int) getProtocolSession().getMaxFrameSize() 
- AMQFrame.getFrameOverhead();
196 
197 
198             int capacity = bodySize > maxBodySize ? maxBodySize : bodySize;
199 
200             int writtenSize = capacity;
201 
202             AMQBody firstContentBody = new 
MessageContentSourceBody(message, 0, capacity);
203 
204             CompositeAMQBodyBlock
205                     compositeBlock =
206                     new CompositeAMQBodyBlock(channelId, deliverBody, 
contentHeaderBody, firstContentBody);
207             writeFrame(compositeBlock);
{noformat}

which would imply that the MessageContentSourceBody encountering the error is 
the one created with offset 0 and length capacity.  To get an index out of 
bounds that would mean that the data array is smaller than capacity.  But 
capacity is defined to be less than bodySize from line 198 above... so 
something very fishy would appear to be going on :-(



> [Java Broker] BDB Message Store can thow java.lang.IndexOutOfBoundsException 
> on trying to retrieve the message content
> ----------------------------------------------------------------------------------------------------------------------
>
>                 Key: QPID-6055
>                 URL: https://issues.apache.org/jira/browse/QPID-6055
>             Project: Qpid
>          Issue Type: Bug
>    Affects Versions: 0.30
>            Reporter: Alex Rudyy
>            Priority: Blocker
>
> Perftests failed because Broker crashed and disconnected the clients in 
> result of the following Exception:
> {noformat}
> 2014-08-28 06:36:00,595 ERROR [IoReceiver - /127.0.0.1:43858] 
> (v0_8.AMQProtocolEngine) - Error informing channel that receiving is 
> complete. Channel: (false, false, false) [/127.0.0.1:43858(guest):1]
> java.lang.IndexOutOfBoundsException
>         at java.nio.ByteBuffer.wrap(ByteBuffer.java:371)
>         at 
> org.apache.qpid.server.store.berkeleydb.AbstractBDBMessageStore$StoredBDBMessage.getContent(AbstractBDBMessageStore.java:1336)
>         at 
> org.apache.qpid.server.message.AbstractServerMessageImpl.getContent(AbstractServerMessageImpl.java:171)
>         at 
> org.apache.qpid.server.protocol.v0_8.output.ProtocolOutputConverterImpl$MessageContentSourceBody.writePayload(ProtocolOutputConverterImpl.java:251)
>         at org.apache.qpid.framing.AMQFrame.writeFrames(AMQFrame.java:123)
>         at 
> org.apache.qpid.server.protocol.v0_8.output.ProtocolOutputConverterImpl$CompositeAMQBodyBlock.writePayload(ProtocolOutputConverterImpl.java:461)
>         at 
> org.apache.qpid.server.protocol.v0_8.AMQProtocolEngine.asByteBuffer(AMQProtocolEngine.java:590)
>         at 
> org.apache.qpid.server.protocol.v0_8.AMQProtocolEngine.writeFrame(AMQProtocolEngine.java:704)
>         at 
> org.apache.qpid.server.protocol.v0_8.output.ProtocolOutputConverterImpl.writeFrame(ProtocolOutputConverterImpl.java:423)
>         at 
> org.apache.qpid.server.protocol.v0_8.output.ProtocolOutputConverterImpl.writeMessageDeliveryUnchanged(ProtocolOutputConverterImpl.java:207)
>         at 
> org.apache.qpid.server.protocol.v0_8.output.ProtocolOutputConverterImpl.writeMessageDelivery(ProtocolOutputConverterImpl.java:141)
>         at 
> org.apache.qpid.server.protocol.v0_8.output.ProtocolOutputConverterImpl.writeMessageDelivery(ProtocolOutputConverterImpl.java:101)
>         at 
> org.apache.qpid.server.protocol.v0_8.output.ProtocolOutputConverterImpl.writeDeliver(ProtocolOutputConverterImpl.java:78)
>         at 
> org.apache.qpid.server.protocol.v0_8.AMQProtocolEngine$WriteDeliverMethod.deliverToClient(AMQProtocolEngine.java:1621)
>         at 
> org.apache.qpid.server.protocol.v0_8.ConsumerTarget_0_8.sendToClient(ConsumerTarget_0_8.java:513)
>         at 
> org.apache.qpid.server.protocol.v0_8.ConsumerTarget_0_8$AckConsumer.send(ConsumerTarget_0_8.java:317)
>         at 
> org.apache.qpid.server.queue.QueueConsumerImpl.send(QueueConsumerImpl.java:474)
>         at 
> org.apache.qpid.server.queue.AbstractQueue.deliverMessage(AbstractQueue.java:1252)
>         at 
> org.apache.qpid.server.queue.AbstractQueue.deliverToConsumer(AbstractQueue.java:1166)
>         at 
> org.apache.qpid.server.queue.AbstractQueue.tryDeliverStraightThrough(AbstractQueue.java:1122)
>         at 
> org.apache.qpid.server.queue.AbstractQueue.access$100(AbstractQueue.java:96)
>         at 
> org.apache.qpid.server.queue.AbstractQueue$6.run(AbstractQueue.java:1010)
>         at 
> org.apache.qpid.server.queue.AbstractQueue$6.run(AbstractQueue.java:1006)
>         at java.security.AccessController.doPrivileged(Native Method)
>         at javax.security.auth.Subject.doAs(Subject.java:356)
>         at 
> org.apache.qpid.server.queue.AbstractQueue.doEnqueue(AbstractQueue.java:1004)
>         at 
> org.apache.qpid.server.queue.SortedQueueImpl.doEnqueue(SortedQueueImpl.java:61)
>         at 
> org.apache.qpid.server.queue.AbstractQueue.enqueue(AbstractQueue.java:953)
>         at 
> org.apache.qpid.server.exchange.AbstractExchange$2.postCommit(AbstractExchange.java:560)
>         at 
> org.apache.qpid.server.protocol.v0_8.AMQChannel$AsyncCommand.complete(AMQChannel.java:1696)
>         at 
> org.apache.qpid.server.protocol.v0_8.AMQChannel.sync(AMQChannel.java:1666)
>         at 
> org.apache.qpid.server.protocol.v0_8.AMQChannel.receivedComplete(AMQChannel.java:266)
>         at 
> org.apache.qpid.server.protocol.v0_8.AMQProtocolEngine.receivedComplete(AMQProtocolEngine.java:368)
>         at 
> org.apache.qpid.server.protocol.v0_8.AMQProtocolEngine.access$1200(AMQProtocolEngine.java:89)
>         at 
> org.apache.qpid.server.protocol.v0_8.AMQProtocolEngine$2.run(AMQProtocolEngine.java:328)
>         at 
> org.apache.qpid.server.protocol.v0_8.AMQProtocolEngine$2.run(AMQProtocolEngine.java:283)
>         at java.security.AccessController.doPrivileged(Native Method)
>         at javax.security.auth.Subject.doAs(Subject.java:356)
>         at 
> org.apache.qpid.server.protocol.v0_8.AMQProtocolEngine.received(AMQProtocolEngine.java:282)
>         at 
> org.apache.qpid.server.protocol.v0_8.AMQProtocolEngine.received(AMQProtocolEngine.java:89)
>         at 
> org.apache.qpid.server.protocol.MultiVersionProtocolEngine.received(MultiVersionProtocolEngine.java:133)
>         at 
> org.apache.qpid.server.protocol.MultiVersionProtocolEngine.received(MultiVersionProtocolEngine.java:49)
>         at 
> org.apache.qpid.transport.network.io.IoReceiver.run(IoReceiver.java:161)
>         at java.lang.Thread.run(Thread.java:745)
> 2014-08-28 06:36:00,598 ERROR [IoReceiver - /127.0.0.1:43858] 
> (v0_8.AMQProtocolEngine) - Exception caught in /127.0.0.1:43858(guest), 
> closing connection explicitly: java.lang.IndexOutOfBoundsException
> java.lang.IndexOutOfBoundsException
>         at java.nio.ByteBuffer.wrap(ByteBuffer.java:371)
>         at 
> org.apache.qpid.server.store.berkeleydb.AbstractBDBMessageStore$StoredBDBMessage.getContent(AbstractBDBMessageStore.java:1336)
>         at 
> org.apache.qpid.server.message.AbstractServerMessageImpl.getContent(AbstractServerMessageImpl.java:171)
>         at 
> org.apache.qpid.server.protocol.v0_8.output.ProtocolOutputConverterImpl$MessageContentSourceBody.writePayload(ProtocolOutputConverterImpl.java:251)
>         at org.apache.qpid.framing.AMQFrame.writeFrames(AMQFrame.java:123)
>         at 
> org.apache.qpid.server.protocol.v0_8.output.ProtocolOutputConverterImpl$CompositeAMQBodyBlock.writePayload(ProtocolOutputConverterImpl.java:461)
>         at 
> org.apache.qpid.server.protocol.v0_8.AMQProtocolEngine.asByteBuffer(AMQProtocolEngine.java:590)
>         at 
> org.apache.qpid.server.protocol.v0_8.AMQProtocolEngine.writeFrame(AMQProtocolEngine.java:704)
>         at 
> org.apache.qpid.server.protocol.v0_8.output.ProtocolOutputConverterImpl.writeFrame(ProtocolOutputConverterImpl.java:423)
>         at 
> org.apache.qpid.server.protocol.v0_8.output.ProtocolOutputConverterImpl.writeMessageDeliveryUnchanged(ProtocolOutputConverterImpl.java:207)
>         at 
> org.apache.qpid.server.protocol.v0_8.output.ProtocolOutputConverterImpl.writeMessageDelivery(ProtocolOutputConverterImpl.java:141)
>         at 
> org.apache.qpid.server.protocol.v0_8.output.ProtocolOutputConverterImpl.writeMessageDelivery(ProtocolOutputConverterImpl.java:101)
>         at 
> org.apache.qpid.server.protocol.v0_8.output.ProtocolOutputConverterImpl.writeDeliver(ProtocolOutputConverterImpl.java:78)
>         at 
> org.apache.qpid.server.protocol.v0_8.AMQProtocolEngine$WriteDeliverMethod.deliverToClient(AMQProtocolEngine.java:1621)
>         at 
> org.apache.qpid.server.protocol.v0_8.ConsumerTarget_0_8.sendToClient(ConsumerTarget_0_8.java:513)
>         at 
> org.apache.qpid.server.protocol.v0_8.ConsumerTarget_0_8$AckConsumer.send(ConsumerTarget_0_8.java:317)
>         at 
> org.apache.qpid.server.queue.QueueConsumerImpl.send(QueueConsumerImpl.java:474)
>         at 
> org.apache.qpid.server.queue.AbstractQueue.deliverMessage(AbstractQueue.java:1252)
>         at 
> org.apache.qpid.server.queue.AbstractQueue.deliverToConsumer(AbstractQueue.java:1166)
>         at 
> org.apache.qpid.server.queue.AbstractQueue.tryDeliverStraightThrough(AbstractQueue.java:1122)
>         at 
> org.apache.qpid.server.queue.AbstractQueue.access$100(AbstractQueue.java:96)
>         at 
> org.apache.qpid.server.queue.AbstractQueue$6.run(AbstractQueue.java:1010)
>         at 
> org.apache.qpid.server.queue.AbstractQueue$6.run(AbstractQueue.java:1006)
>         at java.security.AccessController.doPrivileged(Native Method)
>         at javax.security.auth.Subject.doAs(Subject.java:356)
>         at 
> org.apache.qpid.server.queue.AbstractQueue.doEnqueue(AbstractQueue.java:1004)
>         at 
> org.apache.qpid.server.queue.SortedQueueImpl.doEnqueue(SortedQueueImpl.java:61)
>         at 
> org.apache.qpid.server.queue.AbstractQueue.enqueue(AbstractQueue.java:953)
>         at 
> org.apache.qpid.server.exchange.AbstractExchange$2.postCommit(AbstractExchange.java:560)
>         at 
> org.apache.qpid.server.protocol.v0_8.AMQChannel$AsyncCommand.complete(AMQChannel.java:1696)
>         at 
> org.apache.qpid.server.protocol.v0_8.AMQChannel.sync(AMQChannel.java:1666)
>         at 
> org.apache.qpid.server.protocol.v0_8.AMQChannel.receivedComplete(AMQChannel.java:266)
>         at 
> org.apache.qpid.server.protocol.v0_8.AMQProtocolEngine.receivedComplete(AMQProtocolEngine.java:368)
>         at 
> org.apache.qpid.server.protocol.v0_8.AMQProtocolEngine.access$1200(AMQProtocolEngine.java:89)
>         at 
> org.apache.qpid.server.protocol.v0_8.AMQProtocolEngine$2.run(AMQProtocolEngine.java:328)
>         at 
> org.apache.qpid.server.protocol.v0_8.AMQProtocolEngine$2.run(AMQProtocolEngine.java:283)
>         at java.security.AccessController.doPrivileged(Native Method)
>         at javax.security.auth.Subject.doAs(Subject.java:356)
>         at 
> org.apache.qpid.server.protocol.v0_8.AMQProtocolEngine.received(AMQProtocolEngine.java:282)
>         at 
> org.apache.qpid.server.protocol.v0_8.AMQProtocolEngine.received(AMQProtocolEngine.java:89)
>         at 
> org.apache.qpid.server.protocol.MultiVersionProtocolEngine.received(MultiVersionProtocolEngine.java:133)
>         at 
> org.apache.qpid.server.protocol.MultiVersionProtocolEngine.received(MultiVersionProtocolEngine.java:49)
>         at 
> org.apache.qpid.transport.network.io.IoReceiver.run(IoReceiver.java:161)
>         at java.lang.Thread.run(Thread.java:745)
> {noformat}
> {noformat}
> 2014-08-28 06:37:30,624 ERROR [pool-3-thread-13] (server.Main) - Uncaught 
> exception, shutting down.
> java.lang.IndexOutOfBoundsException
>         at java.nio.ByteBuffer.wrap(ByteBuffer.java:371)
>         at 
> org.apache.qpid.server.store.berkeleydb.AbstractBDBMessageStore$StoredBDBMessage.getContent(AbstractBDBMessageStore.java:1336)
>         at 
> org.apache.qpid.server.message.AbstractServerMessageImpl.getContent(AbstractServerMessageImpl.java:171)
>         at 
> org.apache.qpid.server.protocol.v0_8.output.ProtocolOutputConverterImpl$MessageContentSourceBody.writePayload(ProtocolOutputConverterImpl.java:251)
>         at org.apache.qpid.framing.AMQFrame.writeFrames(AMQFrame.java:123)
>         at 
> org.apache.qpid.server.protocol.v0_8.output.ProtocolOutputConverterImpl$CompositeAMQBodyBlock.writePayload(ProtocolOutputConverterImpl.java:461)
>         at 
> org.apache.qpid.server.protocol.v0_8.AMQProtocolEngine.asByteBuffer(AMQProtocolEngine.java:590)
>         at 
> org.apache.qpid.server.protocol.v0_8.AMQProtocolEngine.writeFrame(AMQProtocolEngine.java:704)
>         at 
> org.apache.qpid.server.protocol.v0_8.output.ProtocolOutputConverterImpl.writeFrame(ProtocolOutputConverterImpl.java:423)
>         at 
> org.apache.qpid.server.protocol.v0_8.output.ProtocolOutputConverterImpl.writeMessageDeliveryUnchanged(ProtocolOutputConverterImpl.java:207)
>         at 
> org.apache.qpid.server.protocol.v0_8.output.ProtocolOutputConverterImpl.writeMessageDelivery(ProtocolOutputConverterImpl.java:141)
>         at 
> org.apache.qpid.server.protocol.v0_8.output.ProtocolOutputConverterImpl.writeMessageDelivery(ProtocolOutputConverterImpl.java:101)
>         at 
> org.apache.qpid.server.protocol.v0_8.output.ProtocolOutputConverterImpl.writeDeliver(ProtocolOutputConverterImpl.java:78)
>         at 
> org.apache.qpid.server.protocol.v0_8.AMQProtocolEngine$WriteDeliverMethod.deliverToClient(AMQProtocolEngine.java:1621)
>         at 
> org.apache.qpid.server.protocol.v0_8.ConsumerTarget_0_8.sendToClient(ConsumerTarget_0_8.java:513)
>         at 
> org.apache.qpid.server.protocol.v0_8.ConsumerTarget_0_8$NoAckConsumer.send(ConsumerTarget_0_8.java:213)
>         at 
> org.apache.qpid.server.queue.QueueConsumerImpl.send(QueueConsumerImpl.java:474)
>         at 
> org.apache.qpid.server.queue.AbstractQueue.deliverMessage(AbstractQueue.java:1252)
>         at 
> org.apache.qpid.server.queue.AbstractQueue.attemptDelivery(AbstractQueue.java:2007)
>         at 
> org.apache.qpid.server.queue.AbstractQueue.processQueue(AbstractQueue.java:2178)
>         at org.apache.qpid.server.queue.QueueRunner$1.run(QueueRunner.java:77)
>         at java.security.AccessController.doPrivileged(Native Method)
>         at javax.security.auth.Subject.doAs(Subject.java:356)
>         at org.apache.qpid.server.queue.QueueRunner.run(QueueRunner.java:68)
>         at 
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
>         at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
>         at java.lang.Thread.run(Thread.java:745)
> {noformat}



--
This message was sent by Atlassian JIRA
(v6.2#6252)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to