@@ -148,55 +148,47 @@ internal final class FilesOrchestrator: FilesOrchestratorType {
148148
149149 // MARK: - Reader
150150
151- /// Reader results paired with the byte sizes of any files dropped
152- /// (deleted for exceeding `maxFileAgeForRead`) during the scan. The
153- /// caller reports the drops *outside* the state lock.
154151 func oldestReadableFile( directory: borrowing Directory ,
155152 performance: borrowing StoragePerformancePreset ,
156- dateProvider: borrowing DateProvider ) throws -> ( file : ReadableFile ? , droppedBytes : [ Int ] )
153+ dateProvider: borrowing DateProvider ) throws -> ReadableFile ?
157154 {
158- let ( infos , droppedBytes ) = try fileInfos ( directory: directory,
159- performance: performance,
160- dateProvider: dateProvider)
161- guard let oldest = infos . first else { return ( nil , droppedBytes ) }
155+ guard let oldest = try fileInfos ( directory: directory,
156+ performance: performance,
157+ dateProvider: dateProvider) . first
158+ else { return nil }
162159 let age = dateProvider. currentDate ( ) . timeIntervalSince ( oldest. creationDate)
163- return ( age >= performance. minFileAgeForRead ? oldest. file : nil , droppedBytes )
160+ return age >= performance. minFileAgeForRead ? oldest. file : nil
164161 }
165162
166163 func allReadableFiles( directory: borrowing Directory ,
167164 performance: borrowing StoragePerformancePreset ,
168- dateProvider: borrowing DateProvider ) throws -> ( files : [ ReadableFile ] , droppedBytes : [ Int ] )
165+ dateProvider: borrowing DateProvider ) throws -> [ ReadableFile ]
169166 {
170- let ( infos, droppedBytes) = try fileInfos ( directory: directory,
171- performance: performance,
172- dateProvider: dateProvider)
173- return ( infos. map { $0. file } , droppedBytes)
167+ try fileInfos ( directory: directory,
168+ performance: performance,
169+ dateProvider: dateProvider) . map { $0. file }
174170 }
175171
176172 private func fileInfos( directory: borrowing Directory ,
177173 performance: borrowing StoragePerformancePreset ,
178- dateProvider: borrowing DateProvider ) throws -> ( files : [ FileInfo ] , droppedBytes : [ Int ] )
174+ dateProvider: borrowing DateProvider ) throws -> [ FileInfo ]
179175 {
180176 let allFiles = try directory. files ( )
181177 . filter { !activeWrites. contains ( $0. name) }
182178 . map { FileInfo ( file: $0) }
183179
184180 var readableFiles : [ FileInfo ] = [ ]
185181 readableFiles. reserveCapacity ( allFiles. count)
186- var droppedBytes : [ Int ] = [ ]
187182 for info in allFiles {
188183 let fileAge = dateProvider. currentDate ( ) . timeIntervalSince ( info. creationDate)
189184 if fileAge > performance. maxFileAgeForRead {
190- // Too old to ever upload — count it as a dropped payload.
191- let size = ( try ? info. file. size ( ) ) . map ( Int . init) ?? 0
192185 try info. file. delete ( )
193- droppedBytes. append ( size)
194186 } else {
195187 readableFiles. append ( info)
196188 }
197189 }
198190
199- return ( readableFiles. sorted ( ) , droppedBytes )
191+ return readableFiles. sorted ( )
200192 }
201193 }
202194
@@ -208,20 +200,14 @@ internal final class FilesOrchestrator: FilesOrchestratorType {
208200 private let directory : Directory
209201 private let dateProvider : DateProvider
210202 private let performance : StoragePerformancePreset
211- /// Invoked (outside the state lock) with the byte size of each file removed
212- /// without being uploaded — too old (`maxFileAgeForRead`) or purged to keep
213- /// the directory under `maxDirectorySize`. Wired to `endpoint_payload.dropped`.
214- private let onDrop : ( @Sendable ( Int ) -> Void ) ?
215203
216204 init ( directory: Directory ,
217205 performance: StoragePerformancePreset ,
218- dateProvider: DateProvider ,
219- onDrop: ( @Sendable ( Int ) -> Void ) ? = nil )
206+ dateProvider: DateProvider )
220207 {
221208 self . directory = directory
222209 self . dateProvider = dateProvider
223210 self . performance = performance
224- self . onDrop = onDrop
225211 self . state = Synced ( . init( ) )
226212 }
227213
@@ -259,30 +245,15 @@ internal final class FilesOrchestrator: FilesOrchestratorType {
259245 // MARK: - `ReadableFile` orchestration
260246
261247 func getReadableFile( ) throws -> ReadableFile ? {
262- let ( file, droppedBytes) = try state. use {
263- try $0. oldestReadableFile ( directory: directory,
264- performance: performance,
265- dateProvider: dateProvider)
266- }
267- reportDrops ( droppedBytes)
268- return file
248+ try state. use { try $0. oldestReadableFile ( directory: directory,
249+ performance: performance,
250+ dateProvider: dateProvider) }
269251 }
270252
271253 func getAllReadableFiles( ) throws -> [ ReadableFile ] {
272- let ( files, droppedBytes) = try state. use {
273- try $0. allReadableFiles ( directory: directory,
274- performance: performance,
275- dateProvider: dateProvider)
276- }
277- reportDrops ( droppedBytes)
278- return files
279- }
280-
281- /// Report dropped-payload sizes. Called outside the state lock so the
282- /// observer (which may touch its own locks) can't contend with file ops.
283- private func reportDrops( _ droppedBytes: [ Int ] ) {
284- guard let onDrop else { return }
285- droppedBytes. forEach ( onDrop)
254+ try state. use { try $0. allReadableFiles ( directory: directory,
255+ performance: performance,
256+ dateProvider: dateProvider) }
286257 }
287258
288259 func delete( readableFile: ReadableFile ) throws {
@@ -301,10 +272,7 @@ internal final class FilesOrchestrator: FilesOrchestratorType {
301272 . compactMap { ( info) -> FileInfo ? in
302273 let fileAge = dateProvider. currentDate ( ) . timeIntervalSince ( info. creationDate)
303274 if fileAge > performance. maxFileAgeForRead {
304- // Too old to ever upload — count it as a dropped payload.
305- let size = ( try ? info. file. size ( ) ) . map ( Int . init) ?? 0
306275 try info. file. delete ( )
307- onDrop ? ( size)
308276 return nil
309277 }
310278 return info
@@ -318,8 +286,6 @@ internal final class FilesOrchestrator: FilesOrchestratorType {
318286 let fileWithSize = filesWithSize. removeFirst ( )
319287 try fileWithSize. file. delete ( )
320288 sizeFreed += fileWithSize. size
321- // Purged to stay under the directory size limit — also a drop.
322- onDrop ? ( Int ( fileWithSize. size) )
323289 }
324290 }
325291 }
0 commit comments