Uploaded image for project: 'AMQ Broker'
  1. AMQ Broker
  2. ENTMQBR-223

[AMQP] Broker stalls handling competing consumers that adjust link credit

    XMLWordPrintable

Details

    • Hide

      1. Start an A-MQ7 broker on a linux box.
      2. Run the Lite self test and direct the network traffic to the linux broker

      mstest /testcontainer:./Test.Amqp.Net/Test.Amqp.Net.dll /test:TestMethod_AdvancedLinkFlowControl
      
      Show
      1. Start an A-MQ7 broker on a linux box. 2. Run the Lite self test and direct the network traffic to the linux broker mstest /testcontainer:./Test.Amqp.Net/Test.Amqp.Net.dll /test:TestMethod_AdvancedLinkFlowControl
    • Broker - September Sprint

    Description

      This issue may be a repeat of the multiple-competing-consumers-get-stuck.

      The Lite client has a self test that executes:

                  SenderLink sender = new SenderLink(session, "sender-" + testName, "q1");
                  for (int i = 0; i < nMsgs; ++i)
                  {
                      Message message = new Message();
                      message.Properties = new Properties() { MessageId = "msg" + i, GroupId = testName };
                      sender.Send(message, null, null);
                  }
      
                  ReceiverLink receiver = new ReceiverLink(session, "receiver-" + testName, "q1");
                  receiver.SetCredit(2, false);           // <<< does not renew credit
                  Message m1 = receiver.Receive();
                  Message m2 = receiver.Receive();
                  Assert.AreEqual("msg0", m1.Properties.MessageId);
                  Assert.AreEqual("msg1", m2.Properties.MessageId);
                  receiver.Accept(m1);
                  receiver.Accept(m2);
      
                  ReceiverLink receiver2 = new ReceiverLink(session, "receiver2-" + testName, "q1");
                  receiver2.SetCredit(2, false);           // <<< does not renew credit
                  Message m3 = receiver2.Receive();
                  Message m4 = receiver2.Receive();
                  Assert.AreEqual("msg2", m3.Properties.MessageId);
                  Assert.AreEqual("msg3", m4.Properties.MessageId);
                  receiver2.Accept(m3);
                  receiver2.Accept(m4);
      
                  receiver.SetCredit(4);           // <<< renews credit
                  for (int i = 4; i < nMsgs; i++)
                  {
                      Message m = receiver.Receive();
                      Assert.AreEqual("msg" + i, m.Properties.MessageId);
                      receiver.Accept(m);
                  }
      

      When the test runs the second client receiver2-* never receives any messages.

      With Qpidd the test passes and the receivers receive messages as expected.

      Attachments

        Activity

          People

            rhn-support-jbertram Justin Bertram
            crolke@redhat.com Chuck Rolke (Inactive)
            Chuck Rolke (Inactive)
            Chuck Rolke Chuck Rolke (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            6 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Time Tracking

                Estimated:
                Original Estimate - 3 days
                3d
                Remaining:
                Remaining Estimate - 3 days
                3d
                Logged:
                Time Spent - Not Specified
                Not Specified