From 4b0ff07d7000c899e1f690e6948820c79aadee07 Mon Sep 17 00:00:00 2001 From: Aiden McClelland <3732071+dr-bonez@users.noreply.github.com> Date: Wed, 29 Jun 2022 09:03:10 -0600 Subject: [PATCH] Bugfix/backup lock order (#1583) * different fix * Revert "fix backup lock ordering (#1582)" This reverts commit f1e065a448afd7a68afa3d54aef6f4cf2ad5c1d0. --- backend/src/backup/backup_bulk.rs | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/backend/src/backup/backup_bulk.rs b/backend/src/backup/backup_bulk.rs index ce8b35083..76afe1ab9 100644 --- a/backend/src/backup/backup_bulk.rs +++ b/backend/src/backup/backup_bulk.rs @@ -159,6 +159,7 @@ pub async fn backup_all( } let revision = assure_backing_up(&mut db, &service_ids).await?; tokio::task::spawn(async move { + let backup_res = perform_backup(&ctx, &mut db, backup_guard).await; let backup_progress = crate::db::DatabaseModel::new() .server_info() .status_info() @@ -168,7 +169,6 @@ pub async fn backup_all( .lock(&mut db, LockType::Write) .await .expect("failed to lock server status"); - let backup_res = perform_backup(&ctx, &mut db, backup_guard).await; match backup_res { Ok(report) if report.iter().all(|(_, rep)| rep.error.is_none()) => ctx .notification_manager @@ -397,23 +397,22 @@ async fn perform_backup( ) .await?; - let mut backup_progress: BTreeMap<_, _> = (crate::db::DatabaseModel::new() + let mut backup_progress = crate::db::DatabaseModel::new() .server_info() .status_info() .backup_progress() - .get(&mut tx, true) - .await? - .into_owned()) - .unwrap_or_default(); - if let Some(mut backup_progress) = backup_progress.get_mut(&package_id) { + .get_mut(&mut tx) + .await?; + if backup_progress.is_none() { + *backup_progress = Some(Default::default()); + } + if let Some(mut backup_progress) = backup_progress + .as_mut() + .and_then(|bp| bp.get_mut(&package_id)) + { (*backup_progress).complete = true; } - crate::db::DatabaseModel::new() - .server_info() - .status_info() - .backup_progress() - .put(&mut tx, &backup_progress) - .await?; + backup_progress.save(&mut tx).await?; tx.save().await?; }