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

Praveen Bodke commented on PROTON-1890:
---------------------------------------

Hello Robbie Gemmell, 

With some modifications to credit window, now i am able to reproduce the issue. 
Attaching the modified scheduled_send_03.cpp and server_direct.cpp programs. 

Please let me know if you need any more information. I would be happy to 
provide you.

Let me go through the scenario here.

STEP 1: 
Two peers P1 and P2 have established the connection and following are the frame 
information. 

server listening on <P1-IP>:1239/examples
[0x225f360]:  <- AMQP
[0x225f360]:0 <- @open(16) 
[container-id="b3d1fa29-84eb-4c1e-bd1e-2a11123b2a64", hostname="10.1.14.102", 
channel-max=32767, idle-time-out=15000]
[0x225f360]:0 <- @begin(17) [next-outgoing-id=0, incoming-window=2147483647, 
outgoing-window=2147483647]
[0x225f360]:0 <- @attach(18) [name="2b590c4a-e237-4522-81f1-8442f2f40844", 
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="example", 
durable=0, timeout=0, dynamic=false], initial-delivery-count=0, 
max-message-size=0]
[0x225f360]:  -> AMQP
[0x225f360]:0 -> @open(16) 
[container-id="816b5f5c-4b6d-4e50-8a3e-096963ec5e26", channel-max=32767, 
idle-time-out=10000]
[0x225f360]:0 -> @begin(17) [remote-channel=0, next-outgoing-id=0, 
incoming-window=2147483647, outgoing-window=2147483647]
[0x225f360]:0 -> @attach(18) [name="2b590c4a-e237-4522-81f1-8442f2f40844", 
handle=0, role=true, snd-settle-mode=2, rcv-settle-mode=0, source=@source(40) 
[durable=0, timeout=0, dynamic=false], target=@target(41) [durable=0, 
timeout=0, dynamic=false], initial-delivery-count=0, max-message-size=0]
[0x225f360]:0 -> @flow(19) [next-incoming-id=0, incoming-window=2147483647, 
next-outgoing-id=0, outgoing-window=2147483647, handle=0, delivery-count=0, 
link-credit=100, drain=false]
[0x225f360]:0 <- @attach(18) [name="2430291c-75ac-4a22-9e6d-dc5e179df431", 
handle=1, role=true, snd-settle-mode=2, rcv-settle-mode=0, source=@source(40) 
[address="X.X.X.X:1239/example", durable=0, timeout=0, dynamic=false], 
target=@target(41) [durable=0, timeout=0, dynamic=false], 
initial-delivery-count=0, max-message-size=0]
[0x225f360]:0 <- @flow(19) [next-incoming-id=0, incoming-window=2147483647, 
next-outgoing-id=0, outgoing-window=2147483647, handle=1, delivery-count=0, 
link-credit=200, drain=false]


P1 receiver credit window is set to 200, this means the P2 sender credit limit 
is 200.

[0x225f360]:0 <- @flow(19) [next-incoming-id=0, incoming-window=2147483647, 
next-outgoing-id=0, outgoing-window=2147483647, handle=1, delivery-count=0, 
link-credit=200, drain=false]

P2 receiver credit window is set to 100
[0x225f360]:0 -> @flow(19) [next-incoming-id=0, incoming-window=2147483647, 
next-outgoing-id=0, outgoing-window=2147483647, handle=0, delivery-count=0, 
link-credit=100, drain=false]


STEP 2: 
P2 sends the messages continuously.. during this time frame, we drop all the 
packets between two peers.

STEP 3:
P1 detects the idle-time-out expiry after sending the some empty frames.

[0x1a36360]:0 -> @flow(19) [next-incoming-id=2000, incoming-window=2147483647, 
next-outgoing-id=0, outgoing-window=2147483647, handle=0, delivery-count=2000, 
link-credit=100, drain=false]
[0x1a36360]:0 -> @disposition(21) [role=true, first=1958, last=1999, 
settled=true, state=@accepted(36) []]
[0x1a36360]:0 -> (EMPTY FRAME)
[0x1a36360]:0 -> (EMPTY FRAME)
[0x1a36360]:0 -> @close(24) [error=@error(29) 
[condition=:"amqp:resource-limit-exceeded", description="local-idle-timeout 
expired"]]
[0x1a36360]:  -> EOS
amqp:resource-limit-exceeded: local-idle-timeout expired


STEP 4:
P2 still in ESTABLISHED state and never disconnects. 

 [^PROTON-1890.zip] 

> [c++] implement idle_timeout and heartbeats
> -------------------------------------------
>
>                 Key: PROTON-1890
>                 URL: https://issues.apache.org/jira/browse/PROTON-1890
>             Project: Qpid Proton
>          Issue Type: Bug
>          Components: cpp-binding
>    Affects Versions: 0.16.0
>            Reporter: Praveen Bodke
>            Priority: Major
>         Attachments: PROTON-1890.zip
>
>
> This is similar issue reported in PROTON-1782 for ruby. 
> We are facing this issue in cpp binding and i am able to reproduce the issue 
> with scheduled_send_03.cpp example. The test scenario is to drop all the 
> packets from both the interfaces after the successful connection. The only 
> change i made to this example is to send messages continuously inside the 
> send() method. The other end is detecting the error as it is sending the 
> empty frames and no response is heard.
> The proton is not sending the heartbeat messages (empty frames) as the sender 
> is busy in sending the data frames. Is it not necessary to send empty frames 
> even if the data frames are sent?
>  



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

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

Reply via email to