Alan Conway created PROTON-1078:
-----------------------------------
Summary: go electron broker dequeues an extra message
Key: PROTON-1078
URL: https://issues.apache.org/jira/browse/PROTON-1078
Project: Qpid Proton
Issue Type: Bug
Components: go-binding
Affects Versions: 0.11
Reporter: Alan Conway
Assignee: Alan Conway
The go broker appears to dequeue an extra message in excess of link credit. It
does not send the message but puts it back on the queue, but it should not have
been dequeued in the first place without sufficient credit.
Run the go exampe broker
{code}
cd examples/go/electron
PN_TRACE_FRM=1 go run broker.go -debug
{code}
Then run this python client:
{code}
#!/usr/bin/python
from proton import *
messenger = Messenger()
messenger.incoming_window = 1
messenger.start()
messenger.subscribe("localhost/test")
m = Message()
messenger.recv(1)
t = messenger.get(m)
print m.address, m.subject or "(no subject)", m.properties, m.body
messenger.accept(t)
messenger.stop()
{code}
As the following output shows, the broker attempts to send 2 messages, fails on
the second and puts it back on the queue. It should not have attempted to send
the second message since only 1 credit was granted.
{code}
broker(4374): Accepted 127.0.0.1:5672-127.0.0.1:44522
[0x7fbb6c014990]: <- AMQP
[0x7fbb6c014990]:0 <- @open(16)
[container-id="AE522C5A-8BC0-4C3E-A75B-D1256C1AAA47", hostname="localhost",
channel-max=32767]
[0x7fbb6c014990]:0 <- @begin(17) [next-outgoing-id=0,
incoming-window=2147483647, outgoing-window=2147483647]
[0x7fbb6c014990]:0 <- @attach(18) [name="test", handle=0, role=true,
snd-settle-mode=1, rcv-settle-mode=0, source=@source(40) [address="test",
durable=0, timeout=0, dynamic=false], target=@target(41) [address="test",
durable=0, timeout=0, dynamic=false], initial-delivery-count=0]
[0x7fbb6c014990]:0 <- @flow(19) [incoming-window=2147483647,
next-outgoing-id=0, outgoing-window=2147483647, handle=0, delivery-count=0,
link-credit=1, drain=false]
broker(4374): incoming: session: &{}/0x1880800
broker(4374): incoming: link(sender): test(test->test)
broker(4374): test(test->test): sent "test-0"
[0x7fbb6c014990]: -> AMQP
[0x7fbb6c014990]:0 -> @open(16)
[container-id="A28BE353-586E-4023-9590-995C2EC8362C", channel-max=32767]
[0x7fbb6c014990]:0 -> @begin(17) [remote-channel=0, next-outgoing-id=0,
incoming-window=2147483647, outgoing-window=2147483647]
[0x7fbb6c014990]:0 -> @attach(18) [name="test", handle=0, role=false,
snd-settle-mode=2, rcv-settle-mode=0, source=@source(40) [address="test",
durable=0, timeout=0, dynamic=false], target=@target(41) [address="test",
durable=0, timeout=0, dynamic=false], initial-delivery-count=0]
broker(4374): test(test->test): sent "test-1"
[0x7fbb6c014990]:0 -> @transfer(20) [handle=0, delivery-id=0,
delivery-tag=b"1", message-format=0, settled=true, more=false] (72)
"\x00Sp\xd0\x00\x00\x00\x0b\x00\x00\x00\x05BP\x04@BR\x00\x00Ss\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\x06test-0"
[0x7fbb6c014990]:0 <- @detach(22) [handle=0, closed=true]
[0x7fbb6c014990]:0 <- @close(24) []
[0x7fbb6c014990]: <- EOS
[0x7fbb6c014990]: <- EOS
[0x7fbb6c014990]:0 -> @detach(22) [handle=0, closed=true]
[0x7fbb6c014990]:0 -> @close(24) []
[0x7fbb6c014990]: -> EOS
broker(4374): test(test->test) closed: EOF
broker(4374): message "test-1" put back, status unsent, error EOF
{code}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)