ActiveMQ
  1. ActiveMQ
  2. AMQ-3375

stomp consumer might not receive all msgs of a virtual topic queue with memory limits

    Details

    • Type: Bug Bug
    • Status: Resolved
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: 5.5.0
    • Fix Version/s: 5.6.0
    • Component/s: Broker
    • Environment:

      stomp consumer on virtual destination
      Tested on Ubuntu 10.10 and MacOSX using java 6.

      Description

      Have a testcase that connects a Java stomp consumer to a virtual destination queue and consumes a fixed amount of msgs.
      During the test I noticed that the consumer does not always receive the full amount of msgs.
      Instead the receive times out although JMX QueueSize property is greater than 0. However when trying to browse the queue using JMX, it returns null, despite the fact that not all msgs got dequeued yet (dispatch and dequeue counter < enqueue counter).

      So far I reproduced this with a stomp producer/consumer only. The producer writes msgs to a virtual topic VirtualTopic.Foo and the consumer takes msgs off the Consumer.A.VirtualTopic.Foo queue. Using JMX I noticed all msgs got moved from the virtual topic to the queue (reflected by JMX enqueue counter) but not all msgs got consumed.

      So it seems the broker lost some msgs on the way.

      1. stomp-testcase.tgz
        6 kB
        Torsten Mielke

        Issue Links

          Activity

          Hide
          Torsten Mielke added a comment -

          Attaching a test case in JUnit format. It may take a number of test runs before this test case fails (10 < x < 20).
          For a description of the test case, have a read over the class documentation in src/test/resources/org/apache/activemq/transport/stomp/StompVirtualTopicTest.java.

          The test case uses an embedded broker but I have the feeling the problem is easier reproduced using an external broker with the config src/test/resources/StompVirtualTopicTest.xml. It also makes it easier to attach jconsole.

          To run the test case simply call mvn test.

          Show
          Torsten Mielke added a comment - Attaching a test case in JUnit format. It may take a number of test runs before this test case fails (10 < x < 20). For a description of the test case, have a read over the class documentation in src/test/resources/org/apache/activemq/transport/stomp/StompVirtualTopicTest.java. The test case uses an embedded broker but I have the feeling the problem is easier reproduced using an external broker with the config src/test/resources/StompVirtualTopicTest.xml. It also makes it easier to attach jconsole. To run the test case simply call mvn test.
          Hide
          Timothy Bish added a comment -

          I can get the test to fail using the provided unit test however the problem appears to be that the socket of the StompConnection is closed before the broker has had a chance to read all the messages from the socket buffer, if you add a sleep (6 seconds on my machine) before calling close the the test passes every time.

          Show
          Timothy Bish added a comment - I can get the test to fail using the provided unit test however the problem appears to be that the socket of the StompConnection is closed before the broker has had a chance to read all the messages from the socket buffer, if you add a sleep (6 seconds on my machine) before calling close the the test passes every time.
          Hide
          Timothy Bish added a comment -

          A reliable way to make this test case always pass is to add the receipt request header to the final produced message and do a receive to await the response, this will ensure that all messages are read by the broker and placed on the queue.

          Show
          Timothy Bish added a comment - A reliable way to make this test case always pass is to add the receipt request header to the final produced message and do a receive to await the response, this will ensure that all messages are read by the broker and placed on the queue.
          Hide
          Gary Tully added a comment -

          The test works once contention issues with plist creation that underpin the file pending message cursor were sorted in AMQ-3434

          Show
          Gary Tully added a comment - The test works once contention issues with plist creation that underpin the file pending message cursor were sorted in AMQ-3434
          Hide
          Gary Tully added a comment -

          fixed by AMQ-3434 - test case committed in rev: http://svn.apache.org/viewvc?rev=1153463&view=rev

          Show
          Gary Tully added a comment - fixed by AMQ-3434 - test case committed in rev: http://svn.apache.org/viewvc?rev=1153463&view=rev

            People

            • Assignee:
              Gary Tully
              Reporter:
              Torsten Mielke
            • Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved:

                Development