6 Replies Latest reply on May 22, 2012 9:53 PM by hughbragg

    Producer commit blocked

    hughbragg

      Hi,

       

      I've been using auto-acknowledge for my producer up until now. I'm looking for some ways to increase throughput.

      So I changed my producer to send messages to a session which is transactional. After sending about 500 messages, I then commit.

      What I found was that all the producers are blocked in the commit process.

      I increased jms address space:

      <page-size-bytes>20971520</page-size-bytes>

      <max-size-bytes>167772160</max-size-bytes>

       

      That didn't change anythign so I increased the window size

      <producer-window-size>999999999</producer-window-size>

       

      Still no change.

      There are no exceptions and the producer is permanently blocked:

      Stack trace:

      sun.misc.Unsafe.park(Native Method)

      java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:226)

      java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2176)

      org.hornetq.core.protocol.core.impl.ChannelImpl.sendBlocking(ChannelImpl.java:256)

         - locked java.lang.Object@316fcf58

      org.hornetq.core.client.impl.ClientSessionImpl.commit(ClientSessionImpl.java:528)

      org.hornetq.core.client.impl.DelegatingSession.commit(DelegatingSession.java:157)

      org.hornetq.jms.client.HornetQSession.commit(HornetQSession.java:234)

       

      When I <ctrl>-c the program generating an interrupt exception, oddly the current batch of messages waiting for commit are sent and then the program exits.

       

      The code I use is almost identical to the JMS Transactional Session Example except I'm using

      HornetQJMSClient.createQueue

      HornetQConnectionFactory hqcf = HornetQJMSClient.createConnectionFactoryWithoutHA(JMSFactoryType.QUEUE_CF, transportConfiguration);

       

       

      Could anyone please offer any expanation or even a guess as to what might be wrong?

       

      Thanks