Uploaded image for project: 'ActiveMQ Classic'
  1. ActiveMQ Classic
  2. AMQ-6043

CLONE - Occaional hangs on ensureConnectionInfoSent

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Incomplete
    • 5.9.1
    • None
    • JMS client
    • None

    Description

      When connecting to the broker, the client occasionally starts to hang. A thread dump reveals:

      "QuartzScheduler_Worker-7" prio=5 tid=0x0116f190 nid=0x1ce2400 waiting on condition [0xf1fae000..0xf1fafb30]
      	at sun.misc.Unsafe.park(Native Method)
      	at java.util.concurrent.locks.LockSupport.park(LockSupport.java:118)
      	at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1767)
      	at java.util.concurrent.ArrayBlockingQueue.take(ArrayBlockingQueue.java:341)
      	at org.apache.activemq.transport.FutureResponse.getResult(FutureResponse.java:40)
      	at org.apache.activemq.transport.ResponseCorrelator.request(ResponseCorrelator.java:80)
      	at org.apache.activemq.ActiveMQConnection.syncSendPacket(ActiveMQConnection.java:1233)
      	at org.apache.activemq.ActiveMQConnection.ensureConnectionInfoSent(ActiveMQConnection.java:1339)
      	- locked <0x10b9bdf8> (a java.lang.Object)
      	at org.apache.activemq.ActiveMQConnection.createSession(ActiveMQConnection.java:298)
      	at org.jencks.amqpool.SessionPool.createSession(SessionPool.java:110)
      	at org.jencks.amqpool.SessionPool.makeObject(SessionPool.java:78)
      	at org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:974)
      	at org.jencks.amqpool.SessionPool.borrowSession(SessionPool.java:53)
      	at org.jencks.amqpool.ConnectionPool.createSession(ConnectionPool.java:89)
      	at org.jencks.amqpool.XaConnectionPool.createSession(XaConnectionPool.java:51)
      	at org.jencks.amqpool.PooledConnection.createSession(PooledConnection.java:132)
      	at org.springframework.jms.support.JmsAccessor.createSession(JmsAccessor.java:200)
      

      Looking closer at the code of ensureConnectionInfoSent in ActiveMQConnection, it uses the method:

      public Response syncSendPacket(Command command) throws JMSException {
      

      which never times out, possibly causing everything to hang eternally. There does seem to be an identical method that allows for a timeout.

          public Response syncSendPacket(Command command, int timeout) throws JMSException {
      

      should / can ensureConnectionInfoSent use the one with the timeout instead?

      We're using the failover transport:
      failover:(tcp://<someIP>:54663?wireFormat.maxInactivityDuration=300000)?maxReconnectAttempts=10&initialReconnectDelay=15000

      Attachments

        Issue Links

          Activity

            People

              tabish Timothy A. Bish
              gagan.deep Gagan
              Votes:
              0 Vote for this issue
              Watchers:
              5 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: