33 lines
873 B
Swift
33 lines
873 B
Swift
//
|
|
// Copyright 2020 Signal Messenger, LLC
|
|
// SPDX-License-Identifier: AGPL-3.0-only
|
|
//
|
|
|
|
import Foundation
|
|
|
|
@objc
|
|
public extension OWSOperation {
|
|
static func retryIntervalForExponentialBackoff(
|
|
failureCount: UInt,
|
|
maxBackoff: TimeInterval = 15 * kMinuteInterval
|
|
) -> TimeInterval {
|
|
// Arbitrary backoff factor...
|
|
// With backOffFactor of 1.9 and maxBackoff of 15m
|
|
// retry 1 delay: 0.10s
|
|
// retry 2 delay: 0.19s
|
|
// ...
|
|
// retry 5 delay: 1.30s
|
|
// ...
|
|
// retry 11 delay: 61.31s
|
|
// ...
|
|
// retry 15 delay: 15 minutes
|
|
// retry 16 delay: 15 minutes
|
|
//
|
|
// 110 retries will yield ~24 hours of retry.
|
|
let backoffFactor = 1.9
|
|
|
|
let seconds = min(maxBackoff, 0.1 * pow(backoffFactor, Double(failureCount)))
|
|
return seconds
|
|
}
|
|
}
|