diff --git a/appmgr/Cargo.lock b/appmgr/Cargo.lock index 0493a33dd..e0b47b964 100644 --- a/appmgr/Cargo.lock +++ b/appmgr/Cargo.lock @@ -236,6 +236,15 @@ version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" +[[package]] +name = "bitmaps" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "031043d04099746d8db04daf1fa424b2bc8bd69d92b25962dcde24da39ab64a2" +dependencies = [ + "typenum", +] + [[package]] name = "bitvec" version = "0.19.5" @@ -1437,6 +1446,20 @@ dependencies = [ "unicode-normalization", ] +[[package]] +name = "imbl" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "543682c9082b25e63d03b5acbd65ad111fd49dd93e70843e5175db4ff81d606b" +dependencies = [ + "bitmaps", + "rand_core 0.6.3", + "rand_xoshiro", + "sized-chunks", + "typenum", + "version_check", +] + [[package]] name = "indenter" version = "0.3.3" @@ -2076,6 +2099,7 @@ dependencies = [ "async-trait", "fd-lock-rs", "futures", + "imbl", "json-patch", "json-ptr", "lazy_static", @@ -2468,6 +2492,15 @@ dependencies = [ "rand_core 0.6.3", ] +[[package]] +name = "rand_xoshiro" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f97cdb2a36ed4183de61b2f824cc45c9f1037f28afe0a322e9fff4c108b5aaa" +dependencies = [ + "rand_core 0.6.3", +] + [[package]] name = "redox_syscall" version = "0.1.57" @@ -3012,6 +3045,16 @@ version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "533494a8f9b724d33625ab53c6c4800f7cc445895924a8ef649222dcb76e938b" +[[package]] +name = "sized-chunks" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16d69225bde7a69b235da73377861095455d298f2b970996eec25ddbb42b3d1e" +dependencies = [ + "bitmaps", + "typenum", +] + [[package]] name = "slab" version = "0.4.4" diff --git a/appmgr/src/backup/backup_bulk.rs b/appmgr/src/backup/backup_bulk.rs index c8a80cd5b..11b9a5ff0 100644 --- a/appmgr/src/backup/backup_bulk.rs +++ b/appmgr/src/backup/backup_bulk.rs @@ -310,7 +310,7 @@ async fn perform_backup( .synchronize() .await; - installed_model.lock(&mut db, LockType::Write).await; + installed_model.lock(&mut db, LockType::Write).await?; let guard = backup_guard.mount_package_backup(&package_id).await?; let res = manifest diff --git a/appmgr/src/config/mod.rs b/appmgr/src/config/mod.rs index c9ea582c0..15952cad4 100644 --- a/appmgr/src/config/mod.rs +++ b/appmgr/src/config/mod.rs @@ -304,7 +304,7 @@ pub fn configure_rec<'a, Db: DbHandle>( crate::db::DatabaseModel::new() .package_data() .lock(db, LockType::Write) - .await; + .await?; // fetch data from db let pkg_model = crate::db::DatabaseModel::new() .package_data() diff --git a/appmgr/src/install/mod.rs b/appmgr/src/install/mod.rs index 8a8756bc5..9fe80b91c 100644 --- a/appmgr/src/install/mod.rs +++ b/appmgr/src/install/mod.rs @@ -820,7 +820,7 @@ pub async fn install_s9pk( crate::db::DatabaseModel::new() .package_data() .lock(&mut tx, LockType::Write) - .await; + .await?; tracing::info!("Install {}@{}: Creating volumes", pkg_id, version); manifest.volumes.install(ctx, pkg_id, version).await?; diff --git a/appmgr/src/install/update.rs b/appmgr/src/install/update.rs index 9183926d2..a99418bce 100644 --- a/appmgr/src/install/update.rs +++ b/appmgr/src/install/update.rs @@ -26,8 +26,8 @@ pub async fn dry( let mut breakages = BTreeMap::new(); crate::db::DatabaseModel::new() .package_data() - .lock(&mut tx, LockType::DeepRead) - .await; + .lock(&mut tx, LockType::Read) + .await?; for dependent in crate::db::DatabaseModel::new() .package_data() .idx_model(&id) diff --git a/appmgr/src/notifications.rs b/appmgr/src/notifications.rs index 748b1b0f1..07a633259 100644 --- a/appmgr/src/notifications.rs +++ b/appmgr/src/notifications.rs @@ -37,7 +37,7 @@ pub async fn list( let model = crate::db::DatabaseModel::new() .server_info() .unread_notification_count(); - model.lock(&mut handle, LockType::Write).await; + model.lock(&mut handle, LockType::Write).await?; let records = sqlx::query!( "SELECT id, package_id, created_at, code, level, title, message, data FROM notifications ORDER BY id DESC LIMIT ?", limit diff --git a/appmgr/src/shutdown.rs b/appmgr/src/shutdown.rs index 87348e4eb..3ac9ae29e 100644 --- a/appmgr/src/shutdown.rs +++ b/appmgr/src/shutdown.rs @@ -78,7 +78,7 @@ pub async fn shutdown(#[context] ctx: RpcContext) -> Result<(), Error> { let mut db = ctx.db.handle(); crate::db::DatabaseModel::new() .lock(&mut db, LockType::Write) - .await; + .await?; ctx.shutdown .send(Some(Shutdown { datadir: ctx.datadir.clone(), @@ -96,7 +96,7 @@ pub async fn restart(#[context] ctx: RpcContext) -> Result<(), Error> { let mut db = ctx.db.handle(); crate::db::DatabaseModel::new() .lock(&mut db, LockType::Write) - .await; + .await?; ctx.shutdown .send(Some(Shutdown { datadir: ctx.datadir.clone(), diff --git a/appmgr/src/version/mod.rs b/appmgr/src/version/mod.rs index f2fab7272..84923b296 100644 --- a/appmgr/src/version/mod.rs +++ b/appmgr/src/version/mod.rs @@ -107,7 +107,7 @@ pub async fn init(db: &mut Db) -> Result<(), Error> { let ptr: JsonPointer = "/server-info/version" .parse() .with_kind(crate::ErrorKind::Database)?; - db.lock(ptr.clone(), LockType::Write).await; + db.lock(ptr.clone(), LockType::Write).await?; let version: Version = db.get(&ptr).await?; match version { Version::V0_3_0(v) => v.0.migrate_to(&Current::new(), db).await?, diff --git a/patch-db b/patch-db index 87fbca556..0aab0a3c5 160000 --- a/patch-db +++ b/patch-db @@ -1 +1 @@ -Subproject commit 87fbca556c4097cb1cc455b1a07e9b7238378aef +Subproject commit 0aab0a3c5e6c02dfd696160ae4b2d6adf590e188