diff --git a/crates/index-scheduler/src/batch.rs b/crates/index-scheduler/src/batch.rs index d94c8d9a5..c06cb6b42 100644 --- a/crates/index-scheduler/src/batch.rs +++ b/crates/index-scheduler/src/batch.rs @@ -39,7 +39,9 @@ use meilisearch_types::milli::vector::parsed_vectors::{ }; use meilisearch_types::milli::{self, Filter, ThreadPoolNoAbortBuilder}; use meilisearch_types::settings::{apply_settings_to_builder, Settings, Unchecked}; -use meilisearch_types::tasks::{Details, IndexSwap, Kind, KindWithContent, Status, Task}; +use meilisearch_types::tasks::{ + Details, IndexSwap, Kind, KindWithContent, Status, Task, TaskProgress, +}; use meilisearch_types::{compression, Index, VERSION_FILE_NAME}; use roaring::RoaringBitmap; use time::macros::format_description; @@ -1240,7 +1242,21 @@ impl IndexScheduler { secs_since_started_processing_at .store((now - started_processing_at).as_secs(), atomic::Ordering::Relaxed); - processing_tasks.write().unwrap().update_progress(progress); + let TaskProgress { + current_step, + finished_steps, + total_steps, + finished_documents, + total_documents, + } = processing_tasks.write().unwrap().update_progress(progress); + + tracing::info!( + current_step, + finished_steps, + total_steps, + finished_documents, + total_documents + ); }; match operation { diff --git a/crates/index-scheduler/src/lib.rs b/crates/index-scheduler/src/lib.rs index 5508eabab..687c2aa8e 100644 --- a/crates/index-scheduler/src/lib.rs +++ b/crates/index-scheduler/src/lib.rs @@ -182,8 +182,8 @@ impl ProcessingTasks { self.processing = processing; } - fn update_progress(&mut self, progress: Progress) { - self.progress.get_or_insert_with(TaskProgress::default).update(progress); + fn update_progress(&mut self, progress: Progress) -> TaskProgress { + self.progress.get_or_insert_with(TaskProgress::default).update(progress) } /// Set the processing tasks to an empty list diff --git a/crates/meilisearch-types/src/tasks.rs b/crates/meilisearch-types/src/tasks.rs index 70e6ad294..7f4431da1 100644 --- a/crates/meilisearch-types/src/tasks.rs +++ b/crates/meilisearch-types/src/tasks.rs @@ -39,10 +39,10 @@ pub struct Task { pub kind: KindWithContent, } -#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)] +#[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct TaskProgress { - pub current_step: String, + pub current_step: &'static str, pub finished_steps: u16, pub total_steps: u16, pub finished_documents: Option, @@ -58,7 +58,7 @@ impl Default for TaskProgress { impl TaskProgress { pub fn new() -> Self { Self { - current_step: String::new(), + current_step: "start", finished_steps: 0, total_steps: 1, finished_documents: None, @@ -66,15 +66,17 @@ impl TaskProgress { } } - pub fn update(&mut self, progress: Progress) { - if self.current_step != progress.step_name { - self.current_step.clear(); - self.current_step.push_str(progress.step_name); - } - self.total_steps = progress.total_steps; + pub fn update(&mut self, progress: Progress) -> TaskProgress { if self.finished_steps > progress.finished_steps { - return; + return *self; } + + if self.current_step != progress.step_name { + self.current_step = progress.step_name + } + + self.total_steps = progress.total_steps; + if self.finished_steps < progress.finished_steps { self.finished_documents = None; self.total_documents = None; @@ -83,12 +85,13 @@ impl TaskProgress { if let Some((finished_documents, total_documents)) = progress.finished_total_documents { if let Some(task_finished_documents) = self.finished_documents { if task_finished_documents > finished_documents { - return; + return *self; } } self.finished_documents = Some(finished_documents); self.total_documents = Some(total_documents); } + *self } }