You are viewing a plain text version of this content. The canonical link for it is here.
Posted to proton@qpid.apache.org by "ASF subversion and git services (JIRA)" <ji...@apache.org> on 2015/11/03 13:45:27 UTC

[jira] [Commented] (PROTON-971) [proton-j] multi-frame deliveries may be broken when sent if buffered along with a futher delivery for the same link

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

ASF subversion and git services commented on PROTON-971:
--------------------------------------------------------

Commit a94e635152e5ab32c3dbe5ea87f88173d01f4ce1 in qpid-proton's branch refs/heads/master from Robert Gemmell
[ https://git-wip-us.apache.org/repos/asf?p=qpid-proton.git;h=a94e635 ]

PROTON-971: record the in-progress delivery on the transport link, don't send transfers for new deliveries until the existing one is completed


> [proton-j] multi-frame deliveries may be broken when sent if buffered along with a futher delivery for the same link
> --------------------------------------------------------------------------------------------------------------------
>
>                 Key: PROTON-971
>                 URL: https://issues.apache.org/jira/browse/PROTON-971
>             Project: Qpid Proton
>          Issue Type: Bug
>          Components: proton-j
>    Affects Versions: 0.10
>            Reporter: Robbie Gemmell
>            Priority: Critical
>             Fix For: 0.11
>
>         Attachments: PROTON-971_test.patch
>
>
> Proton-j sends at most a single frame for a delivery in each call to "processTransportWorkSender(DeliveryImpl delivery, SenderImpl snd)", which occurs for each sent delivery on the 'transport work list' in turn during the "processTransportWork" call. That call is made twice for each process of the transport. As such, at most 2 frames for each delivery can be emitted for each process of the transport. However, because all deliveries on the connections 'transport work list' are processed in turn by "processTransportWork", it is possible that interleaved transfer frames for subsequent deliveries on the same link will also be emitted if there are other buffered deliveries on the work list and the session window and frame writer 'isFUll' checks permit it.
> This in itself would already be illegal [1] even if the frames were otherwise correct, but the erroenous transfer frames also get marked with the wrong delivery-id since that is only incremented by the transport when a delivery has been completed, so if it was not all sent yet then the initial/interleaved transfer frames for the subsequent delivery are also stamped with the same id. Proton-j uses the delivery-id while consitituting received deliveries, and thus the mismatch results in interleaving of the payload from the later delivery within that for the earlier delivery.
> [1] http://docs.oasis-open.org/amqp/core/v1.0/os/amqp-core-transport-v1.0-os.html#doc-idp484080
> "However, messages transferred along a single link MUST NOT be interleaved."



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)