diff --git a/appmgr/src/install/cleanup.rs b/appmgr/src/install/cleanup.rs index c3e724cc2..7ba0694e9 100644 --- a/appmgr/src/install/cleanup.rs +++ b/appmgr/src/install/cleanup.rs @@ -9,7 +9,7 @@ use super::{PKG_ARCHIVE_DIR, PKG_DOCKER_DIR}; use crate::context::RpcContext; use crate::db::model::{CurrentDependencyInfo, InstalledPackageDataEntry, PackageDataEntry}; use crate::error::ErrorCollection; -use crate::s9pk::manifest::PackageId; +use crate::s9pk::manifest::{Manifest, PackageId}; use crate::util::{Apply, Version}; use crate::Error; @@ -21,51 +21,49 @@ pub async fn update_dependents<'a, Db: DbHandle, I: IntoIterator Result<(), Error> { for dep in deps { - let man = crate::db::DatabaseModel::new() + if let Some(man) = &*crate::db::DatabaseModel::new() .package_data() .idx_model(&dep) - .expect(db) - .await? - .installed() - .expect(db) - .await? - .manifest() + .and_then(|m| m.installed()) + .map::<_, Manifest>(|m| m.manifest()) .get(db, true) - .await?; - if let Err(e) = if let Some(info) = man.dependencies.0.get(id) { - info.satisfied(ctx, db, id, None, dep).await? - } else { - Ok(()) - } { - let mut errs = crate::db::DatabaseModel::new() - .package_data() - .idx_model(&dep) - .expect(db) - .await? - .installed() - .expect(db) - .await? - .status() - .dependency_errors() - .get_mut(db) - .await?; - errs.0.insert(id.clone(), e); - errs.save(db).await?; - } else { - let mut errs = crate::db::DatabaseModel::new() - .package_data() - .idx_model(&dep) - .expect(db) - .await? - .installed() - .expect(db) - .await? - .status() - .dependency_errors() - .get_mut(db) - .await?; - errs.0.remove(id); - errs.save(db).await?; + .await? + { + if let Err(e) = if let Some(info) = man.dependencies.0.get(id) { + info.satisfied(ctx, db, id, None, dep).await? + } else { + Ok(()) + } { + let mut errs = crate::db::DatabaseModel::new() + .package_data() + .idx_model(&dep) + .expect(db) + .await? + .installed() + .expect(db) + .await? + .status() + .dependency_errors() + .get_mut(db) + .await?; + errs.0.insert(id.clone(), e); + errs.save(db).await?; + } else { + let mut errs = crate::db::DatabaseModel::new() + .package_data() + .idx_model(&dep) + .expect(db) + .await? + .installed() + .expect(db) + .await? + .status() + .dependency_errors() + .get_mut(db) + .await?; + errs.0.remove(id); + errs.save(db).await?; + } } } Ok(()) diff --git a/appmgr/src/manager/mod.rs b/appmgr/src/manager/mod.rs index 3731de2d5..11f476b48 100644 --- a/appmgr/src/manager/mod.rs +++ b/appmgr/src/manager/mod.rs @@ -31,6 +31,8 @@ use crate::Error; pub mod health; mod sync; +pub const HEALTH_CHECK_COOLDOWN_SECONDS: u64 = 60; + #[derive(Default)] pub struct ManagerMap(RwLock>>); impl ManagerMap { @@ -263,7 +265,7 @@ async fn run_main( .store(true, Ordering::SeqCst); let health = async { loop { - tokio::time::sleep(Duration::from_secs(1)).await; + tokio::time::sleep(Duration::from_secs(HEALTH_CHECK_COOLDOWN_SECONDS)).await; let mut db = state.ctx.db.handle(); if let Err(e) = health::check( &state.ctx, @@ -371,6 +373,9 @@ impl Manager { #[instrument(skip(self))] async fn exit(&self) -> Result<(), Error> { + self.shared + .commit_health_check_results + .store(false, Ordering::SeqCst); let _ = self.shared.on_stop.send(OnStop::Exit); match self .shared