On Mon, Oct 31, 2011 at 11:30 AM, Robbie Gemmell
<robbie.gemm...@gmail.com> wrote:
> It doesnt really affect that case at all I think. It only affects
> transacted sessions and although it does slightly move the location of
> a call also made for synchronous consumers, the effect of the change
> only really makes any difference to asynchronous consumers.

I'm fine with the current change you've made.
Lets actually look at this credit issue in more detail after the release.

> Robbie
>
> On 31 October 2011 15:19, Rajith Attapattu <rajit...@gmail.com> wrote:
>> On Mon, Oct 31, 2011 at 9:18 AM, Robbie Gemmell
>> <robbie.gemm...@gmail.com> wrote:
>>> Hi all,
>>>
>>> Over the weekend I made a change to the 0-10 Java client so that using
>>> prefetch=1 with transacted sessions and an OnMessage() listener would
>>> result in the client only getting 1 message at a time, by moving the
>>> sending of command completions (if necessary) which would prompt the
>>> next message into postDeliver() instead of doing it before delivery.
>>> This was in response to a user on the mailing lists trying to
>>> configure the client such that when an extra long period of processing
>>> occurred in his listener, other clients would be able to pick up the
>>> rest of the messages on the queue. However, whilst this behaviour is
>>> what the 0-8 client does in this case, after making the change I
>>> decided this is really prefetch=0 (which is something the 0-8 client
>>> doesn't support) behaviour for the 0-10 client.
>>>
>>> The same user had it turns out also tried prefetch=0 and found it to
>>> behave rather oddly, almost like prefetch=2. Deciding that I should
>>> perhaps instead revert the change I made and look at fixing
>>> prefetch=0, I had a quick play with it to see what it did and found it
>>> to behave similarly to his observations. Looking at the code, prefetch
>>> of 0 appears to be horribly broken for an asynchronous message
>>> listener in its current form, and will indeed act more like
>>> prefetch=2. It appears that message credit is sent when the connection
>>> is started, and when a message listener is set (seemingly regardless
>>> of whether the connection is started, which would itself be a bug if
>>> true), meaning more than 1 credit can be issued for something that
>>> should have at most 1 message at a time. Regardless of this,
>>> prefetch=0 wont work for a message listener because the client also
>>> then sends a credit to provoke the next delivery just *before* passing
>>> of the message to the application instead of afterwards like it
>>> should.
>>>
>>> The change I made previously was very small (same code, called in a
>>> different place) and doesn't really make any difference to synchronous
>>> consumers because the completions are still sent before the
>>> application gets the message. It only really affects asynchronous
>>> transacted consumers with a prefetch of 1 configured, and gives them
>>> the ability to achieve the desired behaviour, but at the expense of
>>> effectively being out-by-1 on the count. The changes to get prefetch=0
>>> working for such cases could be larger, and I probably wont get time
>>> to look at doing that for this release either way.
>>>
>>> So the question is, keep the current change in to provide a means of
>>> users getting the client to do what they want right now, or revert it
>>> and fix prefetch=0 later? I'd say keep it, what do the rest of you
>>> think?
>>
>> This is infact an issue that we had identified (in the context of the
>> JCA client) and was aiming to fix soon after the release.
>> I'd argue that the logic around credits are broken in general - QPID-2604.
>> I haven't really looked at your change closely. Not sure how it
>> affects the above case.
>>
>>> Robbie
>>>
>>> ---------------------------------------------------------------------
>>> Apache Qpid - AMQP Messaging Implementation
>>> Project:      http://qpid.apache.org
>>> Use/Interact: mailto:dev-subscr...@qpid.apache.org
>>>
>>>
>>
>> ---------------------------------------------------------------------
>> Apache Qpid - AMQP Messaging Implementation
>> Project:      http://qpid.apache.org
>> Use/Interact: mailto:dev-subscr...@qpid.apache.org
>>
>>
>
> ---------------------------------------------------------------------
> Apache Qpid - AMQP Messaging Implementation
> Project:      http://qpid.apache.org
> Use/Interact: mailto:dev-subscr...@qpid.apache.org
>
>

---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:dev-subscr...@qpid.apache.org

Reply via email to