You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@qpid.apache.org by "Rajith Attapattu (JIRA)" <qp...@incubator.apache.org> on 2010/05/18 17:58:48 UTC

[jira] Commented: (QPID-2559) When a subscription is created, message credits should only be set if the dispatcher is not null.

    [ https://issues.apache.org/jira/browse/QPID-2559?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12868696#action_12868696 ] 

Rajith Attapattu commented on QPID-2559:
----------------------------------------

Hi Martin,

I am a little confused about your comment  - "Not sure if you noticed your actually using transacted sessions on your consumers." .
The consumer session is using AUTO_ACK and now both consumers are created off the same session.
Also I have modified the test in rev 945444 with a detailed explanation (check the svn commits tab on this JIRA) to make sure it works after the change I made in rev 942293.

However this test is now failing when I run it against the java test profile. 
This is probably bcos the flow control semantics are different in 0-8 ?
(I also noticed that even when I used java.0.10.testprofile the test output was still using 0-8 - so maybe there is a bug? )


I think the original test case (before my modification in rev 945444) would have been a good test for this bug if CLIENT-ACK or TRANSACTED is used.
As in that case the completions would have only being sent when acked or the transaction committed.
But the original test would fail for AUTO-ACK due to reasons mentioned in commit log for rev 945444.

So perhaps we could have a switch in the test code to create both consumers using the same session if AUTO-ACK and each on it's own session otherwise.
Let me use the code you attached to create the test. Please have a look and see if I have missed anything.

> When a subscription is created, message credits should only be set if the dispatcher is not null.
> -------------------------------------------------------------------------------------------------
>
>                 Key: QPID-2559
>                 URL: https://issues.apache.org/jira/browse/QPID-2559
>             Project: Qpid
>          Issue Type: Bug
>          Components: C++ Client
>    Affects Versions: 0.6
>            Reporter: Rajith Attapattu
>            Assignee: Rajith Attapattu
>             Fix For: 0.7
>
>         Attachments: QPID-2559.test
>
>
> When a subscription is created, message credits should only be set if the dispatcher is not null.
> If the dispatcher is null, the session is suspended temporarily until a dispatcher is created.
> And then when the session is unsuspended, message credits will be set again, resulting in granting more credits than intended.
> Please note in order for this error condition to happen the dispatcher should be null and the broker should have enough messages.
> If the connection is not started and the message consumer is the very first to be created for that session, then the dispatcher thread for that session is null.
> Steps To Reproduce
> ----------------------------
> 1. create connection, but not start it
> 1. create a session with client ack
> 2. send 20 messages to a queue
> 3. create receiver with capacity (prefetch) as 10.
> 4. start connection.
> 5. receive 10 messages
> Look at the client and broker logs and observe that the broker sends more messages than needed.
> Expected Result.
> ------------------------
> At any given time we should only receive n messages, where n == maxprefetch (capacity as defined for the destination)
> Actual Result
> -------------------
> For the above conditions, we get double than what we want (provided the broker has enough messages on the queue).

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


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