Refine error retry handling.
This commit is contained in:
parent
debfabda42
commit
c846da367c
@ -51,8 +51,7 @@ class ConversationConfigurationSyncOperation: OWSOperation {
|
||||
}
|
||||
|
||||
private func reportAssertionError(description: String) {
|
||||
let error: NSError = ColorSyncOperationError.assertionError(description: description) as NSError
|
||||
error.isRetryable = false
|
||||
let error = ColorSyncOperationError.assertionError(description: description).asRetryableError
|
||||
self.reportError(error)
|
||||
}
|
||||
|
||||
|
||||
@ -259,9 +259,7 @@ public extension GroupsV2Impl {
|
||||
}.catch(on: .global()) { (error) in
|
||||
// tryToRestoreNextGroup() should never fail.
|
||||
owsFailDebug("Group restore failed: \(error)")
|
||||
let nsError: NSError = error as NSError
|
||||
nsError.isRetryable = false
|
||||
self.reportError(nsError)
|
||||
self.reportError(error.asUnretryableError)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -568,8 +568,7 @@ public extension OWSProfileManager {
|
||||
error: &requestError)
|
||||
if let error = requestError {
|
||||
owsFailDebug("Could not create request failed: \(error)")
|
||||
error.isRetryable = false
|
||||
throw error
|
||||
throw error.asUnretryableError
|
||||
}
|
||||
|
||||
let (promise, resolver) = Promise<Data>.pending()
|
||||
@ -583,9 +582,7 @@ public extension OWSProfileManager {
|
||||
completionHandler: { (_, completionUrl, error) in
|
||||
if let error = error {
|
||||
Logger.warn("Download failed: \(error)")
|
||||
let errorCopy = error as NSError
|
||||
errorCopy.isRetryable = error.isNetworkFailureOrTimeout
|
||||
return resolver.reject(errorCopy)
|
||||
return resolver.reject(error.withDefaultRetry)
|
||||
}
|
||||
guard completionUrl == tempFileURL else {
|
||||
return resolver.reject(OWSAssertionError("Unexpected file URL."))
|
||||
@ -594,11 +591,10 @@ public extension OWSProfileManager {
|
||||
do {
|
||||
let data = try Data(contentsOf: tempFileURL)
|
||||
resolver.fulfill(data)
|
||||
} catch let error as NSError {
|
||||
} catch {
|
||||
owsFailDebug("Could not load data failed: \(error)")
|
||||
// Fail immediately; do not retry.
|
||||
error.isRetryable = false
|
||||
return resolver.reject(error)
|
||||
return resolver.reject(error.asUnretryableError)
|
||||
}
|
||||
})
|
||||
task.resume()
|
||||
|
||||
@ -60,16 +60,14 @@ class LegacyContactDiscoveryOperation: ContactDiscovering {
|
||||
if IsNetworkConnectivityFailure(error) {
|
||||
responseResolver.reject(error)
|
||||
} else {
|
||||
let responseError: NSError = OWSErrorMakeUnableToProcessServerResponseError() as NSError
|
||||
responseError.isRetryable = true
|
||||
let responseError = OWSErrorMakeUnableToProcessServerResponseError().asRetryableError
|
||||
responseResolver.reject(responseError)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
guard response.statusCode != 413 else {
|
||||
let nsError = OWSErrorWithCodeDescription(OWSErrorCode.contactDiscoveryRateLimit, "Contacts Intersection Rate Limit") as NSError
|
||||
nsError.isRetryable = false
|
||||
let nsError = OWSErrorWithCodeDescription(OWSErrorCode.contactDiscoveryRateLimit, "Contacts Intersection Rate Limit").asUnretryableError
|
||||
responseResolver.reject(nsError)
|
||||
return
|
||||
}
|
||||
@ -80,17 +78,11 @@ class LegacyContactDiscoveryOperation: ContactDiscovering {
|
||||
|
||||
private func parse(response: Any?, phoneNumbersByHashes: [String: String]) throws -> Set<String> {
|
||||
guard let responseDict = response as? [String: AnyObject] else {
|
||||
let responseError: NSError = OWSErrorMakeUnableToProcessServerResponseError() as NSError
|
||||
responseError.isRetryable = true
|
||||
|
||||
throw responseError
|
||||
throw OWSErrorMakeUnableToProcessServerResponseError().asRetryableError
|
||||
}
|
||||
|
||||
guard let contactDicts = responseDict["contacts"] as? [[String: AnyObject]] else {
|
||||
let responseError: NSError = OWSErrorMakeUnableToProcessServerResponseError() as NSError
|
||||
responseError.isRetryable = true
|
||||
|
||||
throw responseError
|
||||
throw OWSErrorMakeUnableToProcessServerResponseError().asRetryableError
|
||||
}
|
||||
|
||||
var registeredRecipientIds: Set<String> = Set()
|
||||
|
||||
@ -58,8 +58,7 @@ open class CDNDownloadOperation: OWSOperation {
|
||||
error: &requestError)
|
||||
if let error = requestError {
|
||||
owsFailDebug("Could not create request failed: \(error)")
|
||||
error.isRetryable = false
|
||||
throw error
|
||||
throw error.asUnretryableError
|
||||
}
|
||||
request.setValue(OWSMimeTypeApplicationOctetStream, forHTTPHeaderField: "Content-Type")
|
||||
|
||||
@ -165,12 +164,10 @@ open class CDNDownloadOperation: OWSOperation {
|
||||
do {
|
||||
let data = try Data(contentsOf: tempFileURL)
|
||||
resolver.fulfill(data)
|
||||
} catch let error as NSError {
|
||||
} catch {
|
||||
owsFailDebug("Could not load data failed: \(error)")
|
||||
|
||||
// Fail immediately; do not retry.
|
||||
error.isRetryable = false
|
||||
return resolver.reject(error)
|
||||
return resolver.reject(error.asUnretryableError)
|
||||
}
|
||||
})
|
||||
self.task = task
|
||||
|
||||
@ -92,14 +92,13 @@ class DownloadStickerOperation: CDNDownloadOperation {
|
||||
self.success(plaintext)
|
||||
|
||||
self.reportSuccess()
|
||||
} catch let error as NSError {
|
||||
} catch {
|
||||
owsFailDebug("Decryption failed: \(error)")
|
||||
|
||||
self.markUrlPathAsCorrupt(urlPath)
|
||||
|
||||
// Fail immediately; do not retry.
|
||||
error.isRetryable = false
|
||||
return self.reportError(error)
|
||||
return self.reportError(error.asUnretryableError)
|
||||
}
|
||||
}.catch(on: DispatchQueue.global()) { [weak self] error in
|
||||
guard let self = self else {
|
||||
|
||||
@ -53,14 +53,13 @@ class DownloadStickerPackOperation: CDNDownloadOperation {
|
||||
|
||||
self.success(stickerPack)
|
||||
self.reportSuccess()
|
||||
} catch let error as NSError {
|
||||
} catch {
|
||||
owsFailDebug("Decryption failed: \(error)")
|
||||
|
||||
self.markUrlPathAsCorrupt(urlPath)
|
||||
|
||||
// Fail immediately; do not retry.
|
||||
error.isRetryable = false
|
||||
return self.reportError(error)
|
||||
return self.reportError(error.asUnretryableError)
|
||||
}
|
||||
}.catch(on: DispatchQueue.global()) { [weak self] error in
|
||||
guard let self = self else {
|
||||
|
||||
@ -496,9 +496,7 @@ public class ProfileFetcherJob: NSObject {
|
||||
// To avoid these conflicts we treat "partial"
|
||||
// profile fetches (where we download the profile
|
||||
// but not the associated avatar) as failures.
|
||||
let nsError = error as NSError
|
||||
nsError.isRetryable = false
|
||||
throw nsError
|
||||
throw error.asUnretryableError
|
||||
}
|
||||
} else {
|
||||
// This should be very rare. It might reflect:
|
||||
|
||||
Loading…
Reference in New Issue
Block a user