Skip to content

[Rust][Arrow] Preserve ACK deadlines during graceful rotation #656

Description

@teodordelibasic-db

Summary

Server-requested Arrow Flight graceful rotation currently replaces normal ACK waiting with the server grace-period deadline. A pending batch can therefore outlive server_lack_of_ack_timeout_ms while graceful close or transport drain is active.

Keep the oldest pending batch's absolute ACK deadline active throughout graceful rotation.

Prior draft #592 explored this behavior on an obsolete effort/* stack. It was closed so the implementation can be rebuilt as a fresh PR stacked on #654.

Scope

  • Select among the next response, the oldest pending ACK deadline, and the graceful-close deadline while waiting for pre-rotation ACKs.
  • Keep the ACK deadline armed during bounded request/response transport drain.
  • Preserve response-first exact-tie handling while allowing only one ready response to defer an already-expired pending head.
  • Re-check the same head under lock before returning DeadlineExceeded.
  • Document that graceful rotation does not pause or extend server_lack_of_ack_timeout_ms.

Acceptance criteria

  • An expired pending batch followed by a zero-progress graceful-close signal fails with DeadlineExceeded.
  • A batch whose ACK deadline expires during transport drain also fails with DeadlineExceeded.
  • An ACK already ready at the deadline can complete the relevant pending head.
  • Multiple ready responses cannot repeatedly defer one expired head.
  • Existing graceful-rotation and H2 half-close tests remain green.

Non-goals

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working correctly

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions