diff options
| author | David Lönnhager <david.l@mullvad.net> | 2023-09-17 16:42:18 +0200 |
|---|---|---|
| committer | David Lönnhager <david.l@mullvad.net> | 2023-09-19 14:07:32 +0200 |
| commit | c8b9da33986f9d64b4c4e84324d2bb92fffc52f3 (patch) | |
| tree | dd63d827c8d57a880ceecf88419a202a4b3d9f56 /mullvad-daemon/src/device | |
| parent | ae6a4a1d9fba88aa6b3a23f6fe1252bf474e99eb (diff) | |
| download | mullvadvpn-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.rs | 55 |
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() { |
