From cccefe15b3a7c49cc84266fa216673873437cac3 Mon Sep 17 00:00:00 2001 From: iequidoo Date: Fri, 19 Jul 2024 13:33:28 -0300 Subject: [PATCH] fix: import_backup_stream: Fix progress stucking at 0 Fix the progress calculation, before `total_size.checked_div(file_size)` was giving 0 if `total_size < file_size`. --- src/imex.rs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/imex.rs b/src/imex.rs index b03c9d5ee..514c7275d 100644 --- a/src/imex.rs +++ b/src/imex.rs @@ -312,8 +312,8 @@ async fn import_backup_stream_inner( let mut blobs = Vec::new(); // We already emitted ImexProgress(10) above let mut last_progress = 10; - const PROGRESS_MIGRATIONS: u64 = 999; - let mut total_size = 0; + const PROGRESS_MIGRATIONS: u128 = 999; + let mut total_size: u64 = 0; let mut res: Result<()> = loop { let mut f = match entries.try_next().await { Ok(Some(f)) => f, @@ -324,9 +324,10 @@ async fn import_backup_stream_inner( Ok(size) => size, Err(e) => break Err(e).context("Failed to get entry size"), }; + let max = PROGRESS_MIGRATIONS - 1; let progress = std::cmp::min( - 1000 * total_size.checked_div(file_size).unwrap_or_default(), - PROGRESS_MIGRATIONS - 1, + max * u128::from(total_size) / std::cmp::max(u128::from(file_size), 1), + max, ); if progress > last_progress { context.emit_event(EventType::ImexProgress(progress as usize));