Marco Geri created PROTON-2646:
----------------------------------

             Summary: [protonj2] Message not sent with multiple senders on the 
same session
                 Key: PROTON-2646
                 URL: https://issues.apache.org/jira/browse/PROTON-2646
             Project: Qpid Proton
          Issue Type: Bug
          Components: protonj2
            Reporter: Marco Geri
            Assignee: Timothy A. Bish


With the following scenario:
 * create multiple senders on the same session
 * create senders with delivery mode {{DeliveryMode.AT_MOST_ONCE}}
 * set a small session outgoing window size so that it can fill under pressure
 * senders do not await settlement
 * send many messages from many senders filling the size of the outgoing window 

When the outgoing window size is complete, the {{ClientSender.sendMessage 
}}puts the message in a blocking queue and waits for the message to be sent, 
but when the outgoing window size decreases the ClientSender does not send the 
message in the blocking queue, and the sendMessage still waits for the message 
to be sent over the connection.

With some debugging, it seems the problem is around in the ProtonSender.

When sending the message, the ClientSender checks 
{{{}ProtonSender.isSendable{}}}:
{code:java}
public boolean isSendable() {
  return sendable && sessionWindow.isSendable();
} {code}
The {{ProtonSender.sendable}} is true, but the function returns false because 
the size of the outgoing window is complete.

When the outgoing size decreases, it seems the following ProtonSender handler 
is called:

 
{code:java}
ProtonSender handleSessionCreditStateUpdate(ProtonSessionOutgoingWindow 
protonSessionOutgoingWindow) {
        final boolean previousSendable = sendable;
        sendable = getCredit() > 0 && sessionWindow.isSendable();
        if (previousSendable != sendable) {
            signalLinkCreditStateUpdated();
        }
        return this;
    }
{code}
But the {{signalLinkCreditStateUpdated}} is not called because the 
{{previousSendable}} and {{sendable}} are both true, leaving the message in the 
blocking queue waiting to be sent.

 



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@qpid.apache.org
For additional commands, e-mail: dev-h...@qpid.apache.org

Reply via email to