[ https://issues.apache.org/jira/browse/PROTON-1514?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Cliff Jansen resolved PROTON-1514. ---------------------------------- Resolution: Fixed > [proton-c] When last frame of multi-frame transfer has settled=true, Proton > still considers delivery as unsettled > ----------------------------------------------------------------------------------------------------------------- > > Key: PROTON-1514 > URL: https://issues.apache.org/jira/browse/PROTON-1514 > Project: Qpid Proton > Issue Type: Bug > Components: proton-c > Affects Versions: proton-c-0.17.0 > Reporter: Ganesh Murthy > Assignee: Cliff Jansen > Priority: Major > Labels: framing > Fix For: proton-c-0.23.0 > > > I have a situation where a receiver (proton python's simple_recv.py) is > receiving a multi-frame transfer from a Dispatch Router. The settled flag is > false on all the transfer frames except on the last frame which has > settled=true as seen here - > {noformat} > [0x55aeecddb670]:0 <- @transfer(20) [handle=0, delivery-id=0, > delivery-tag=b"\x07\x00\x00\x00\x00\x00\x00\x00", message-format=0, > settled=false, more=true] (16351) "g here33227Long string here33228Long > string here33229Long string here33230Long string here33231Long string > here33232Long string here33233Long string here33234Long string here33235Long > string here33236Long string here33237Long string here33238Long string > here33239Long string here33240Long string here33241Long string here33242Long > string here33243Long string here33244Long string here33245Long string > here33246Long string here33247Long string here33248Long string here33249Long > string here33250Long string here33251Long string here33252Long string > here33253Long string here33254Long string here33255Long string here33256Long > string here33257Long string here33258Long string here33259Long string > here33260Long string here33261Long string here33262Long string here33263Long > string here33264Long string here33265Long string here33266Long string > here33267Long string here33268Long string here33269Long string here33270Long > string here33271Long string here33272Long string here33273Long string > here33274Long string here33275Lon"... (truncated) > [0x55aeecddb670]:0 <- @transfer(20) [handle=0, delivery-id=0, > delivery-tag=b"\x07\x00\x00\x00\x00\x00\x00\x00", message-format=0, > settled=false, more=true] (49053) "ng string here34006Long string > here34007Long string here34008Long string here34009Long string here34010Long > string here34011Long string here34012Long string here34013Long string > here34014Long string here34015Long string here34016Long string here34017Long > string here34018Long string here34019Long string here34020Long string > here34021Long string here34022Long string here34023Long string here34024Long > string here34025Long string here34026Long string here34027Long string > here34028Long string here34029Long string here34030Long string here34031Long > string here34032Long string here34033Long string here34034Long string > here34035Long string here34036Long string here34037Long string here34038Long > string here34039Long string here34040Long string here34041Long string > here34042Long string here34043Long string here34044Long string here34045Long > string here34046Long string here34047Long string here34048Long string > here34049Long string here34050Long string here34051Long string here34052Long > string here34053Long string here"... (truncated) > [0x55aeecddb670]:0 <- @transfer(20) [handle=0, delivery-id=0, > delivery-tag=b"\x07\x00\x00\x00\x00\x00\x00\x00", message-format=0, > settled=false, more=true] (98106) "1Long string here36342Long string > here36343Long string here36344Long string here36345Long string here36346Long > string here36347Long string here36348Long string here36349Long string > here36350Long string here36351Long string here36352Long string here36353Long > string here36354Long string here36355Long string here36356Long string > here36357Long string here36358Long string here36359Long string here36360Long > string here36361Long string here36362Long string here36363Long string > here36364Long string here36365Long string here36366Long string here36367Long > string here36368Long string here36369Long string here36370Long string > here36371Long string here36372Long string here36373Long string here36374Long > string here36375Long string here36376Long string here36377Long string > here36378Long string here36379Long string here36380Long string here36381Long > string here36382Long string here36383Long string here36384Long string > here36385Long string here36386Long string here36387Long string here36388Long > string here36389Long string h"... (truncated) > [0x55aeecddb670]:0 <- @transfer(20) [handle=0, delivery-id=0, > delivery-tag=b"\x07\x00\x00\x00\x00\x00\x00\x00", message-format=0, > settled=false, more=true] (130808) "re41013Long string here41014Long string > here41015Long string here41016Long string here41017Long string here41018Long > string here41019Long string here41020Long string here41021Long string > here41022Long string here41023Long string here41024Long string here41025Long > string here41026Long string here41027Long string here41028Long string > here41029Long string here41030Long string here41031Long string here41032Long > string here41033Long string here41034Long string here41035Long string > here41036Long string here41037Long string here41038Long string here41039Long > string here41040Long string here41041Long string here41042Long string > here41043Long string here41044Long string here41045Long string here41046Long > string here41047Long string here41048Long string here41049Long string > here41050Long string here41051Long string here41052Long string here41053Long > string here41054Long string here41055Long string here41056Long string > here41057Long string here41058Long string here41059Long string here41060Long > string here41061Long st"... (truncated) > [0x55aeecddb670]:0 <- @transfer(20) [handle=0, delivery-id=0, > delivery-tag=b"\x07\x00\x00\x00\x00\x00\x00\x00", message-format=0, > settled=true, more=false] (57905) "ere47242Long string here47243Long string > here47244Long string here47245Long string here47246Long string here47247Long > string here47248Long string here47249Long string here47250Long string > here47251Long string here47252Long string here47253Long string here47254Long > string here47255Long string here47256Long string here47257Long string > here47258Long string here47259Long string here47260Long string here47261Long > string here47262Long string here47263Long string here47264Long string > here47265Long string here47266Long string here47267Long string here47268Long > string here47269Long string here47270Long string here47271Long string > here47272Long string here47273Long string here47274Long string here47275Long > string here47276Long string here47277Long string here47278Long string > here47279Long string here47280Long string here47281Long string here47282Long > string here47283Long string here47284Long string here47285Long string > here47286Long string here47287Long string here47288Long string here47289Long > string here47290Long s"... (truncated) > {noformat} > Proton considers the delivery as unsettled and as a result some of the > Dispatch router tests are failing like this one - > https://github.com/apache/qpid-dispatch/blob/master/tests/system_tests_one_router.py#L1097 > The AMQP 1.0 spec says the following about the settled flag on transfers - > settled - If not set on the first (or only) transfer for a (multi-transfer) > delivery, then the settled flag MUST be interpreted as being false. For > subsequent transfers in a multi-transfer delivery if the settled flag is left > unset then it MUST be interpreted as true if and only if the value of the > settled flag on any of the preceding transfers was true; if no preceding > transfer was sent with settled being true then the value when unset MUST be > taken as false. > My question is, is this delivery settled? It logically looks settled to me > since the last frame did have settled=true. > According to rgodfrey - > I agree the spec is horribly unclear on this point. > I wish we had said something along the lines of two transfers in a > multi-transfer delivery must either both have the same value for settled, > or one must be unset (i.e. you can't have frames for the same transfer > saying both settled and not settled). Given the spec does not say this > then I think we have to treat the case you describe as meaning that the > delivery should be considered settled (and the Proton is behaving > incorrectly by the sounds of it). This interpretation is also reasonable > in the face of the definition of other fields on transfer such as "state". -- 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