aboutsummaryrefslogtreecommitdiff
path: root/src/bin/activate.rs
diff options
context:
space:
mode:
authorRoman Melnikov2023-12-08 14:26:33 +0100
committerRoman Melnikov2023-12-11 14:42:55 +0100
commitb076e35c4ac157110b894032fe3155172668cdd8 (patch)
treead52061fd1ba11a2165df409c039cb9c3175d835 /src/bin/activate.rs
parent660180bbbeae7d60dad5a92b30858306945fd427 (diff)
[#245] Return non-zero exit code in case of confirmation timeout
Problem: When profile activation confirmation fails due to confirmation timeout and performs a rollback, zero exit code is returned. Such a behavior is confusing since rollback usually means something went wrong during deployment and it shouldn't return successful exit code. Solution: Explicitly return confirmation waiting error instead of printing it and silently signalizing success.
Diffstat (limited to '')
-rw-r--r--src/bin/activate.rs32
1 files changed, 9 insertions, 23 deletions
diff --git a/src/bin/activate.rs b/src/bin/activate.rs
index 4017510..9cff9fa 100644
--- a/src/bin/activate.rs
+++ b/src/bin/activate.rs
@@ -229,6 +229,8 @@ pub enum ActivationConfirmationError {
CreateConfirmFile(std::io::Error),
#[error("Could not watch for activation sentinel: {0}")]
Watcher(#[from] notify::Error),
+ #[error("Error waiting for confirmation event: {0}")]
+ WaitingError(#[from] DangerZoneError),
}
#[derive(Error, Debug)]
@@ -256,7 +258,6 @@ async fn danger_zone(
}
pub async fn activation_confirmation(
- profile_path: String,
temp_path: PathBuf,
confirm_timeout: u16,
closure: String,
@@ -302,18 +303,9 @@ pub async fn activation_confirmation(
watcher.watch(&lock_path, RecursiveMode::NonRecursive)?;
- if let Err(err) = danger_zone(done, confirm_timeout).await {
- error!("Error waiting for confirmation event: {}", err);
-
- if let Err(err) = deactivate(&profile_path).await {
- error!(
- "Error de-activating due to another error waiting for confirmation, oh no...: {}",
- err
- );
- }
- }
-
- Ok(())
+ danger_zone(done, confirm_timeout)
+ .await
+ .map_err(|err| ActivationConfirmationError::WaitingError(err))
}
#[derive(Error, Debug)]
@@ -463,16 +455,10 @@ pub async fn activate(
if magic_rollback && !boot {
info!("Magic rollback is enabled, setting up confirmation hook...");
-
- match activation_confirmation(profile_path.clone(), temp_path, confirm_timeout, closure)
- .await
- {
- Ok(()) => {}
- Err(err) => {
- deactivate(&profile_path).await?;
- return Err(ActivateError::ActivationConfirmation(err));
- }
- };
+ if let Err(err) = activation_confirmation(temp_path, confirm_timeout, closure).await {
+ deactivate(&profile_path).await?;
+ return Err(ActivateError::ActivationConfirmation(err));
+ }
}
}