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

Clifford Jansen commented on PROTON-2005:
-----------------------------------------

The engine only drops unsent buffered data in the case of single frame 
transfers. In multiframe transfers, the buffered data is sent with the abort. 
If there is sufficient data to exceed the max frame size, multiple frames will 
be generated to send all the data, each frame with a header indicating settled 
and aborted.

By contrast, aborting a multiframe transfer correctly updates the 
pn_session_outgoing_bytes() value, but aborting a single frame does not.

I have updated the tests to check for the correct behaviour.

The fix is to clear the buffer data and associated accounting when processing 
the pn_delivery_abort() call itself.

 

> [proton-c] AMQP error if delivery is aborted with session_outgoing bytes > 0
> ----------------------------------------------------------------------------
>
>                 Key: PROTON-2005
>                 URL: https://issues.apache.org/jira/browse/PROTON-2005
>             Project: Qpid Proton
>          Issue Type: Bug
>          Components: proton-c
>    Affects Versions: proton-c-0.26.0, proton-c-0.27.0, proton-c-0.27.1, 
> proton-c-0.28.0, proton-c-0.29.0, proton-c-0.30.0
>            Reporter: Charles E. Rolke
>            Assignee: Clifford Jansen
>            Priority: Critical
>             Fix For: proton-c-0.31.0
>
>         Attachments: PROTON-2005-router-print-debug.txt, 
> PROTON-2005-router-scrape.html, PROTON-2005-selftest-printf.txt.txt
>
>
> Running the test case in https://issues.apache.org/jira/browse/DISPATCH-1265
> The self test is  a two-router network with a test sender sending to router A 
> and a test receiver receiving from router B. The test sender is sending some 
> number of bytes and then aborting the delivery. In the observations here 
> router A is transmitting incorrect AMQP over the interrouter link to router B 
> in response to the abort.
>  * A 400K byte message is being transmitted. 320K bytes have already gone 
> over the wire
>  * The message is aborted. with  session_outgoing 84992
>  * Over the wire six transfers send the 84992 bytes with the same delivery-id 
> and with abort=true
> A dispatch log scraper trace of router A for the interrouter link to router B:
>  
> {{  delivery 21 is in progress}}
> {{2019-02-08 05:07:41.140975 A0#1480 A [A0_4] -> [B0_1] B transfer [0,10] 
> (21) more transfer_93 - 16346 bytes (pending)}}
> {{2019-02-08 05:07:41.141066 A0#1486 A [A0_4] -> [B0_1] B transfer [0,10] 
> (21) more transfer_99 - 16346 bytes (pending)}}
> {{2019-02-08 05:07:41.141087 A0#1488 A [A0_4] -> [B0_1] B transfer [0,10] 
> (21) more transfer_102 - 228 bytes (pending)}}
> {{2019-02-08 05:07:41.141169 A0#1492 A [A0_4] <- [B0_1] B flow [0,10] 
> (14,250)}}
> {{  delivery 21 is aborted with session_outgoing 84992}}
> {{  over the wire the session bytes are bled down with multiple transfers 
> that have both 'more' and 'aborted' set true}}
> {{2019-02-08 05:07:41.141514 A0#1513 A [A0_4] -> [B0_1] B transfer [0,10] 
> (21) settled more aborted transfer_93 - 16342 bytes transfer presettled}}
> {{2019-02-08 05:07:41.141538 A0#1514 A [A0_4] -> [B0_1] B transfer [0,10] 
> (21) settled more aborted transfer_94 - 16342 bytes transfer presettled}}
> {{2019-02-08 05:07:41.141564 A0#1517 A [A0_4] -> [B0_1] B transfer [0,10] 
> (21) settled more aborted transfer_96 - 16342 bytes transfer presettled}}
> {{2019-02-08 05:07:41.141603 A0#1521 A [A0_4] -> [B0_1] B transfer [0,10] 
> (21) settled more aborted transfer_99 - 16342 bytes transfer presettled}}
> {{2019-02-08 05:07:41.141669 A0#1527 A [A0_4] -> [B0_1] B transfer [0,10] 
> (21) settled more aborted transfer_92 - 16342 bytes transfer presettled}}
> {{2019-02-08 05:07:41.141722 A0#1531 A [A0_4] -> [B0_1] B transfer [0,10] 
> (21) settled aborted transfer_93 - 13522 bytes transfer presettled}}
> {{  delivery 22 is started}}
> {{2019-02-08 05:07:41.142542 A0#1576 A [A0_4] -> [B0_1] B transfer [0,10] 
> (22) more transfer_107 - 16346 bytes (pending)}}
> {{2019-02-08 05:07:41.142578 A0#1579 A [A0_4] -> [B0_1] B transfer [0,10] 
> (22) more transfer_108 - 16346 bytes (pending)}}
> {{2019-02-08 05:07:41.142608 A0#1581 A [A0_4] -> [B0_1] B transfer [0,10] 
> (22) more transfer_109 - 16346 bytes (pending) ...}}
> {{  eventually peer router B closes the connection}}
> {{2019-02-08 05:07:41.144746 A0#1730 A [A0_4] <- [B0_1] B close [0] error 
> :"amqp:session:invalid-field" "sequencing error, expected delivery-id 22, got 
> 21"}}
> {{2019-02-08 05:07:41.144767 A0#1732 A [A0_4] <- [B0_1] B EOS}}
> The transfer at 05:07:41.141514 settles the delivery and the next transfer is 
> an AMQP protocol violation.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to