| Summary: | Consumer blocked after PFC is activated | ||||||
|---|---|---|---|---|---|---|---|
| Product: | Red Hat Enterprise MRG | Reporter: | Petr Matousek <pematous> | ||||
| Component: | qpid-cpp | Assignee: | Ken Giusti <kgiusti> | ||||
| Status: | NEW --- | QA Contact: | MRG Quality Engineering <mrgqe-bugs> | ||||
| Severity: | medium | Docs Contact: | |||||
| Priority: | medium | ||||||
| Version: | 2.0 | CC: | gsim, jross | ||||
| Target Milestone: | --- | ||||||
| Target Release: | --- | ||||||
| Hardware: | Unspecified | ||||||
| OS: | Unspecified | ||||||
| Whiteboard: | |||||||
| Fixed In Version: | Doc Type: | Bug Fix | |||||
| Doc Text: | Story Points: | --- | |||||
| Clone Of: | Environment: | ||||||
| Last Closed: | Type: | --- | |||||
| Regression: | --- | Mount Type: | --- | ||||
| Documentation: | --- | CRM: | |||||
| Verified Versions: | Category: | --- | |||||
| oVirt Team: | --- | RHEL 7.3 requirements from Atomic Host: | |||||
| Cloudforms Team: | --- | Target Upstream Version: | |||||
| Attachments: |
|
||||||
|
Description
Petr Matousek
2011-11-18 15:14:33 UTC
Created attachment 534411 [details]
test reproducer
Producer flow control blocks the sender by essentially holding off message transfers at the Session level - not per sender. 0-10 doesn't really have a per-sender context, so we have to block at the Session. The reproducer script shares one session between both the sender and the receiver. Since the sender triggers the flow control state on the session, the receiver is likewise blocked because it shares the same session state. I'd consider the same thing to happen if we had multiple senders sharing a session - one sender hitting flow control on a particular queue will cause the other senders sharing the same session (but sending to different, likely unblocked, queues) to also block. Since 0.10 only allows us to block at the session level, I don't think we can address this (until perhaps 1.0). Gordon - you understand 1.0 and the client side better than I: is my understanding correct? Missed setting the needinfo field The example is in python, should the component be python-qpid? The issue does indeed look to be a result of the way sync and completions currently work. On a given session the commands are all ordered. When issued a sync call the broker is supposed to respond when it has completed all the outstanding commands. A fetch on a receiver with no credit will flush the broker which involves a sync. However if the completion stream is already delayed by flow control the broker won't respond to this. I believe in theory this could be addressed using command level sync flags instead of the sync command, but quite honestly I wonder whether it is worth it. In AMQP 1.0 the situation will be greatly improved. Moving this out to "next version". I suspect we'll ultimately choose not to address this in the current PFC implementation. It may, however, be worth documenting somewhere (isolate senders in their own sessions to avoid the problematic interaction described here). Does that make sense? Where would be appropriate? Justin, There is an extensive description of flow control in the messaging user's guide, we should add a note there, at least. We don't currently reference flow control in the programmer's guide. There is a section that discusses configuring sender capacity - perhaps it should contain a reference to the discussion of flow control in the user's guide? |