Skip to content

Refactor request body streaming state handling

Compare
Choose a tag to compare
@tanner0101 tanner0101 released this 27 May 19:37
77b84cf
This patch was authored and released by @tanner0101.
  • Implements new state machine for handling streaming request bodies (#2357).

This new state machine ensures that calls to req.body.drain will only ever happen after the previously returned future has completed. This makes it easier to correctly implement streaming file writes. Addresses https://forums.swift.org/t/how-to-use-nonblockingfileio-for-repeated-writes/36206.

  • Request bodies are now automatically drained after sending a response (#2357, fixes #2356).

This change ensures that streaming requests will be read completely even if a route ignores their body.

  • Adds a streaming file upload example to the Development executable (#2357).

  • Improves BodyStreamResult's normal and debug descriptions (#2357).

  • Fixed a reference cycle if Request was captured strongly within the body.drain closure (#2357).