QPID management is stuck in a waiting state for broker sync during rapid 
federation/defederation using the Java management API
------------------------------------------------------------------------------------------------------------------------------

                 Key: QPID-2871
                 URL: https://issues.apache.org/jira/browse/QPID-2871
             Project: Qpid
          Issue Type: Bug
          Components: Java Common
    Affects Versions: 0.6
         Environment: RHEL 5.5, MRG-M 1,1, QPID Java Management API 0.6, 100GB 
hard drive, 4GB RAM, virtualized using VMWare
            Reporter: Jason Wong
            Priority: Critical


We used the QPID Java Management API to create a Java library to replicate the 
qpid-route CLI tool.  When we rapidly federated, un-federated, and re-federated 
brokers, the broker's management component would become unresponsive to any 
other commands.  Looking for locked or waiting threads, we noticed that the 
following class was consistently in a waiting state.

org.apache.qpid.console.Broker in the qpid-management-console.jar

Looking at the latest source we noticed that in the Broker.java waitForSync 
method the timeout check that throws a ConsoleException (line 498) is outside 
of the while loop (line 487-496) that is waiting for the broker to sync.  We 
downloaded the source, put the timeout check inside the while loop, and 
compiled a new version of the qpid-management-console.jar.  When we ran our 
original scenario, the broker's management component never became unresponsive. 
 We did get some ConsoleExceptions thrown as we expected when we rapdily sent 
federation commands.  The line numbers above were taken from revision 998162 
(http://svn.apache.org/viewvc/qpid/trunk/qpid/java/management/console/src/main/java/org/apache/qpid/console/Broker.java?view=markup).

Updated code for the waitForSync method:
    public void waitForSync(int timeout)
    {
        synchronized (lockObject)
        {
            long start = System.currentTimeMillis();
            while (syncInFlight)
            {
                try
                {
                    lockObject.wait(SYNC_TIME);
                } catch (Exception e)
                {
                    throw new ConsoleException(e);
                }
                long duration = System.currentTimeMillis() - start;
                if (duration > timeout)
                {
                    throw new ConsoleException("Timeout waiting for Broker to 
Sync");
                }
            }
        }
    }

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:[email protected]

Reply via email to