[jboss-jira] [JBoss JIRA] Commented: (JBMESSAGING-1883) Server side failover may cause ClientConsumer.waitForOnMessageToComplete() to hang

Yong Hao Gao (JIRA) jira-events at lists.jboss.org
Mon Jul 4 01:28:23 EDT 2011


    [ https://issues.jboss.org/browse/JBMESSAGING-1883?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12612301#comment-12612301 ] 

Yong Hao Gao commented on JBMESSAGING-1883:
-------------------------------------------

The fix:

Add a state flag to the Closer object. If the Closer is added to executor that is already shut down, set the flag. In waitForOnMessageToComplete() it checks the flag, if the flag is set then don't wait for it.



> Server side failover may cause ClientConsumer.waitForOnMessageToComplete() to hang
> ----------------------------------------------------------------------------------
>
>                 Key: JBMESSAGING-1883
>                 URL: https://issues.jboss.org/browse/JBMESSAGING-1883
>             Project: JBoss Messaging
>          Issue Type: Bug
>          Components: JMS Clustering
>    Affects Versions: 1.4.0.SP3.CP13, 1.4.8.SP1
>            Reporter: Yong Hao Gao
>            Assignee: Yong Hao Gao
>             Fix For: 1.4.0.SP3.CP14, 1.4.8.SP2
>
>
> When server side failover happens, the failover node will get "node left" notification from jgroups as well as "connection broken" notification from remoting on the connections through which message suckers are created. The listeners of the two notifications are executed concurrently and both try to close related resources. The "node left" listener performs failover for the dead node, where it closes all message suckers (underneath the ClientConsumers). The "connection broken" listener will close the related connection/session/consumer. If 
> 1. in failover the ClientConsumer.close() is called but before waitForOnMessageToComplete() is called, 
> 2. the session is being closed by the 'connection broken' listener.
> 3. when the waitForOnMessageToComplete() is called, it puts a 'Closer' task to executor and wait for it. However at that time the executor has been closed already in step 2. So the 'Closer' task will never get executed and it will wait forever.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        


More information about the jboss-jira mailing list