From 3eed03b34e3bd040bf97c2538ef16fe4e99904b4 Mon Sep 17 00:00:00 2001 From: liyaxing Date: Mon, 15 May 2023 19:26:14 +0800 Subject: [PATCH 1/2] Improve the steps of uni restore task --- .../src/backup/restore_status.rs | 2 +- .../src/backup/uni_restore_task.rs | 21 ++++++++++++------- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/src/component/cyfs-backup-lib/src/backup/restore_status.rs b/src/component/cyfs-backup-lib/src/backup/restore_status.rs index c89e5745..ea2f3d5a 100644 --- a/src/component/cyfs-backup-lib/src/backup/restore_status.rs +++ b/src/component/cyfs-backup-lib/src/backup/restore_status.rs @@ -9,9 +9,9 @@ use serde::{Deserialize, Serialize}; pub enum RestoreTaskPhase { Init, LoadAndVerify, - RestoreKeyData, RestoreObject, RestoreChunk, + RestoreKeyData, Complete, } diff --git a/src/component/cyfs-backup/src/backup/uni_restore_task.rs b/src/component/cyfs-backup/src/backup/uni_restore_task.rs index a367a4e1..f1269caf 100644 --- a/src/component/cyfs-backup/src/backup/uni_restore_task.rs +++ b/src/component/cyfs-backup/src/backup/uni_restore_task.rs @@ -85,18 +85,12 @@ impl UniRestoreTask { let filter = UniRestoreDataFilter::new(); + // Should ignore chunks of key-data if meta.key_data.len() > 0 { filter.append_key_data_chunks(&meta.key_data); - - let key_data_restore = KeyDataRestoreManager::new( - meta.key_data.clone(), - loader.clone(), - restorer.clone(), - self.status_manager.clone(), - ); - key_data_restore.run().await?; } + // First store objects and chunks let chunk_fixer = ChunkTrackerFixer::new(¶ms.isolate)?; let uni_restore = UniRestoreManager::new( @@ -109,6 +103,17 @@ impl UniRestoreTask { ); uni_restore.run().await?; + // At last restore key-data, which includes {cyfs}/etc/desc + if meta.key_data.len() > 0 { + let key_data_restore = KeyDataRestoreManager::new( + meta.key_data.clone(), + loader.clone(), + restorer.clone(), + self.status_manager.clone(), + ); + key_data_restore.run().await?; + } + let result = RestoreResult { index: loader.index().await, uni_meta: Some(meta), From cb051d3637a8fad4cfc172f2cc560b951e97cbcf Mon Sep 17 00:00:00 2001 From: liyaxing Date: Mon, 15 May 2023 19:34:17 +0800 Subject: [PATCH 2/2] Improve the recovery order to ensure that {cyfs}/etc/desc is restored at the end --- src/component/cyfs-backup/src/key_data/restore.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/component/cyfs-backup/src/key_data/restore.rs b/src/component/cyfs-backup/src/key_data/restore.rs index 1c870e34..ddd3fe67 100644 --- a/src/component/cyfs-backup/src/key_data/restore.rs +++ b/src/component/cyfs-backup/src/key_data/restore.rs @@ -32,7 +32,8 @@ impl KeyDataRestoreManager { } pub async fn run(&self) -> BuckyResult<()> { - for item in &self.list { + // The recovery operation is performed in reverse order to ensure that {cyfs}/etc/desc is restored at the end + for item in self.list.iter().rev() { info!("will restore key data: {:?}", item); self.restore_data(item).await?;