From bad1b4d9fc597e420f2cc39ae531ac36c4e1cd96 Mon Sep 17 00:00:00 2001 From: weiqiushi Date: Thu, 13 Apr 2023 18:57:22 +0800 Subject: [PATCH 1/3] Avoid panic when retrying install operation --- src/service/app-manager/src/app_manager_ex.rs | 24 +++++++++++-------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/src/service/app-manager/src/app_manager_ex.rs b/src/service/app-manager/src/app_manager_ex.rs index d99fb2f3..ef31372c 100644 --- a/src/service/app-manager/src/app_manager_ex.rs +++ b/src/service/app-manager/src/app_manager_ex.rs @@ -366,17 +366,21 @@ impl AppManager { AppLocalStatusCode::Installing => { info!("find app {} status {} on startup, try install again", app_id, status_code); let version = status_a.lock().unwrap().version().map(|s|s.to_owned()); - match self.cmd_executor.as_ref().unwrap().execute_install( - status_a.clone(), - &AppCmd::install(self.owner.clone(), app_id.clone(), &version.unwrap(), true), - 0).await { - Ok(_) => { - None - } - Err(e) => { - error!("install app {} on startup err {}", app_id, e); - Some(AppLocalStatusCode::InstallFailed) + if let Some(version) = version { + match self.cmd_executor.as_ref().unwrap().execute_install( + status_a.clone(), + &AppCmd::install(self.owner.clone(), app_id.clone(), &version.unwrap(), true), + 0).await { + Ok(_) => { + None + } + Err(e) => { + error!("install app {} on startup err {}", app_id, e); + Some(AppLocalStatusCode::InstallFailed) + } } + } else { + Some(AppLocalStatusCode::InstallFailed) } }, AppLocalStatusCode::Uninstalling => { From c8de656853fba3576da9c6f754c6cb9392702104 Mon Sep 17 00:00:00 2001 From: weiqiushi Date: Thu, 13 Apr 2023 18:57:45 +0800 Subject: [PATCH 2/3] Fix compile error --- src/service/app-manager/src/app_manager_ex.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/service/app-manager/src/app_manager_ex.rs b/src/service/app-manager/src/app_manager_ex.rs index ef31372c..7d47d4cb 100644 --- a/src/service/app-manager/src/app_manager_ex.rs +++ b/src/service/app-manager/src/app_manager_ex.rs @@ -369,7 +369,7 @@ impl AppManager { if let Some(version) = version { match self.cmd_executor.as_ref().unwrap().execute_install( status_a.clone(), - &AppCmd::install(self.owner.clone(), app_id.clone(), &version.unwrap(), true), + &AppCmd::install(self.owner.clone(), app_id.clone(), &version, true), 0).await { Ok(_) => { None From 314d358d1bfbd52cdcd66c7775fe2d44b2903577 Mon Sep 17 00:00:00 2001 From: weiqiushi Date: Thu, 13 Apr 2023 19:48:03 +0800 Subject: [PATCH 3/3] Issue #170: set version to status when appmanager recv install command from user, Compatibility with previous incorrect state settings when uninstall App --- src/service/app-manager/src/app_cmd_executor.rs | 3 ++- src/service/app-manager/src/app_manager_ex.rs | 3 +++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/service/app-manager/src/app_cmd_executor.rs b/src/service/app-manager/src/app_cmd_executor.rs index 8a366225..9f242bd3 100644 --- a/src/service/app-manager/src/app_cmd_executor.rs +++ b/src/service/app-manager/src/app_cmd_executor.rs @@ -307,6 +307,7 @@ impl AppCmdExecutor { error!("{}", err); return Err(BuckyError::from((BuckyErrorCode::InvalidParam, err))); } + status.lock().unwrap().set_version(&ver); self.pre_change_status( @@ -437,7 +438,7 @@ impl AppCmdExecutor { { let status = status.lock().unwrap(); web_id = status.web_dir().cloned(); - ver = status.version().unwrap().to_owned(); + ver = status.version().unwrap_or("noversion").to_owned(); } let mut target_status_code = AppLocalStatusCode::Uninstalled; diff --git a/src/service/app-manager/src/app_manager_ex.rs b/src/service/app-manager/src/app_manager_ex.rs index 7d47d4cb..27957ce8 100644 --- a/src/service/app-manager/src/app_manager_ex.rs +++ b/src/service/app-manager/src/app_manager_ex.rs @@ -847,6 +847,9 @@ impl AppManager { cmd_code, status_code, next_status_code, app_id, cmd_group_code ); status.set_status(next_status_code); + if let CmdCode::Install(install) = cmd_code { + status.set_version(&install.ver); + } status_clone = status.clone(); }