On Fri, Aug 26, 2016 at 3:15 PM, Matt Broadstone <[email protected]> wrote:

> On Fri, Aug 26, 2016 at 3:04 PM, Gordon Sim <[email protected]> wrote:
>
>> On 26/08/16 18:50, Matt Broadstone wrote:
>>
>>> Hi all,
>>>
>>> It was my understanding that if you replied to a received message with a
>>> `released` outcome, that the broker would attempt re-delivery to either
>>> the
>>> link that received it or some other attached link. Is that correct?
>>>
>>
>> That is correct.
>>
>>  I'm
>>> not seeing this behavior with this simplified use case (using
>>> node-amqp10):
>>>
>> >
>>
>>> const amqp = require('amqp10');
>>> let client = new amqp.Client();
>>> client.connect('amqp://<some qpidd ip>')
>>>   .then(() => Promise.all([
>>>     client.createSender('test.queue'), client.createReceiver('test.qu
>>> eue')
>>> ]))
>>>   .spread((sender, receiver) => {
>>>     let receiveCount = 0;
>>>     receiver.on('message', msg => {
>>>       receiveCount++;
>>>       if (receiveCount === 10) process.exit(0);
>>>       console.log('received[', receiveCount, '], releasing');
>>>       receiver.release(msg);
>>>     });
>>>
>>>     return sender.send({ test: 'message' });
>>>   });
>>>
>>
>> I think you may be accepting before you release? What qpidd sees is:
>>
>>
> Oops you're sorry I forgot a crucial part there, here's the updated code:
> const amqp = require('amqp10');
>
> let client = new amqp.Client();
> client.connect('amqp://<address>')
>   .then(() => Promise.all([
>     client.createSender('test.queue'),
>     client.createReceiver('test.queue', {
>       attach: { receiverSettleMode: 'settle' }
>     })
>   ]))
>   .spread((sender, receiver) => {
>     let receiveCount = 0;
>     receiver.on('message', msg => {
>       receiveCount++;
>       if (receiveCount === 10) process.exit(0);
>       console.log('received[', receiveCount, '], releasing');
>       receiver.release(msg);
>     });
>
>     return sender.send({ test: 'message' });
>   });
>
> With this code I now get the following on qpidd's side:
>
> 2016-08-26 15:11:15 [Protocol] trace 
> [qpid.192.168.1.5:5672-192.168.1.2:58364]:
> 0 -> @flow(19) [next-incoming-id=2, incoming-window=2147483647,
> next-outgoing-id=0, outgoing-window=2147483647, handle=0, delivery-count=2,
> link-credit=500, drain=false]
> 2016-08-26 15:11:15 [Protocol] trace 
> [qpid.192.168.1.5:5672-192.168.1.2:58364]:
> 0 -> @transfer(20) [handle=1, delivery-id=0, delivery-tag=b"\x00\x00\x00\x00",
> message-format=0, settled=false, more=false] (32)
> "\x00Sp\xc0\x06\x04BP\x04@A\x00Sw\xc1\x10\x02\xa1\x04test\xa1\x07message"
> 2016-08-26 15:11:15 [Protocol] trace 
> [qpid.192.168.1.5:5672-192.168.1.2:58364]:
> 0 -> @disposition(21) [role=true, first=1, last=1, settled=true,
> state=@accepted(36) []]
> 2016-08-26 15:11:15 [Protocol] trace 
> [qpid.192.168.1.5:5672-192.168.1.2:58364]:
> 1 <- @disposition(21) [role=true, first=0, last=0, settled=true,
> state=@released(38) [], batchable=false]
>
> I included the extra frames above to show that I should definitely have
> enough credit for a redelivery. Am I missing something else here?
>
>
>
>> 2016-08-26 20:02:36 [Protocol] trace [qpid.127.0.0.1:5672-127.0.0.1:46958]:
>>> 1 <- @disposition(21) [role=true, first=0, last=0, settled=true,
>>> state=@accepted(36) [], batchable=false]
>>> 2016-08-26 20:02:36 [Protocol] trace [qpid.127.0.0.1:5672-127.0.0.1:46958]:
>>> 1 <- @disposition(21) [role=true, first=0, last=0, settled=true,
>>> state=@released(38) [], batchable=false]
>>>
>>
>> The second disposition is ignored.
>>
>> Running the attached release example against qpidd, I see the behaviour I
>> would expect:
>>
>> $ PN_TRACE_FRM=1 ./release.py
>>> [0x55ee3ab25570]:  -> SASL
>>> [0x55ee3ab25570]:  <- SASL
>>> [0x55ee3ab25570]:0 <- @sasl-mechanisms(64) 
>>> [sasl-server-mechanisms=@PN_SYMBOL[:ANONYMOUS,
>>> :PLAIN]]
>>> [0x55ee3ab25570]:0 -> @sasl-init(65) [mechanism=:ANONYMOUS,
>>> initial-response=b"[email protected]"]
>>> [0x55ee3ab25570]:0 <- @sasl-outcome(68) [code=0]
>>> [0x55ee3ab25570]:  -> AMQP
>>> [0x55ee3ab25570]:0 -> @open(16) 
>>> [container-id="f8de2985-4cd1-4262-8811-22e44e50a5fc",
>>> hostname="localhost", channel-max=32767]
>>> [0x55ee3ab25570]:0 -> @begin(17) [next-outgoing-id=0, incoming-window=
>>> 2147483647, outgoing-window=2147483647]
>>> [0x55ee3ab25570]:0 -> @attach(18) 
>>> [name="f8de2985-4cd1-4262-8811-22e44e50a5fc-examples",
>>> handle=0, role=true, snd-settle-mode=2, rcv-settle-mode=0,
>>> source=@source(40) [address="examples", durable=0, timeout=0,
>>> dynamic=false], target=@target(41) [durable=0, timeout=0, dynamic=false],
>>> initial-delivery-count=0]
>>> [0x55ee3ab25570]:0 -> @attach(18) 
>>> [name="f8de2985-4cd1-4262-8811-22e44e50a5fc-examples",
>>> handle=1, 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]
>>> [0x55ee3ab25570]:0 -> @flow(19) [incoming-window=2147483647,
>>> next-outgoing-id=0, outgoing-window=2147483647, handle=0,
>>> delivery-count=0, link-credit=10, drain=false]
>>> [0x55ee3ab25570]:  <- AMQP
>>> [0x55ee3ab25570]:0 <- @open(16) 
>>> [container-id="a6022696-2483-49f5-8ea6-a6f50db0e7ae",
>>> channel-max=32767, offered-capabilities=@PN_SYMBOL[:"ANONYMOUS-RELAY"],
>>> properties={:product="qpid-cpp", :version="0.35", :platform="Linux",
>>> :host="localhost.localdomain"}]
>>> [0x55ee3ab25570]:0 <- @begin(17) [remote-channel=0, next-outgoing-id=0,
>>> incoming-window=2147483647, outgoing-window=2147483647]
>>> [0x55ee3ab25570]:0 <- @attach(18) 
>>> [name="f8de2985-4cd1-4262-8811-22e44e50a5fc-examples",
>>> handle=0, role=false, snd-settle-mode=2, rcv-settle-mode=0,
>>> source=@source(40) [address="examples", durable=0, timeout=0,
>>> dynamic=false, distribution-mode=:move], target=@target(41) [durable=0,
>>> timeout=0, dynamic=false], initial-delivery-count=0]
>>> [0x55ee3ab25570]:0 <- @attach(18) 
>>> [name="f8de2985-4cd1-4262-8811-22e44e50a5fc-examples",
>>> handle=1, role=true, 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]
>>> [0x55ee3ab25570]:0 <- @flow(19) [next-incoming-id=0, incoming-window=
>>> 2147483647, next-outgoing-id=0, outgoing-window=2147483647, handle=1,
>>> delivery-count=0, link-credit=500, drain=false]
>>> [0x55ee3ab25570]:0 -> @transfer(20) [handle=1, delivery-id=0,
>>> delivery-tag=b"1", message-format=0, settled=false, more=false] (78)
>>> "\x00Sp\xd0\x00\x00\x00\x0b\x00\x00\x00\x05BP\x04@BR\x00\x00
>>> Ss\xd0\x00\x00\x00"\x00\x00\x00\x0d@@@@@@@@\x83\x00\x00\x00\
>>> x00\x00\x00\x00\x00\x83\x00\x00\x00\x00\x00\x00\x00\x00@R\x00@\x00Sw\xa1\x0ctest
>>> message"
>>> [0x55ee3ab25570]:0 <- @flow(19) [next-incoming-id=1, incoming-window=
>>> 2147483647, next-outgoing-id=0, outgoing-window=2147483647, handle=1,
>>> delivery-count=1, link-credit=500, drain=false]
>>> [0x55ee3ab25570]:0 <- @transfer(20) [handle=0, delivery-id=0,
>>> delivery-tag=b"\x00\x00\x00\x00", message-format=0, settled=false,
>>> more=false] (70) "\x00Sp\xc0\x06\x04BP\x04@A\x0
>>> 0Ss\xd0\x00\x00\x00"\x00\x00\x00\x0d@@@@@@@@\x83\x00\x00\x00
>>> \x00\x00\x00\x00\x00\x83\x00\x00\x00\x00\x00\x00\x00\x00@R\x00@\x00Sw\xa1\x0ctest
>>> message"
>>> [0x55ee3ab25570]:0 <- @disposition(21) [role=true, first=0, last=0,
>>> settled=true, state=@accepted(36) []]
>>> [0x55ee3ab25570]:0 -> @disposition(21) [role=true, first=0, last=0,
>>> settled=true, state=@modified(39)
>>
>>
Actually this is interesting as well, it appears that `release` in the
python client is in fact sending a `modified` outcome!


> [delivery-failed=false, undeliverable-here=false]]
>>> [0x55ee3ab25570]:0 <- @transfer(20) [handle=0, delivery-id=1,
>>> delivery-tag=b"\x00\x00\x00\x01", message-format=0, settled=false,
>>> more=false] (85) "\x00Sp\xc0\x06\x04BP\x04@A\x0
>>> 0Sr\xd1\x00\x00\x00\x07\x00\x00\x00\x02\xa1\x00@\x00Ss\xd0\x
>>> 00\x00\x00"\x00\x00\x00\x0d@@@@@@@@\x83\x00\x00\x00\x00\x00\
>>> x00\x00\x00\x83\x00\x00\x00\x00\x00\x00\x00\x00@R\x00@\x00Sw\xa1\x0ctest
>>> message"
>>> [0x55ee3ab25570]:0 -> @flow(19) [next-incoming-id=2, incoming-window=
>>> 2147483647, next-outgoing-id=1, outgoing-window=2147483647, handle=0,
>>> delivery-count=2, link-credit=9, drain=false]
>>> [0x55ee3ab25570]:0 -> @disposition(21) [role=true, first=1, last=1,
>>> settled=true, state=@modified(39) [delivery-failed=false,
>>> undeliverable-here=false]]
>>> [0x55ee3ab25570]:0 <- @transfer(20) [handle=0, delivery-id=2,
>>> delivery-tag=b"\x00\x00\x00\x02", message-format=0, settled=false,
>>> more=false] (85) "\x00Sp\xc0\x06\x04BP\x04@A\x0
>>> 0Sr\xd1\x00\x00\x00\x07\x00\x00\x00\x02\xa1\x00@\x00Ss\xd0\x
>>> 00\x00\x00"\x00\x00\x00\x0d@@@@@@@@\x83\x00\x00\x00\x00\x00\
>>> x00\x00\x00\x83\x00\x00\x00\x00\x00\x00\x00\x00@R\x00@\x00Sw\xa1\x0ctest
>>> message"
>>> [0x55ee3ab25570]:0 -> @flow(19) [next-incoming-id=3, incoming-window=
>>> 2147483647, next-outgoing-id=1, outgoing-window=2147483647, handle=0,
>>> delivery-count=3, link-credit=9, drain=false]
>>> [0x55ee3ab25570]:0 -> @disposition(21) [role=true, first=2, last=2,
>>> settled=true, state=@modified(39) [delivery-failed=false,
>>> undeliverable-here=false]]
>>> [0x55ee3ab25570]:0 <- @transfer(20) [handle=0, delivery-id=3,
>>> delivery-tag=b"\x00\x00\x00\x03", message-format=0, settled=false,
>>> more=false] (85) "\x00Sp\xc0\x06\x04BP\x04@A\x0
>>> 0Sr\xd1\x00\x00\x00\x07\x00\x00\x00\x02\xa1\x00@\x00Ss\xd0\x
>>> 00\x00\x00"\x00\x00\x00\x0d@@@@@@@@\x83\x00\x00\x00\x00\x00\
>>> x00\x00\x00\x83\x00\x00\x00\x00\x00\x00\x00\x00@R\x00@\x00Sw\xa1\x0ctest
>>> message"
>>> [0x55ee3ab25570]:0 -> @flow(19) [next-incoming-id=4, incoming-window=
>>> 2147483647, next-outgoing-id=1, outgoing-window=2147483647, handle=0,
>>> delivery-count=4, link-credit=9, drain=false]
>>> [0x55ee3ab25570]:0 -> @disposition(21) [role=true, first=3, last=3,
>>> settled=true, state=@modified(39) [delivery-failed=false,
>>> undeliverable-here=false]]
>>> [0x55ee3ab25570]:0 <- @transfer(20) [handle=0, delivery-id=4,
>>> delivery-tag=b"\x00\x00\x00\x04", message-format=0, settled=false,
>>> more=false] (85) "\x00Sp\xc0\x06\x04BP\x04@A\x0
>>> 0Sr\xd1\x00\x00\x00\x07\x00\x00\x00\x02\xa1\x00@\x00Ss\xd0\x
>>> 00\x00\x00"\x00\x00\x00\x0d@@@@@@@@\x83\x00\x00\x00\x00\x00\
>>> x00\x00\x00\x83\x00\x00\x00\x00\x00\x00\x00\x00@R\x00@\x00Sw\xa1\x0ctest
>>> message"
>>> [0x55ee3ab25570]:0 -> @flow(19) [next-incoming-id=5, incoming-window=
>>> 2147483647, next-outgoing-id=1, outgoing-window=2147483647, handle=0,
>>> delivery-count=5, link-credit=9, drain=false]
>>> [0x55ee3ab25570]:0 -> @disposition(21) [role=true, first=4, last=4,
>>> settled=true, state=@modified(39) [delivery-failed=false,
>>> undeliverable-here=false]]
>>> [0x55ee3ab25570]:0 <- @transfer(20) [handle=0, delivery-id=5,
>>> delivery-tag=b"\x00\x00\x00\x05", message-format=0, settled=false,
>>> more=false] (85) "\x00Sp\xc0\x06\x04BP\x04@A\x0
>>> 0Sr\xd1\x00\x00\x00\x07\x00\x00\x00\x02\xa1\x00@\x00Ss\xd0\x
>>> 00\x00\x00"\x00\x00\x00\x0d@@@@@@@@\x83\x00\x00\x00\x00\x00\
>>> x00\x00\x00\x83\x00\x00\x00\x00\x00\x00\x00\x00@R\x00@\x00Sw\xa1\x0ctest
>>> message"
>>> [0x55ee3ab25570]:0 -> @flow(19) [next-incoming-id=6, incoming-window=
>>> 2147483647, next-outgoing-id=1, outgoing-window=2147483647, handle=0,
>>> delivery-count=6, link-credit=9, drain=false]
>>> [0x55ee3ab25570]:0 -> @disposition(21) [role=true, first=5, last=5,
>>> settled=true, state=@modified(39) [delivery-failed=false,
>>> undeliverable-here=false]]
>>> [0x55ee3ab25570]:0 <- @transfer(20) [handle=0, delivery-id=6,
>>> delivery-tag=b"\x00\x00\x00\x06", message-format=0, settled=false,
>>> more=false] (85) "\x00Sp\xc0\x06\x04BP\x04@A\x0
>>> 0Sr\xd1\x00\x00\x00\x07\x00\x00\x00\x02\xa1\x00@\x00Ss\xd0\x
>>> 00\x00\x00"\x00\x00\x00\x0d@@@@@@@@\x83\x00\x00\x00\x00\x00\
>>> x00\x00\x00\x83\x00\x00\x00\x00\x00\x00\x00\x00@R\x00@\x00Sw\xa1\x0ctest
>>> message"
>>> [0x55ee3ab25570]:0 -> @flow(19) [next-incoming-id=7, incoming-window=
>>> 2147483647, next-outgoing-id=1, outgoing-window=2147483647, handle=0,
>>> delivery-count=7, link-credit=9, drain=false]
>>> [0x55ee3ab25570]:0 -> @disposition(21) [role=true, first=6, last=6,
>>> settled=true, state=@modified(39) [delivery-failed=false,
>>> undeliverable-here=false]]
>>> [0x55ee3ab25570]:0 <- @transfer(20) [handle=0, delivery-id=7,
>>> delivery-tag=b"\x00\x00\x00\x07", message-format=0, settled=false,
>>> more=false] (85) "\x00Sp\xc0\x06\x04BP\x04@A\x0
>>> 0Sr\xd1\x00\x00\x00\x07\x00\x00\x00\x02\xa1\x00@\x00Ss\xd0\x
>>> 00\x00\x00"\x00\x00\x00\x0d@@@@@@@@\x83\x00\x00\x00\x00\x00\
>>> x00\x00\x00\x83\x00\x00\x00\x00\x00\x00\x00\x00@R\x00@\x00Sw\xa1\x0ctest
>>> message"
>>> [0x55ee3ab25570]:0 -> @flow(19) [next-incoming-id=8, incoming-window=
>>> 2147483647, next-outgoing-id=1, outgoing-window=2147483647, handle=0,
>>> delivery-count=8, link-credit=9, drain=false]
>>> [0x55ee3ab25570]:0 -> @disposition(21) [role=true, first=7, last=7,
>>> settled=true, state=@modified(39) [delivery-failed=false,
>>> undeliverable-here=false]]
>>> [0x55ee3ab25570]:0 <- @transfer(20) [handle=0, delivery-id=8,
>>> delivery-tag=b"\x00\x00\x00\x08", message-format=0, settled=false,
>>> more=false] (85) "\x00Sp\xc0\x06\x04BP\x04@A\x0
>>> 0Sr\xd1\x00\x00\x00\x07\x00\x00\x00\x02\xa1\x00@\x00Ss\xd0\x
>>> 00\x00\x00"\x00\x00\x00\x0d@@@@@@@@\x83\x00\x00\x00\x00\x00\
>>> x00\x00\x00\x83\x00\x00\x00\x00\x00\x00\x00\x00@R\x00@\x00Sw\xa1\x0ctest
>>> message"
>>> [0x55ee3ab25570]:0 -> @flow(19) [next-incoming-id=9, incoming-window=
>>> 2147483647, next-outgoing-id=1, outgoing-window=2147483647, handle=0,
>>> delivery-count=9, link-credit=9, drain=false]
>>> [0x55ee3ab25570]:0 -> @disposition(21) [role=true, first=8, last=8,
>>> settled=true, state=@modified(39) [delivery-failed=false,
>>> undeliverable-here=false]]
>>> [0x55ee3ab25570]:0 <- @transfer(20) [handle=0, delivery-id=9,
>>> delivery-tag=b"\x00\x00\x00\x09", message-format=0, settled=false,
>>> more=false] (85) "\x00Sp\xc0\x06\x04BP\x04@A\x0
>>> 0Sr\xd1\x00\x00\x00\x07\x00\x00\x00\x02\xa1\x00@\x00Ss\xd0\x
>>> 00\x00\x00"\x00\x00\x00\x0d@@@@@@@@\x83\x00\x00\x00\x00\x00\
>>> x00\x00\x00\x83\x00\x00\x00\x00\x00\x00\x00\x00@R\x00@\x00Sw\xa1\x0ctest
>>> message"
>>> [0x55ee3ab25570]:0 -> @disposition(21) [role=true, first=9, last=9,
>>> settled=true, state=@modified(39) [delivery-failed=false,
>>> undeliverable-here=false]]
>>> [0x55ee3ab25570]:0 -> @detach(22) [handle=0, closed=true]
>>> [0x55ee3ab25570]:0 -> @close(24) []
>>> [0x55ee3ab25570]:  -> EOS
>>> [0x55ee3ab25570]:0 <- @detach(22) [handle=0, closed=true]
>>> [0x55ee3ab25570]:0 <- @close(24) []
>>> [0x55ee3ab25570]:  <- EOS
>>>
>>
>>
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [email protected]
>> For additional commands, e-mail: [email protected]
>>
>
>

Reply via email to