From 36d5d40b4fb89fdfdba12fb7dd18b8277899576e Mon Sep 17 00:00:00 2001 From: Aiden McClelland Date: Mon, 27 Dec 2021 17:41:53 -0700 Subject: [PATCH] fix non-canonical lock orderings --- appmgr/src/control.rs | 7 ++++++- appmgr/src/dependencies.rs | 6 +++++- appmgr/src/manager/health.rs | 7 ++++++- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/appmgr/src/control.rs b/appmgr/src/control.rs index b3868f1ae..6f31d9025 100644 --- a/appmgr/src/control.rs +++ b/appmgr/src/control.rs @@ -1,7 +1,7 @@ use std::collections::BTreeMap; use color_eyre::eyre::eyre; -use patch_db::DbHandle; +use patch_db::{DbHandle, LockType}; use rpc_toolkit::command; use tracing::instrument; @@ -25,6 +25,10 @@ pub async fn start( ) -> Result, Error> { let mut db = ctx.db.handle(); let mut tx = db.begin().await?; + crate::db::DatabaseModel::new() + .package_data() + .lock(&mut tx, LockType::Write) + .await?; let installed = crate::db::DatabaseModel::new() .package_data() .idx_model(&id) @@ -37,6 +41,7 @@ pub async fn start( format!("{} is not installed", id), ) })?; + installed.lock(&mut tx, LockType::Read).await?; let version = installed .clone() .manifest() diff --git a/appmgr/src/dependencies.rs b/appmgr/src/dependencies.rs index 0e340b70d..bc47af862 100644 --- a/appmgr/src/dependencies.rs +++ b/appmgr/src/dependencies.rs @@ -6,7 +6,7 @@ use color_eyre::eyre::eyre; use emver::VersionRange; use futures::future::BoxFuture; use futures::FutureExt; -use patch_db::{DbHandle, HasModel, Map, MapModel, PatchDbHandle}; +use patch_db::{DbHandle, HasModel, LockType, Map, MapModel, PatchDbHandle}; use rand::SeedableRng; use rpc_toolkit::command; use serde::{Deserialize, Serialize}; @@ -535,6 +535,10 @@ pub async fn configure_logic( db: &mut PatchDbHandle, (pkg_id, dependency_id): (PackageId, PackageId), ) -> Result { + crate::db::DatabaseModel::new() + .package_data() + .lock(db, LockType::Read) + .await?; let pkg_model = crate::db::DatabaseModel::new() .package_data() .idx_model(&pkg_id) diff --git a/appmgr/src/manager/health.rs b/appmgr/src/manager/health.rs index 965897e05..b8dad0fae 100644 --- a/appmgr/src/manager/health.rs +++ b/appmgr/src/manager/health.rs @@ -1,7 +1,7 @@ use std::collections::BTreeMap; use std::sync::atomic::{AtomicBool, Ordering}; -use patch_db::DbHandle; +use patch_db::{DbHandle, LockType}; use tracing::instrument; use crate::context::RpcContext; @@ -64,6 +64,11 @@ pub async fn check( let mut checkpoint = tx.begin().await?; + crate::db::DatabaseModel::new() + .package_data() + .lock(&mut checkpoint, LockType::Write) + .await?; + let mut status = crate::db::DatabaseModel::new() .package_data() .idx_model(id)