fix non-canonical lock orderings

This commit is contained in:
Aiden McClelland
2021-12-27 17:41:53 -07:00
committed by Aiden McClelland
parent be98fdfeed
commit 36d5d40b4f
3 changed files with 17 additions and 3 deletions

View File

@@ -1,7 +1,7 @@
use std::collections::BTreeMap; use std::collections::BTreeMap;
use color_eyre::eyre::eyre; use color_eyre::eyre::eyre;
use patch_db::DbHandle; use patch_db::{DbHandle, LockType};
use rpc_toolkit::command; use rpc_toolkit::command;
use tracing::instrument; use tracing::instrument;
@@ -25,6 +25,10 @@ pub async fn start(
) -> Result<WithRevision<()>, Error> { ) -> Result<WithRevision<()>, Error> {
let mut db = ctx.db.handle(); let mut db = ctx.db.handle();
let mut tx = db.begin().await?; let mut tx = db.begin().await?;
crate::db::DatabaseModel::new()
.package_data()
.lock(&mut tx, LockType::Write)
.await?;
let installed = crate::db::DatabaseModel::new() let installed = crate::db::DatabaseModel::new()
.package_data() .package_data()
.idx_model(&id) .idx_model(&id)
@@ -37,6 +41,7 @@ pub async fn start(
format!("{} is not installed", id), format!("{} is not installed", id),
) )
})?; })?;
installed.lock(&mut tx, LockType::Read).await?;
let version = installed let version = installed
.clone() .clone()
.manifest() .manifest()

View File

@@ -6,7 +6,7 @@ use color_eyre::eyre::eyre;
use emver::VersionRange; use emver::VersionRange;
use futures::future::BoxFuture; use futures::future::BoxFuture;
use futures::FutureExt; use futures::FutureExt;
use patch_db::{DbHandle, HasModel, Map, MapModel, PatchDbHandle}; use patch_db::{DbHandle, HasModel, LockType, Map, MapModel, PatchDbHandle};
use rand::SeedableRng; use rand::SeedableRng;
use rpc_toolkit::command; use rpc_toolkit::command;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
@@ -535,6 +535,10 @@ pub async fn configure_logic(
db: &mut PatchDbHandle, db: &mut PatchDbHandle,
(pkg_id, dependency_id): (PackageId, PackageId), (pkg_id, dependency_id): (PackageId, PackageId),
) -> Result<ConfigDryRes, Error> { ) -> Result<ConfigDryRes, Error> {
crate::db::DatabaseModel::new()
.package_data()
.lock(db, LockType::Read)
.await?;
let pkg_model = crate::db::DatabaseModel::new() let pkg_model = crate::db::DatabaseModel::new()
.package_data() .package_data()
.idx_model(&pkg_id) .idx_model(&pkg_id)

View File

@@ -1,7 +1,7 @@
use std::collections::BTreeMap; use std::collections::BTreeMap;
use std::sync::atomic::{AtomicBool, Ordering}; use std::sync::atomic::{AtomicBool, Ordering};
use patch_db::DbHandle; use patch_db::{DbHandle, LockType};
use tracing::instrument; use tracing::instrument;
use crate::context::RpcContext; use crate::context::RpcContext;
@@ -64,6 +64,11 @@ pub async fn check<Db: DbHandle>(
let mut checkpoint = tx.begin().await?; 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() let mut status = crate::db::DatabaseModel::new()
.package_data() .package_data()
.idx_model(id) .idx_model(id)