[
https://issues.apache.org/jira/browse/AMQ-3746?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Pat Fox updated AMQ-3746:
-------------------------
Attachment: APotentialFixForAMQ-3746.patch
Perhaps rather than reaching a hanging state, the MessageConsumer could "fail
fast" at creation time if prefetch=0 for non durable topic subscribers.
To that effect, I have attached "APotentialFixForAMQ-3746.patch" where the
ActiveMQMessageConsumer constructor does the following check.
{code}
// AMQ-3746
// if prefetch set to zero for Non Durable topic Consumer, throw a JMS
Exception.
if(this.getPrefetchNumber() == 0 && info.getDestination().isTopic() &&
!isDurableSubscriber()){
throw new JMSException("Cannot have a prefetch size of zero for a Non
Durable Topic Subscriber");
}
{code}
I hope the above check should isolate just Non Durable Topic consumers with
prefetch=0, perhaps someone could review it? Maybe there is a cleverer way to
resolve this issue?
patch created off lastest revision (1295087)
> 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