New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Migrate to Async NIOFileIO APIs #3167
Conversation
Codecov ReportAttention: Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## main #3167 +/- ##
==========================================
- Coverage 76.86% 76.78% -0.09%
==========================================
Files 211 210 -1
Lines 8119 8132 +13
==========================================
+ Hits 6241 6244 +3
- Misses 1878 1888 +10
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nothing blocking
Sources/Vapor/Utilities/FileIO.swift
Outdated
/// - returns: `ByteBuffer` containing the file data. | ||
public func collectFile(at path: String) async throws -> ByteBuffer { | ||
guard | ||
let attributes = try? FileManager.default.attributesOfItem(atPath: path), |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
While IMO this should use NIOFileSystem
rather than FileManager
I get that it probably makes sense to wait for it to be more stable
* Add AsyncSequence-based file read method * Add `NIOFileSystem` dependency to standard manifest * Update test * Add long test file
* main: Patch configuration and log actual port on startup (vapor#3160) Update provider tests to 5.10 (vapor#3178) Migrate to Async NIOFileIO APIs (vapor#3167) Removed streamFile deprecation + deactivated advancedETagComparison by default (vapor#3177) Remove HeadResponder (vapor#3147) Advanced ETag Comparison now supported (vapor#3015) Enabled Request Decompression By Default (vapor#3175) HTTP2 Response Compression/Request Decompression (vapor#3126) Don't set ignore status for SIGTERM and SIGINT on Linux (vapor#3174) Fix typos across the codebase (vapor#3162) Fix some Sendable warnings on 5.10 (vapor#3158) Allow `HTTPServer`'s configuration to be dynamically updatable (vapor#3132) Fix issue when client disconnects midway through a stream (vapor#3102) Fix handling of "flag" URL query params (vapor#3151) Bump the dependencies group with 1 update (vapor#3148) Merge Async Tests (vapor#3141) Fix URI handling with multiple slashes and variable components. (vapor#3143) Fix broken URI behaviors (vapor#3140) # Conflicts: # Package.swift
These changes are now available in 4.94.0
This migrates
collectFile(at:)
andwriteFile(_:at:)
to use NIO's async NIOFileIO APIs introduced in https://github.com/apple/swift-nio/releases/tag/2.63.0Also adds a new API for streaming files using a
AsyncSequence
based on the newNIOFileSystem
.This work is required to move the
DotEnv
support over to an async API to avoid callingwait()
s in an async context which can cause issues