[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.

Reply via email to