You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@qpid.apache.org by "Gordon Sim (JIRA)" <ji...@apache.org> on 2019/03/14 18:47:00 UTC

[jira] [Commented] (DISPATCH-1287) router gets confused by clients response to drain and subsequently issue too little credit

    [ https://issues.apache.org/jira/browse/DISPATCH-1287?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16792956#comment-16792956 ] 

Gordon Sim commented on DISPATCH-1287:
--------------------------------------

To reproduce:

1. run simple_recv.py -m 1
2. start attached drainable.py
3. after the second message has been sent by drainable.py (about 10 seconds later) start a consumer again: simple_recv.py -m 1000

The trace below shows that after the draining of credit, when credit is subsequently restored, it is done one credit at a time.

{noformat}
[0x55ddd54175e0]:  -> SASL
[0x55ddd54175e0]:  <- SASL
[0x55ddd54175e0]:0 <- @sasl-mechanisms(64) [sasl-server-mechanisms=@PN_SYMBOL[:ANONYMOUS]]
[0x55ddd54175e0]:0 -> @sasl-init(65) [mechanism=:ANONYMOUS, initial-response=b"anonymous@localhost.localdomain"]
[0x55ddd54175e0]:0 <- @sasl-outcome(68) [code=0]
[0x55ddd54175e0]:  -> AMQP
[0x55ddd54175e0]:0 -> @open(16) [container-id="c717a8c8-017b-4a86-bb18-a0b32e4969d7", hostname="localhost", channel-max=32767]
[0x55ddd54175e0]:0 -> @begin(17) [next-outgoing-id=0, incoming-window=2147483647, outgoing-window=2147483647]
[0x55ddd54175e0]:0 -> @attach(18) [name="c717a8c8-017b-4a86-bb18-a0b32e4969d7-examples", handle=0, role=false, snd-settle-mode=2, rcv-settle-mode=0, source=@source(40) [durable=0, timeout=0, dynamic=false], target=@target(41) [address="examples", durable=0, timeout=0, dynamic=false], initial-delivery-count=0, max-message-size=0]
[0x55ddd54175e0]:  <- AMQP
[0x55ddd54175e0]:0 <- @open(16) [container-id="Standalone_A9d50TgVriH1LKq", max-frame-size=16384, channel-max=32767, idle-time-out=8000, offered-capabilities=:"ANONYMOUS-RELAY", properties={:product="qpid-dispatch-router", :version="1.6.0-SNAPSHOT", :"qd.conn-id"=23}]
[0x55ddd54175e0]:0 <- @begin(17) [remote-channel=0, next-outgoing-id=0, incoming-window=2147483647, outgoing-window=2147483647]
[0x55ddd54175e0]:0 <- @attach(18) [name="c717a8c8-017b-4a86-bb18-a0b32e4969d7-examples", handle=0, role=true, snd-settle-mode=2, rcv-settle-mode=0, source=@source(40) [durable=0, expiry-policy=:"session-end", timeout=0, dynamic=false], target=@target(41) [address="examples", durable=0, expiry-policy=:"session-end", timeout=0, dynamic=false], initial-delivery-count=0, max-message-size=0]
[0x55ddd54175e0]:0 <- @flow(19) [next-incoming-id=0, incoming-window=2147483647, next-outgoing-id=0, outgoing-window=2147483647, handle=0, delivery-count=0, link-credit=250, drain=false]
[0x55ddd54175e0]:0 -> @transfer(20) [handle=0, delivery-id=0, delivery-tag=b"1", message-format=0] (42) "\x00SpE\x00Ss\xd0\x00\x00\x00\x06\x00\x00\x00\x01S\x01\x00Sw\xd1\x00\x00\x00\x10\x00\x00\x00\x02\xa1\x08sequenceT\x01"
[0x55ddd54175e0]:0 <- @flow(19) [next-incoming-id=1, incoming-window=2147483647, next-outgoing-id=0, outgoing-window=2147483647, handle=0, delivery-count=1, link-credit=250, drain=false]
[0x55ddd54175e0]:0 <- @disposition(21) [role=true, first=0, settled=true, state=@accepted(36) []]
[0x55ddd54175e0]:0 -> (EMPTY FRAME)
[0x55ddd54175e0]:0 -> (EMPTY FRAME)
Sending next batch
[0x55ddd54175e0]:0 -> @transfer(20) [handle=0, delivery-id=1, delivery-tag=b"2", message-format=0] (42) "\x00SpE\x00Ss\xd0\x00\x00\x00\x06\x00\x00\x00\x01S\x02\x00Sw\xd1\x00\x00\x00\x10\x00\x00\x00\x02\xa1\x08sequenceT\x02"
[0x55ddd54175e0]:0 <- @flow(19) [next-incoming-id=2, incoming-window=2147483647, next-outgoing-id=0, outgoing-window=2147483647, handle=0, delivery-count=2, link-credit=249, drain=true]
[0x55ddd54175e0]:0 <- @disposition(21) [role=true, first=1, settled=true, state=@released(38) []]
[0x55ddd54175e0]:0 -> @flow(19) [next-incoming-id=0, incoming-window=2147483647, next-outgoing-id=2, outgoing-window=2147483647, handle=0, delivery-count=251, link-credit=0, drain=true]
[0x55ddd54175e0]:0 -> (EMPTY FRAME)
[0x55ddd54175e0]:0 -> (EMPTY FRAME)
Sending next batch
[0x55ddd54175e0]:0 -> (EMPTY FRAME)
[0x55ddd54175e0]:0 <- @flow(19) [next-incoming-id=2, incoming-window=2147483647, next-outgoing-id=0, outgoing-window=2147483647, handle=0, delivery-count=251, link-credit=1, drain=false]
[0x55ddd54175e0]:0 -> @transfer(20) [handle=0, delivery-id=2, delivery-tag=b"3", message-format=0] (42) "\x00SpE\x00Ss\xd0\x00\x00\x00\x06\x00\x00\x00\x01S\x03\x00Sw\xd1\x00\x00\x00\x10\x00\x00\x00\x02\xa1\x08sequenceT\x03"
[0x55ddd54175e0]:0 <- @flow(19) [next-incoming-id=3, incoming-window=2147483647, next-outgoing-id=0, outgoing-window=2147483647, handle=0, delivery-count=252, link-credit=1, drain=false]
[0x55ddd54175e0]:0 <- @disposition(21) [role=true, first=2, settled=true, state=@accepted(36) []]
[0x55ddd54175e0]:0 -> @transfer(20) [handle=0, delivery-id=3, delivery-tag=b"4", message-format=0] (42) "\x00SpE\x00Ss\xd0\x00\x00\x00\x06\x00\x00\x00\x01S\x04\x00Sw\xd1\x00\x00\x00\x10\x00\x00\x00\x02\xa1\x08sequenceT\x04"
[0x55ddd54175e0]:0 <- @flow(19) [next-incoming-id=4, incoming-window=2147483647, next-outgoing-id=0, outgoing-window=2147483647, handle=0, delivery-count=253, link-credit=1, drain=false]
[0x55ddd54175e0]:0 <- @disposition(21) [role=true, first=3, settled=true, state=@accepted(36) []]
[0x55ddd54175e0]:0 -> @transfer(20) [handle=0, delivery-id=4, delivery-tag=b"5", message-format=0] (42) "\x00SpE\x00Ss\xd0\x00\x00\x00\x06\x00\x00\x00\x01S\x05\x00Sw\xd1\x00\x00\x00\x10\x00\x00\x00\x02\xa1\x08sequenceT\x05"
[0x55ddd54175e0]:0 <- @flow(19) [next-incoming-id=5, incoming-window=2147483647, next-outgoing-id=0, outgoing-window=2147483647, handle=0, delivery-count=254, link-credit=1, drain=false]
[0x55ddd54175e0]:0 <- @disposition(21) [role=true, first=4, settled=true, state=@accepted(36) []]
[0x55ddd54175e0]:0 -> @transfer(20) [handle=0, delivery-id=5, delivery-tag=b"6", message-format=0] (42) "\x00SpE\x00Ss\xd0\x00\x00\x00\x06\x00\x00\x00\x01S\x06\x00Sw\xd1\x00\x00\x00\x10\x00\x00\x00\x02\xa1\x08sequenceT\x06"
[0x55ddd54175e0]:0 <- @flow(19) [next-incoming-id=6, incoming-window=2147483647, next-outgoing-id=0, outgoing-window=2147483647, handle=0, delivery-count=255, link-credit=1, drain=false]
[0x55ddd54175e0]:0 <- @disposition(21) [role=true, first=5, settled=true, state=@accepted(36) []]
[0x55ddd54175e0]:0 -> @transfer(20) [handle=0, delivery-id=6, delivery-tag=b"7", message-format=0] (42) "\x00SpE\x00Ss\xd0\x00\x00\x00\x06\x00\x00\x00\x01S\x07\x00Sw\xd1\x00\x00\x00\x10\x00\x00\x00\x02\xa1\x08sequenceT\x07"
[0x55ddd54175e0]:0 <- @flow(19) [next-incoming-id=7, incoming-window=2147483647, next-outgoing-id=0, outgoing-window=2147483647, handle=0, delivery-count=256, link-credit=1, drain=false]
[0x55ddd54175e0]:0 <- @disposition(21) [role=true, first=6, settled=true, state=@accepted(36) []]
[0x55ddd54175e0]:0 -> (EMPTY FRAME)
Sending next batch
[0x55ddd54175e0]:0 -> @transfer(20) [handle=0, delivery-id=7, delivery-tag=b"8", message-format=0] (42) "\x00SpE\x00Ss\xd0\x00\x00\x00\x06\x00\x00\x00\x01S\x08\x00Sw\xd1\x00\x00\x00\x10\x00\x00\x00\x02\xa1\x08sequenceT\x08"
[0x55ddd54175e0]:0 <- @flow(19) [next-incoming-id=8, incoming-window=2147483647, next-outgoing-id=0, outgoing-window=2147483647, handle=0, delivery-count=257, link-credit=1, drain=false]
[0x55ddd54175e0]:0 <- @disposition(21) [role=true, first=7, settled=true, state=@accepted(36) []]
[0x55ddd54175e0]:0 -> @transfer(20) [handle=0, delivery-id=8, delivery-tag=b"9", message-format=0] (42) "\x00SpE\x00Ss\xd0\x00\x00\x00\x06\x00\x00\x00\x01S\x09\x00Sw\xd1\x00\x00\x00\x10\x00\x00\x00\x02\xa1\x08sequenceT\x09"
[0x55ddd54175e0]:0 <- @flow(19) [next-incoming-id=9, incoming-window=2147483647, next-outgoing-id=0, outgoing-window=2147483647, handle=0, delivery-count=258, link-credit=1, drain=false]
[0x55ddd54175e0]:0 <- @disposition(21) [role=true, first=8, settled=true, state=@accepted(36) []]
[0x55ddd54175e0]:0 -> @transfer(20) [handle=0, delivery-id=9, delivery-tag=b"10", message-format=0] (42) "\x00SpE\x00Ss\xd0\x00\x00\x00\x06\x00\x00\x00\x01S\x0a\x00Sw\xd1\x00\x00\x00\x10\x00\x00\x00\x02\xa1\x08sequenceT\x0a"
[0x55ddd54175e0]:0 <- @flow(19) [next-incoming-id=10, incoming-window=2147483647, next-outgoing-id=0, outgoing-window=2147483647, handle=0, delivery-count=259, link-credit=1, drain=false]
[0x55ddd54175e0]:0 <- @disposition(21) [role=true, first=9, settled=true, state=@accepted(36) []]
[0x55ddd54175e0]:0 -> @transfer(20) [handle=0, delivery-id=10, delivery-tag=b"11", message-format=0] (42) "\x00SpE\x00Ss\xd0\x00\x00\x00\x06\x00\x00\x00\x01S\x0b\x00Sw\xd1\x00\x00\x00\x10\x00\x00\x00\x02\xa1\x08sequenceT\x0b"
[0x55ddd54175e0]:0 <- @flow(19) [next-incoming-id=11, incoming-window=2147483647, next-outgoing-id=0, outgoing-window=2147483647, handle=0, delivery-count=260, link-credit=1, drain=false]
[0x55ddd54175e0]:0 <- @disposition(21) [role=true, first=10, settled=true, state=@accepted(36) []]
[0x55ddd54175e0]:0 -> @transfer(20) [handle=0, delivery-id=11, delivery-tag=b"12", message-format=0] (42) "\x00SpE\x00Ss\xd0\x00\x00\x00\x06\x00\x00\x00\x01S\x0c\x00Sw\xd1\x00\x00\x00\x10\x00\x00\x00\x02\xa1\x08sequenceT\x0c"
[0x55ddd54175e0]:0 <- @flow(19) [next-incoming-id=12, incoming-window=2147483647, next-outgoing-id=0, outgoing-window=2147483647, handle=0, delivery-count=261, link-credit=1, drain=false]
[0x55ddd54175e0]:0 <- @disposition(21) [role=true, first=11, settled=true, state=@accepted(36) []]

{noformat}

> router gets confused by clients response to drain and subsequently issue too little credit
> ------------------------------------------------------------------------------------------
>
>                 Key: DISPATCH-1287
>                 URL: https://issues.apache.org/jira/browse/DISPATCH-1287
>             Project: Qpid Dispatch
>          Issue Type: Bug
>    Affects Versions: 1.5.0
>            Reporter: Gordon Sim
>            Priority: Major
>             Fix For: 1.6.0
>
>         Attachments: drainable.py
>
>
> A sender is opened for an address on which there is a receiver. It sends one messages which is accepted. The receiver then detaches and the sender tries to send another message. This second message is released and the router attempts to drain the senders credit.
> The sender responds to the drain request by not sending any further messages but incrementing the delivery_count by the appropriate amount.
> If a receiver attaches on the address again after this point, the router issues credit back to the sender, but only issues link-credit=1.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

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