mirror of
https://github.com/Start9Labs/start-os.git
synced 2026-03-31 04:23:40 +00:00
more aggressive locks on health check daemon
This commit is contained in:
@@ -5,7 +5,7 @@ use anyhow::anyhow;
|
|||||||
use chrono::{DateTime, Utc};
|
use chrono::{DateTime, Utc};
|
||||||
use futures::StreamExt;
|
use futures::StreamExt;
|
||||||
use indexmap::IndexMap;
|
use indexmap::IndexMap;
|
||||||
use patch_db::{DbHandle, HasModel, Map, MapModel, ModelData};
|
use patch_db::{DbHandle, HasModel, LockType, Map, MapModel, ModelData};
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
use self::health_check::{HealthCheckId, HealthCheckResult};
|
use self::health_check::{HealthCheckId, HealthCheckResult};
|
||||||
@@ -23,24 +23,25 @@ pub mod health_check;
|
|||||||
pub async fn synchronize_all(ctx: &RpcContext) -> Result<(), Error> {
|
pub async fn synchronize_all(ctx: &RpcContext) -> Result<(), Error> {
|
||||||
let mut pkg_ids = crate::db::DatabaseModel::new()
|
let mut pkg_ids = crate::db::DatabaseModel::new()
|
||||||
.package_data()
|
.package_data()
|
||||||
.keys(&mut ctx.db.handle(), true)
|
.keys(&mut ctx.db.handle(), false)
|
||||||
.await?;
|
.await?;
|
||||||
for id in pkg_ids {
|
for id in pkg_ids {
|
||||||
async fn status(ctx: &RpcContext, id: PackageId) -> Result<(), Error> {
|
async fn status(ctx: &RpcContext, id: PackageId) -> Result<(), Error> {
|
||||||
let mut db = ctx.db.handle();
|
let mut db = ctx.db.handle();
|
||||||
let pkg_data = crate::db::DatabaseModel::new()
|
let model = crate::db::DatabaseModel::new()
|
||||||
.package_data()
|
.package_data()
|
||||||
.idx_model(&id)
|
.idx_model(id)
|
||||||
.check(&mut db)
|
.check(&mut db)
|
||||||
.await?
|
.await?
|
||||||
.ok_or_else(|| {
|
.ok_or_else(|| {
|
||||||
Error::new(
|
Error::new(
|
||||||
anyhow!("VersionedPackageData does not exist"),
|
anyhow!("PackageDataEntry does not exist"),
|
||||||
crate::ErrorKind::Database,
|
crate::ErrorKind::Database,
|
||||||
)
|
)
|
||||||
})?;
|
})?;
|
||||||
|
model.lock(&mut db, LockType::Write).await;
|
||||||
let (mut status, manager) =
|
let (mut status, manager) =
|
||||||
if let Some(installed) = pkg_data.installed().check(&mut db).await? {
|
if let Some(installed) = model.installed().check(&mut db).await? {
|
||||||
(
|
(
|
||||||
installed.clone().status().get_mut(&mut db).await?,
|
installed.clone().status().get_mut(&mut db).await?,
|
||||||
ctx.managers
|
ctx.managers
|
||||||
@@ -80,7 +81,7 @@ pub async fn check_all(ctx: &RpcContext) -> Result<(), Error> {
|
|||||||
let mut db = ctx.db.handle();
|
let mut db = ctx.db.handle();
|
||||||
let pkg_ids = crate::db::DatabaseModel::new()
|
let pkg_ids = crate::db::DatabaseModel::new()
|
||||||
.package_data()
|
.package_data()
|
||||||
.keys(&mut db, true)
|
.keys(&mut db, false)
|
||||||
.await?;
|
.await?;
|
||||||
let mut status_manifest = Vec::with_capacity(pkg_ids.len());
|
let mut status_manifest = Vec::with_capacity(pkg_ids.len());
|
||||||
let mut status_deps = Vec::with_capacity(pkg_ids.len());
|
let mut status_deps = Vec::with_capacity(pkg_ids.len());
|
||||||
@@ -96,6 +97,7 @@ pub async fn check_all(ctx: &RpcContext) -> Result<(), Error> {
|
|||||||
crate::ErrorKind::Database,
|
crate::ErrorKind::Database,
|
||||||
)
|
)
|
||||||
})?;
|
})?;
|
||||||
|
model.lock(&mut db, LockType::Write).await;
|
||||||
if let Some(installed) = model.installed().check(&mut db).await? {
|
if let Some(installed) = model.installed().check(&mut db).await? {
|
||||||
status_manifest.push((
|
status_manifest.push((
|
||||||
installed.clone().status(),
|
installed.clone().status(),
|
||||||
|
|||||||
Reference in New Issue
Block a user