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

          Torsten Mielke created issue -
          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.
          Torsten Mielke made changes -
          Field Original Value New Value
          Attachment stomp-testcase.tgz [ 12483574 ]
          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.
          Gary Tully made changes -
          Summary stomp consumer might not receive all msgs of a queue stomp consumer might not receive all msgs of a virtual topic queue with memory limits
          Assignee Gary Tully [ gtully ]
          Gary Tully made changes -
          Link This issue depends upon AMQ-3434 [ AMQ-3434 ]
          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
          Gary Tully made changes -
          Fix Version/s 5.6.0 [ 12316331 ]
          Resolution Fixed [ 1 ]
          Status Open [ 1 ] Resolved [ 5 ]
          Gary Tully made changes -
          Fix Version/s 5.6.0 [ 12317974 ]
          Fix Version/s 5.x [ 12316331 ]
          Transition Time In Source Status Execution Times Last Executer Last Execution Date
          Open Open Resolved Resolved
          41d 2h 15m 1 Gary Tully 03/Aug/11 13:23

            People

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

              Dates

              • Created:
                Updated:
                Resolved:

                Development