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

Pat Fox commented on AMQ-3746:
------------------------------

After applying "APotentialFixForAMQ-3746.patch" I noticed a change in exception 
behavior around the "MessageListener" case. Before applying the patch 
ActiveMQMessageConsumer.setMessageListener()
throws the JMSException below when prefetch=0.

before patch:

{code}
javax.jms.JMSException: Illegal prefetch size of zero. This setting is not 
supported for asynchronous consumers please set a value of at least 1
        at 
org.apache.activemq.ActiveMQMessageConsumer.setMessageListener(ActiveMQMessageConsumer.java:417)
        ...
{code}

after applying the patch the following exception is thrown when creating the 
ActiveMQMessageConsumer before ActiveMQMessageConsumer.setMessageListener() can 
be called. 

{code}
javax.jms.JMSException: Cannot have a prefetch size of zero for a Non Durable 
Topic Subscriber
        at 
org.apache.activemq.ActiveMQMessageConsumer.<init>(ActiveMQMessageConsumer.java:245)
        at 
org.apache.activemq.ActiveMQSession.createConsumer(ActiveMQSession.java:1134)
        at 
org.apache.activemq.ActiveMQSession.createConsumer(ActiveMQSession.java:1078)
        at 
org.apache.activemq.ActiveMQSession.createConsumer(ActiveMQSession.java:991)
        at 
org.apache.activemq.ActiveMQSession.createConsumer(ActiveMQSession.java:964)
        ...
{code}  

Although it results in the same overall outcome, it does change the existing 
(correct) exception behavior.

Hence not sure if "Fail Fast" in "APotentialFixForAMQ-3746.patch" is the best 
approach.
                
> Non Durable Topic subscription with prefetch=0, 
> MessageConsumer.receivenowait() (or MessageConsumer.receive(timeout) hangs 
> indefinitely
> ---------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: AMQ-3746
>                 URL: https://issues.apache.org/jira/browse/AMQ-3746
>             Project: ActiveMQ
>          Issue Type: Bug
>          Components: Broker
>    Affects Versions: 5.5.1
>            Reporter: Pat Fox
>         Attachments: APotentialFixForAMQ-3746.patch, 
> TopicSubscriptionZeroPrefetchTest.patch
>
>
> Non Durable Topic subscription with prefetch=0, 
> MessageConsumer.receivenowait() (or MessageConsumer.receive(timeout) hangs 
> indefinitely.
> I get the following thread dump
> {code}
> "main" prio=5 tid=7f996d000000 nid=0x105bc3000 in Object.wait() [105bc1000]
>    java.lang.Thread.State: WAITING (on object monitor)
>       at java.lang.Object.wait(Native Method)
>       - waiting on <7f39f1b30> (a java.lang.Object)
>       at java.lang.Object.wait(Object.java:485)
>       at 
> org.apache.activemq.SimplePriorityMessageDispatchChannel.dequeue(SimplePriorityMessageDispatchChannel.java:87)
>       - locked <7f39f1b30> (a java.lang.Object)
>       at 
> org.apache.activemq.ActiveMQMessageConsumer.dequeue(ActiveMQMessageConsumer.java:468)
>       at 
> org.apache.activemq.ActiveMQMessageConsumer.receiveNoWait(ActiveMQMessageConsumer.java:621)
>       at 
> org.apache.activemq.usecases.TopicSubscriptionZeroPrefetchTest.testTopicConsumerPrefetchZero(TopicSubscriptionZeroPrefetchTest.java:71)
> {code}
> It seems the TopicSubscription does not support "pullMessage".
> This only appears to impact Non Durable Topic Subscriptions. Durable Topic 
> Subscriptions with prefetch=0 do *NOT* exhibit this behavior.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to