summaryrefslogtreecommitdiffhomepage
path: root/mullvad-daemon/src/device
diff options
context:
space:
mode:
authorDavid Lönnhager <david.l@mullvad.net>2023-09-17 16:42:18 +0200
committerDavid Lönnhager <david.l@mullvad.net>2023-09-19 14:07:32 +0200
commitc8b9da33986f9d64b4c4e84324d2bb92fffc52f3 (patch)
treedd63d827c8d57a880ceecf88419a202a4b3d9f56 /mullvad-daemon/src/device
parentae6a4a1d9fba88aa6b3a23f6fe1252bf474e99eb (diff)
downloadmullvadvpn-c8b9da33986f9d64b4c4e84324d2bb92fffc52f3.tar.xz
mullvadvpn-c8b9da33986f9d64b4c4e84324d2bb92fffc52f3.zip
Simplify immediate retry strategy
Diffstat (limited to 'mullvad-daemon/src/device')
-rw-r--r--mullvad-daemon/src/device/service.rs55
1 files changed, 22 insertions, 33 deletions
diff --git a/mullvad-daemon/src/device/service.rs b/mullvad-daemon/src/device/service.rs
index 74dc15b94f..9c967e4413 100644
--- a/mullvad-daemon/src/device/service.rs
+++ b/mullvad-daemon/src/device/service.rs
@@ -15,12 +15,10 @@ use mullvad_api::{
rest::{self, Error as RestError, MullvadRestHandle},
AccountsProxy, DevicesProxy,
};
-use talpid_core::future_retry::{
- constant_interval, retry_future, retry_future_n, ExponentialBackoff, Jittered,
-};
-const RETRY_ACTION_INTERVAL: Duration = Duration::ZERO;
-const RETRY_ACTION_MAX_RETRIES: usize = 2;
-
+use talpid_core::future_retry::{retry_future, ConstantInterval, ExponentialBackoff, Jittered};
+/// Retry strategy used for user-initiated actions that require immediate feedback
+const RETRY_ACTION_STRATEGY: ConstantInterval = ConstantInterval::new(Duration::ZERO, Some(3));
+/// Retry strategy used for background tasks
const RETRY_BACKOFF_STRATEGY: Jittered<ExponentialBackoff> = Jittered::jitter(
ExponentialBackoff::new(Duration::from_secs(4), 5)
.max_delay(Some(Duration::from_secs(24 * 60 * 60))),
@@ -52,11 +50,10 @@ impl DeviceService {
let api_handle = self.api_availability.clone();
let token_copy = account_token.clone();
async move {
- let (device, addresses) = retry_future_n(
+ let (device, addresses) = retry_future(
move || proxy.create(token_copy.clone(), pubkey.clone()),
move |result| should_retry(result, &api_handle),
- constant_interval(RETRY_ACTION_INTERVAL),
- RETRY_ACTION_MAX_RETRIES,
+ RETRY_ACTION_STRATEGY,
)
.await
.map_err(map_rest_error)?;
@@ -123,11 +120,10 @@ impl DeviceService {
) -> Result<(), Error> {
let proxy = self.proxy.clone();
let api_handle = self.api_availability.clone();
- retry_future_n(
+ retry_future(
move || proxy.remove(token.clone(), device.clone()),
move |result| should_retry(result, &api_handle),
- constant_interval(RETRY_ACTION_INTERVAL),
- RETRY_ACTION_MAX_RETRIES,
+ RETRY_ACTION_STRATEGY,
)
.await
.map_err(map_rest_error)?;
@@ -165,11 +161,10 @@ impl DeviceService {
let proxy = self.proxy.clone();
let api_handle = self.api_availability.clone();
let pubkey = private_key.public_key();
- let addresses = retry_future_n(
+ let addresses = retry_future(
move || proxy.replace_wg_key(token.clone(), device.clone(), pubkey.clone()),
move |result| should_retry(result, &api_handle),
- constant_interval(RETRY_ACTION_INTERVAL),
- RETRY_ACTION_MAX_RETRIES,
+ RETRY_ACTION_STRATEGY,
)
.await
.map_err(map_rest_error)?;
@@ -218,11 +213,10 @@ impl DeviceService {
pub async fn list_devices(&self, token: AccountToken) -> Result<Vec<Device>, Error> {
let proxy = self.proxy.clone();
let api_handle = self.api_availability.clone();
- retry_future_n(
+ retry_future(
move || proxy.list(token.clone()),
move |result| should_retry(result, &api_handle),
- constant_interval(RETRY_ACTION_INTERVAL),
- RETRY_ACTION_MAX_RETRIES,
+ RETRY_ACTION_STRATEGY,
)
.await
.map_err(map_rest_error)
@@ -247,11 +241,10 @@ impl DeviceService {
pub async fn get(&self, token: AccountToken, device: DeviceId) -> Result<Device, Error> {
let proxy = self.proxy.clone();
let api_handle = self.api_availability.clone();
- retry_future_n(
+ retry_future(
move || proxy.get(token.clone(), device.clone()),
move |result| should_retry(result, &api_handle),
- constant_interval(RETRY_ACTION_INTERVAL),
- RETRY_ACTION_MAX_RETRIES,
+ RETRY_ACTION_STRATEGY,
)
.await
.map_err(map_rest_error)
@@ -269,11 +262,10 @@ impl AccountService {
pub fn create_account(&self) -> impl Future<Output = Result<AccountToken, rest::Error>> {
let mut proxy = self.proxy.clone();
let api_handle = self.api_availability.clone();
- retry_future_n(
+ retry_future(
move || proxy.create_account(),
move |result| should_retry(result, &api_handle),
- constant_interval(RETRY_ACTION_INTERVAL),
- RETRY_ACTION_MAX_RETRIES,
+ RETRY_ACTION_STRATEGY,
)
}
@@ -283,22 +275,20 @@ impl AccountService {
) -> impl Future<Output = Result<String, rest::Error>> {
let proxy = self.proxy.clone();
let api_handle = self.api_availability.clone();
- retry_future_n(
+ retry_future(
move || proxy.get_www_auth_token(account.clone()),
move |result| should_retry(result, &api_handle),
- constant_interval(RETRY_ACTION_INTERVAL),
- RETRY_ACTION_MAX_RETRIES,
+ RETRY_ACTION_STRATEGY,
)
}
pub async fn check_expiry(&self, token: AccountToken) -> Result<DateTime<Utc>, rest::Error> {
let proxy = self.proxy.clone();
let api_handle = self.api_availability.clone();
- let result = retry_future_n(
+ let result = retry_future(
move || proxy.get_expiry(token.clone()),
move |result| should_retry(result, &api_handle),
- constant_interval(RETRY_ACTION_INTERVAL),
- RETRY_ACTION_MAX_RETRIES,
+ RETRY_ACTION_STRATEGY,
)
.await;
if handle_expiry_result_inner(&result, &self.api_availability) {
@@ -318,11 +308,10 @@ impl AccountService {
) -> Result<VoucherSubmission, Error> {
let mut proxy = self.proxy.clone();
let api_handle = self.api_availability.clone();
- let result = retry_future_n(
+ let result = retry_future(
move || proxy.submit_voucher(account_token.clone(), voucher.clone()),
move |result| should_retry(result, &api_handle),
- constant_interval(RETRY_ACTION_INTERVAL),
- RETRY_ACTION_MAX_RETRIES,
+ RETRY_ACTION_STRATEGY,
)
.await;
if result.is_ok() {