[Java Broker] Meta data not found when registering a consumer using a selectors
-------------------------------------------------------------------------------
Key: QPID-1093
URL: https://issues.apache.org/jira/browse/QPID-1093
Project: Qpid
Issue Type: Bug
Components: Java Broker
Affects Versions: M2.1
Reporter: Rob Godfrey
When registering a new consumer against a queue with a large number of
persistent messages the following stack trace was seen on the console:
at
org.apache.qpid.server.queue.WeakReferenceMessageHandle.loadMessageMetaData(WeakReferenceMessageHandle.java:73)
at
org.apache.qpid.server.queue.WeakReferenceMessageHandle.getContentHeaderBody(WeakReferenceMessageHandle.java:64)
at
org.apache.qpid.server.queue.AMQMessage.getContentHeaderBody(AMQMessage.java:353)
at
org.apache.qpid.server.filter.PropertyExpression.evaluate(PropertyExpression.java:273)
at
org.apache.qpid.server.filter.ArithmeticExpression.evaluate(ArithmeticExpression.java:253)
at
org.apache.qpid.server.filter.ComparisonExpression$1.evaluate(ComparisonExpression.java:245)
at
org.apache.qpid.server.filter.LogicExpression$2.evaluate(LogicExpression.java:67)
at
org.apache.qpid.server.filter.LogicExpression$2.evaluate(LogicExpression.java:67)
at
org.apache.qpid.server.filter.LogicExpression.matches(LogicExpression.java:105)
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:441)
at
org.apache.qpid.server.queue.SubscriptionImpl.hasInterest(SubscriptionImpl.java:428)
at
org.apache.qpid.server.queue.ConcurrentSelectorDeliveryManager.populatePreDeliveryQueue(ConcurrentSelectorDeliveryManager.java:332)
at
org.apache.qpid.server.queue.AMQQueue.registerProtocolSession(AMQQueue.java:694)
at org.apache.qpid.server.AMQChannel.subscribeToQueue(AMQChannel.java:341)
at
org.apache.qpid.server.handler.BasicConsumeMethodHandler.methodReceived(BasicConsumeMethodHandler.java:114)
This is due to the fact that the selectors are evaluating the message after it
has already been acecpted by another subscribe, sent to a client and dequeued.
before evaluating the message against the selector we should first check that
it is still referenced; and then take a temporary reference while the
evaluation takes place.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.