From ff3385690b6d60bcc50e5569b41588bab7020d64 Mon Sep 17 00:00:00 2001 From: Emily Dixon Date: Mon, 5 Jun 2023 17:18:36 -0700 Subject: [PATCH 1/3] fix: Resumed uploads don't start again --- .../MuxUploadSDK/PublicAPI/MuxUpload.swift | 2 +- .../PublicAPI/UploadManager.swift | 1 + .../Upload/ChunkedFileUploader.swift | 31 ++++++++++++------- .../Upload/UploadPersistence.swift | 6 ++-- 4 files changed, 24 insertions(+), 16 deletions(-) diff --git a/Sources/MuxUploadSDK/PublicAPI/MuxUpload.swift b/Sources/MuxUploadSDK/PublicAPI/MuxUpload.swift index a4df3e3d..2c125186 100644 --- a/Sources/MuxUploadSDK/PublicAPI/MuxUpload.swift +++ b/Sources/MuxUploadSDK/PublicAPI/MuxUpload.swift @@ -173,7 +173,7 @@ public final class MuxUpload : Hashable, Equatable { MuxUploadSDK.logger?.warning("start() called but upload is already in progress") fileWorker?.addDelegate( withToken: id, - InternalUploaderDelegate { [weak self] state in self?.handleStateUpdate(state) } + InternalUploaderDelegate { [self] state in handleStateUpdate(state) } ) fileWorker?.start() return diff --git a/Sources/MuxUploadSDK/PublicAPI/UploadManager.swift b/Sources/MuxUploadSDK/PublicAPI/UploadManager.swift index 38a650f2..a3383d44 100644 --- a/Sources/MuxUploadSDK/PublicAPI/UploadManager.swift +++ b/Sources/MuxUploadSDK/PublicAPI/UploadManager.swift @@ -140,6 +140,7 @@ public final class UploadManager { let manager: UploadManager func chunkedFileUploader(_ uploader: ChunkedFileUploader, stateUpdated state: ChunkedFileUploader.InternalUploadState) { + NSLog("UploadManager: uploaded some") Task.detached { await manager.uploadActor.updateUpload(uploader.uploadInfo, withUpdate: state) manager.notifyDelegates() diff --git a/Sources/MuxUploadSDK/Upload/ChunkedFileUploader.swift b/Sources/MuxUploadSDK/Upload/ChunkedFileUploader.swift index 4e0b79fa..0d5267d0 100644 --- a/Sources/MuxUploadSDK/Upload/ChunkedFileUploader.swift +++ b/Sources/MuxUploadSDK/Upload/ChunkedFileUploader.swift @@ -22,7 +22,6 @@ class ChunkedFileUploader { private var currentWorkTask: Task<(), Never>? = nil private var _currentState: InternalUploadState = .ready private var overallProgress: Progress = Progress() - private var lastSeenUpdate: InternalUploadState? = nil private var lastReadCount: UInt64 = 0 private let reporter = Reporter() @@ -121,20 +120,28 @@ class ChunkedFileUploader { notifyStateFromWorker(.success(success)) } catch { file.close() - if let lastUpdate = lastSeenUpdate { - switch lastUpdate { - case .uploading(let update): do { - if lastReadCount > 0 { - lastReadCount = UInt64(update.progress.completedUnitCount) - } - } - default: break + if case let .uploading(update) = self.currentState { + //switch lastUpdate { + //case .uploading(let update): do { +// if lastReadCount > 0 { +// lastReadCount = UInt64(update.progress.completedUnitCount) +// } + //} + //default: break + //} + } + + if error is CancellationError { + MuxUploadSDK.logger?.debug("Task finished due to cancellation in state \(String(describing: self.currentState))") + if case let .uploading(update) = self.currentState { + self._currentState = .paused(update) } + } else { + MuxUploadSDK.logger?.debug("Task finished due to error in state \(String(describing: self.currentState))") + let uploadError = InternalUploaderError(reason: error, lastByte: lastReadCount) + notifyStateFromWorker(.failure(uploadError)) } - let uploadError = InternalUploaderError(reason: error, lastByte: lastReadCount) - notifyStateFromWorker(.failure(uploadError)) } - } currentWorkTask = task } diff --git a/Sources/MuxUploadSDK/Upload/UploadPersistence.swift b/Sources/MuxUploadSDK/Upload/UploadPersistence.swift index 71f5ed72..34a930fc 100644 --- a/Sources/MuxUploadSDK/Upload/UploadPersistence.swift +++ b/Sources/MuxUploadSDK/Upload/UploadPersistence.swift @@ -27,7 +27,7 @@ class UploadPersistence { try remove(entryAtAbsUrl: upload.uploadURL) } } catch { - MuxUploadSDK.logger?.critical("Swallowed error writing to UploadPersistence! Error below:\n\(error.localizedDescription)") + //MuxUploadSDK.logger?.critical("Swallowed error writing to UploadPersistence! Error below:\n\(error.localizedDescription)") } } @@ -81,7 +81,7 @@ class UploadPersistence { func maybeOpenCache() throws { if cache == nil { - MuxUploadSDK.logger?.info("Had to populate write-through cache") + //MuxUploadSDK.logger?.info("Had to populate write-through cache") try self.uploadsFile.maybeOpenCache() self.cache = try uploadsFile.readContents().asDictionary() @@ -207,7 +207,7 @@ fileprivate struct UploadsFileImpl : UploadsFile { func maybeOpenCache() throws { let dir = fileURL.deletingLastPathComponent() if !FileManager.default.fileExists(atPath: dir.path) { - MuxUploadSDK.logger?.info("Had to create temp dir") + //MuxUploadSDK.logger?.info("Had to create temp dir") try FileManager.default.createDirectory(atPath: dir.path, withIntermediateDirectories: true) } From a10e4abadd622f2906a2d3afcdffdfbf51e9df8a Mon Sep 17 00:00:00 2001 From: Emily Dixon Date: Mon, 5 Jun 2023 17:28:26 -0700 Subject: [PATCH 2/3] Cleanup --- Sources/MuxUploadSDK/Upload/ChunkedFileUploader.swift | 11 ----------- Sources/MuxUploadSDK/Upload/UploadPersistence.swift | 4 +--- 2 files changed, 1 insertion(+), 14 deletions(-) diff --git a/Sources/MuxUploadSDK/Upload/ChunkedFileUploader.swift b/Sources/MuxUploadSDK/Upload/ChunkedFileUploader.swift index 0d5267d0..48230a2f 100644 --- a/Sources/MuxUploadSDK/Upload/ChunkedFileUploader.swift +++ b/Sources/MuxUploadSDK/Upload/ChunkedFileUploader.swift @@ -120,17 +120,6 @@ class ChunkedFileUploader { notifyStateFromWorker(.success(success)) } catch { file.close() - if case let .uploading(update) = self.currentState { - //switch lastUpdate { - //case .uploading(let update): do { -// if lastReadCount > 0 { -// lastReadCount = UInt64(update.progress.completedUnitCount) -// } - //} - //default: break - //} - } - if error is CancellationError { MuxUploadSDK.logger?.debug("Task finished due to cancellation in state \(String(describing: self.currentState))") if case let .uploading(update) = self.currentState { diff --git a/Sources/MuxUploadSDK/Upload/UploadPersistence.swift b/Sources/MuxUploadSDK/Upload/UploadPersistence.swift index 34a930fc..8114a95a 100644 --- a/Sources/MuxUploadSDK/Upload/UploadPersistence.swift +++ b/Sources/MuxUploadSDK/Upload/UploadPersistence.swift @@ -27,6 +27,7 @@ class UploadPersistence { try remove(entryAtAbsUrl: upload.uploadURL) } } catch { + // This makes a lot of noise on the emulator, but might be worth logging if you're having issues around here //MuxUploadSDK.logger?.critical("Swallowed error writing to UploadPersistence! Error below:\n\(error.localizedDescription)") } } @@ -81,8 +82,6 @@ class UploadPersistence { func maybeOpenCache() throws { if cache == nil { - //MuxUploadSDK.logger?.info("Had to populate write-through cache") - try self.uploadsFile.maybeOpenCache() self.cache = try uploadsFile.readContents().asDictionary() try cleanUpOldEntries() // Obligatory @@ -207,7 +206,6 @@ fileprivate struct UploadsFileImpl : UploadsFile { func maybeOpenCache() throws { let dir = fileURL.deletingLastPathComponent() if !FileManager.default.fileExists(atPath: dir.path) { - //MuxUploadSDK.logger?.info("Had to create temp dir") try FileManager.default.createDirectory(atPath: dir.path, withIntermediateDirectories: true) } From 95005d7b5551296a916565758bf8b4083f23e7ee Mon Sep 17 00:00:00 2001 From: Emily Dixon Date: Mon, 5 Jun 2023 17:38:27 -0700 Subject: [PATCH 3/3] Cleanup --- Sources/MuxUploadSDK/PublicAPI/UploadManager.swift | 1 - 1 file changed, 1 deletion(-) diff --git a/Sources/MuxUploadSDK/PublicAPI/UploadManager.swift b/Sources/MuxUploadSDK/PublicAPI/UploadManager.swift index a3383d44..38a650f2 100644 --- a/Sources/MuxUploadSDK/PublicAPI/UploadManager.swift +++ b/Sources/MuxUploadSDK/PublicAPI/UploadManager.swift @@ -140,7 +140,6 @@ public final class UploadManager { let manager: UploadManager func chunkedFileUploader(_ uploader: ChunkedFileUploader, stateUpdated state: ChunkedFileUploader.InternalUploadState) { - NSLog("UploadManager: uploaded some") Task.detached { await manager.uploadActor.updateUpload(uploader.uploadInfo, withUpdate: state) manager.notifyDelegates()