Summary
RequestBodyControl::wait_for_eof() currently treats disappearance of the request-body EOF sender as an indefinitely pending state. The surrounding rotation drain eventually reaches its overall deadline, which hides the actual request-body failure and consumes the remaining drain budget.
Report request-body loss explicitly when the body disappears before reaching EOF.
Scope
- Change
wait_for_eof() to distinguish clean EOF from loss of its signaling sender.
- Return and propagate an explicit error when the request body disappears before EOF.
- Surface the error through Arrow rotation and teardown without waiting for the overall drain deadline.
- Preserve stable precedence for a real peer or protocol error already observed during the same teardown.
- Keep the existing bounded drain behavior; this issue does not extend or configure the post-EOF drain duration.
- Update
rust/NEXT_CHANGELOG.md for the observable error-model improvement.
Acceptance criteria
- Clean request EOF still completes successfully.
- Dropping the request-body producer before EOF returns an explicit error promptly.
- The dropped-body path does not remain pending until the rotation drain deadline.
- Deterministic tests cover both clean EOF and sender disappearance.
- Existing post-EOF ACK, peer-error, and drain-timeout tests continue to pass.
Relationship to other work
Summary
RequestBodyControl::wait_for_eof()currently treats disappearance of the request-body EOF sender as an indefinitely pending state. The surrounding rotation drain eventually reaches its overall deadline, which hides the actual request-body failure and consumes the remaining drain budget.Report request-body loss explicitly when the body disappears before reaching EOF.
Scope
wait_for_eof()to distinguish clean EOF from loss of its signaling sender.rust/NEXT_CHANGELOG.mdfor the observable error-model improvement.Acceptance criteria
Relationship to other work