Signal-iOS/SignalServiceKit/Util/OWSOperation.swift
2024-03-27 12:22:52 -05:00

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
}
}