qpid-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Martin Ritchie (JIRA)" <qpid-...@incubator.apache.org>
Subject [jira] Commented: (QPID-677) Message properties get erased when routing message
Date Tue, 06 Nov 2007 17:40:50 GMT

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

Martin Ritchie commented on QPID-677:
-------------------------------------

The stack trace was from TopicSessionTest.testNoLocal

> Message properties get erased when routing message
> --------------------------------------------------
>
>                 Key: QPID-677
>                 URL: https://issues.apache.org/jira/browse/QPID-677
>             Project: Qpid
>          Issue Type: Bug
>          Components: Java Broker
>    Affects Versions: M2, M2.1
>            Reporter: Martin Ritchie
>             Fix For: M2.1
>
>
> In adding support for JMSXUserID I noted that the underlying data for the message _headers
is being erased.
> I haven't had time to track this down but here is what I see.
> I update the userID value in the header to be the authenticated user id. This causes
the encoded Message Headers to be set to null. The data for which is copied in to a local
byte[] so can be reencoded. However, the _headers FieldTable only maintains a reference to
the original ByteBuffer. When routing the message the _headers may be inspected if a Selector
is being used. Because the broker has not decoded the fieldtable values it now attempts to
do so. For some reason the ByteBuffer data no longer exists and so a decoding is not possible.

> pool-2-thread-4 2007-11-06 17:30:20,983 DEBUG [qpid.server.filter.PropertyExpression]
Looking up property:Selector
> Dispatcher-Channel-1 2007-11-06 17:30:20,999 DEBUG [apache.qpid.client.BasicMessageConsumer]
Message is of type: org.apache.qpid.client.message.JMSTextMessage
> pool-2-thread-4 2007-11-06 17:30:20,999 ERROR [qpid.server.protocol.AMQPFastProtocolHandler]
Exception caught inAMQProtocolSession(anonymous(26156009)), closing session explictly: java.nio.BufferUnderflowException
> java.nio.BufferUnderflowException
> 	at java.nio.Buffer.nextGetIndex(Buffer.java:474)
> 	at java.nio.DirectByteBuffer.get(DirectByteBuffer.java:205)
> 	at org.apache.mina.common.support.BaseByteBuffer.get(BaseByteBuffer.java:203)
> 	at org.apache.mina.common.ByteBuffer.getUnsigned(ByteBuffer.java:487)
> 	at org.apache.qpid.framing.AMQShortString.readFromBuffer(AMQShortString.java:172)
> 	at org.apache.qpid.framing.EncodingUtils.readAMQShortString(EncodingUtils.java:660)
> 	at org.apache.qpid.framing.FieldTable.setFromBuffer(FieldTable.java:962)
> 	at org.apache.qpid.framing.FieldTable.populateFromBuffer(FieldTable.java:111)
> 	at org.apache.qpid.framing.FieldTable.initMapIfNecessary(FieldTable.java:171)
> 	at org.apache.qpid.framing.FieldTable.keySet(FieldTable.java:890)
> 	at org.apache.qpid.server.filter.PropertyExpression.evaluate(PropertyExpression.java:279)
> 	at org.apache.qpid.server.filter.ComparisonExpression$1.evaluate(ComparisonExpression.java:245)
> 	at org.apache.qpid.server.filter.ComparisonExpression.matches(ComparisonExpression.java:590)
> 	at org.apache.qpid.server.filter.JMSSelectorFilter.matches(JMSSelectorFilter.java:52)
> 	at org.apache.qpid.server.filter.SimpleFilterManager.allAllow(SimpleFilterManager.java:57)
> 	at org.apache.qpid.server.queue.SubscriptionImpl.checkFilters(SubscriptionImpl.java:442)
> 	at org.apache.qpid.server.queue.SubscriptionImpl.hasInterest(SubscriptionImpl.java:423)
> 	at org.apache.qpid.server.queue.SubscriptionSet.nextSubscriberImpl(SubscriptionSet.java:154)
> 	at org.apache.qpid.server.queue.SubscriptionSet.nextSubscriber(SubscriptionSet.java:129)
> 	at org.apache.qpid.server.queue.ConcurrentSelectorDeliveryManager.deliver(ConcurrentSelectorDeliveryManager.java:818)
> 	at org.apache.qpid.server.queue.AMQQueue.process(AMQQueue.java:803)
> 	at org.apache.qpid.server.txn.NonTransactionalContext.deliver(NonTransactionalContext.java:99)
> 	at org.apache.qpid.server.queue.AMQMessage.deliver(AMQMessage.java:735)
> 	at org.apache.qpid.server.queue.AMQMessage.addContentBodyFrame(AMQMessage.java:377)
> 	at org.apache.qpid.server.AMQChannel.publishContentBody(AMQChannel.java:266)
> 	at org.apache.qpid.server.protocol.AMQMinaProtocolSession.contentBodyReceived(AMQMinaProtocolSession.java:389)
> 	at org.apache.qpid.server.protocol.AMQMinaProtocolSession.frameReceived(AMQMinaProtocolSession.java:220)
> 	at org.apache.qpid.server.protocol.AMQMinaProtocolSession.dataBlockReceived(AMQMinaProtocolSession.java:191)
> 	at org.apache.qpid.server.protocol.AMQPFastProtocolHandler.messageReceived(AMQPFastProtocolHandler.java:206)
> 	at org.apache.mina.common.support.AbstractIoFilterChain$2.messageReceived(AbstractIoFilterChain.java:189)
> 	at org.apache.mina.common.support.AbstractIoFilterChain.callNextMessageReceived(AbstractIoFilterChain.java:502)
> 	at org.apache.mina.common.support.AbstractIoFilterChain.access$1000(AbstractIoFilterChain.java:52)
> 	at org.apache.mina.common.support.AbstractIoFilterChain$EntryImpl$1.messageReceived(AbstractIoFilterChain.java:777)
> 	at org.apache.mina.filter.codec.support.SimpleProtocolDecoderOutput.flush(SimpleProtocolDecoderOutput.java:60)
> 	at org.apache.mina.filter.codec.ProtocolCodecFilter.messageReceived(ProtocolCodecFilter.java:185)
> 	at org.apache.mina.common.support.AbstractIoFilterChain.callNextMessageReceived(AbstractIoFilterChain.java:502)
> 	at org.apache.mina.common.support.AbstractIoFilterChain.access$1000(AbstractIoFilterChain.java:52)
> 	at org.apache.mina.common.support.AbstractIoFilterChain$EntryImpl$1.messageReceived(AbstractIoFilterChain.java:777)
> 	at org.apache.qpid.pool.PoolingFilter.messageReceived(PoolingFilter.java:317)
> 	at org.apache.mina.filter.ReferenceCountingIoFilter.messageReceived(ReferenceCountingIoFilter.java:96)
> 	at org.apache.mina.common.support.AbstractIoFilterChain.callNextMessageReceived(AbstractIoFilterChain.java:502)
> 	at org.apache.mina.common.support.AbstractIoFilterChain.access$1000(AbstractIoFilterChain.java:52)
> 	at org.apache.mina.common.support.AbstractIoFilterChain$EntryImpl$1.messageReceived(AbstractIoFilterChain.java:777)
> 	at org.apache.qpid.pool.Event$ReceivedEvent.process(Event.java:86)
> 	at org.apache.qpid.pool.Job.processAll(Job.java:109)
> 	at org.apache.qpid.pool.Job.run(Job.java:147)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
> 	at java.lang.Thread.run(Thread.java:619)
> I don't quite see what is going wrong. However, if the FieldTable is populated from the
buffer before routing then the data can be re-encoded. Simplist way to do that is to request
the getHeaders().keySet()

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message