Skip to content

Transfer-ID reuse in response transfers was a design mistake and it warrants a footnote #148

@pavel-kirienko

Description

@pavel-kirienko

The transfer-ID is quite essential for multi-frame reassembly, deduplication, sequence monitoring, and redundant interface selection, but its usage for request/response matching was a mistake because it interferes with the primary use cases if the server responds to multiple requests not in the order of their arrival, which has been observed in the wild.

Image

One mitigation is to use a transfer-ID timeout of zero for response transfers; see:

We already mention in Spec v1.0 that the transfer-ID timeout of response ports should be zero, but that is not enough because a delayed duplicated start-of-transfer arriving at the client RX port may cause the port to discard a valid incomplete multiframe transfer, causing transfer loss. Ideally, the transfer-ID timeout should never be zero to avoid this condition.

There is no way to fix this now without breaking compatibility, so this is going to stay as is in RPCs. In v1.1 named topics we should send the responded-to transfer-ID as part of the response payload header.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions