On 8 July 2015 at 10:03, Gordon Sim <g...@redhat.com> wrote:
> On 07/08/2015 02:22 AM, Rafael Schloming wrote:
>>
>> a value of zero is actually what
>> signals that the receiver needs to take some action here, and arguably an
>> initial value of zero is correct since it is signaling that the receiver
>> needs to take action (in this case issue credit).
>
>
> My interpretation is that if 0 is sent as the initial value, the sender
> cannot legally send any transfers without first expanding the window by
> sending a flow with a non-zero value.
>

Agreed. We don't currently do that, so we are typically violating the
window (Messenger being an exception, on its initial send to a node at
least).

In the case the remote incoming window is also 0 (which it is in the
case which prompted this discussion) we would also have to
synchronously wait for a flow 'response' increasing it before we could
send anything, since we also need to know the remote incoming window
actually enabled us to send.

> Further I think the sender should not take the lack of credit as grounds to
> set a window of 0. The receiver knows it has not issued credit. (At the link
> level, the sender can also indicate that it has messages awaiting link
> credit).
>

That was my take on reading things, that the two are essentially
separate mechanisms, and on top the two windows are separate as well.

If the initial outgoing window was set to 0 because the reciever hasnt
issued, would there be a need for the field to exist on Begin? It
would seem like much of the time it wouldnt be used and a Flow would
have to be used instead.

> In the case where the sender's implementation involves a fixed amount of
> buffer space and requires messages to be settled before it can send more,
> the receiver would not be able to know that without getting some signal. So
> to my mind that is the only case for which it would make sense to send an
> outgoing window of 0. (I'm not sure how useful this is in practice and I
> don't believe it applies to proton at present anyway).
>
> I think as it stands proton is violating the spec, and should be changed to
> send a non-zero outgoing window.

That is what I did for the proposed changes on
https://issues.apache.org/jira/browse/PROTON-936 /
https://github.com/apache/qpid-proton/pull/42. Essentially setting it
initially on begin to max int (unless otherwise configured) and
leaving it there for any subsequent flows. We could later (when we
arent right before a release) look to make it smarter if needed.

Robbie

Reply via email to