From b24b13b03667752da995fff0fff9f433ad19cdff Mon Sep 17 00:00:00 2001 From: Kerollmops Date: Wed, 5 Oct 2022 16:48:43 +0200 Subject: [PATCH] Let the tick function set the Failed status itself --- index-scheduler/src/batch.rs | 60 +++++++++++++----------------------- index-scheduler/src/lib.rs | 7 +++-- 2 files changed, 25 insertions(+), 42 deletions(-) diff --git a/index-scheduler/src/batch.rs b/index-scheduler/src/batch.rs index 884546998..eef2c3206 100644 --- a/index-scheduler/src/batch.rs +++ b/index-scheduler/src/batch.rs @@ -496,20 +496,16 @@ impl IndexScheduler { ) -> Result> { match operation { IndexOperation::DocumentClear { mut tasks, .. } => { - let result = milli::update::ClearDocuments::new(index_wtxn, index).execute(); + let count = milli::update::ClearDocuments::new(index_wtxn, index).execute()?; + for task in &mut tasks { - match result { - Ok(deleted_documents) => { - task.status = Status::Succeeded; - task.details = Some(Details::ClearAll { - deleted_documents: Some(deleted_documents), - }); - } - Err(ref error) => { - task.status = Status::Failed; - task.error = Some(MilliError(error).into()) - } - } + task.status = Status::Succeeded; + task.details = match &task.kind { + KindWithContent::DocumentClear { .. } => Some(Details::ClearAll { + deleted_documents: Some(count), + }), + otherwise => otherwise.default_details(), + }; } Ok(tasks) @@ -608,24 +604,16 @@ impl IndexScheduler { builder.delete_external_id(id); }); - let result = builder.execute(); + let DocumentDeletionResult { + deleted_documents, .. + } = builder.execute()?; + for (task, documents) in tasks.iter_mut().zip(documents) { - match result { - Ok(DocumentDeletionResult { - deleted_documents, - remaining_documents: _, - }) => { - task.status = Status::Succeeded; - task.details = Some(Details::DocumentDeletion { - received_document_ids: documents.len(), - deleted_documents: Some(deleted_documents), - }); - } - Err(ref error) => { - task.status = Status::Failed; - task.error = Some(MilliError(error).into()); - } - } + task.status = Status::Succeeded; + task.details = Some(Details::DocumentDeletion { + received_document_ids: documents.len(), + deleted_documents: Some(deleted_documents), + }); } Ok(tasks) @@ -644,17 +632,11 @@ impl IndexScheduler { let mut builder = milli::update::Settings::new(index_wtxn, index, indexer_config); apply_settings_to_builder(&checked_settings, &mut builder); - let result = builder.execute(|indexing_step| { + builder.execute(|indexing_step| { debug!("update: {:?}", indexing_step); - }); + })?; - match result { - Ok(_) => task.status = Status::Succeeded, - Err(ref error) => { - task.status = Status::Failed; - task.error = Some(MilliError(error).into()); - } - } + task.status = Status::Succeeded; } Ok(tasks) diff --git a/index-scheduler/src/lib.rs b/index-scheduler/src/lib.rs index d324af9d7..d8a06eca6 100644 --- a/index-scheduler/src/lib.rs +++ b/index-scheduler/src/lib.rs @@ -17,6 +17,7 @@ use std::path::PathBuf; use std::sync::{Arc, RwLock}; use file_store::{File, FileStore}; +use meilisearch_types::error::ResponseError; use roaring::RoaringBitmap; use serde::Deserialize; use synchronoise::SignalEvent; @@ -407,14 +408,14 @@ impl IndexScheduler { } } // In case of a failure we must get back and patch all the tasks with the error. - Err(_err) => { + Err(err) => { + let error: ResponseError = err.into(); for id in ids { let mut task = self.get_task(&wtxn, id)?.ok_or(Error::CorruptedTaskQueue)?; task.started_at = Some(started_at); task.finished_at = Some(finished_at); task.status = Status::Failed; - // TODO: TAMO: set the error correctly - // task.error = Some(err); + task.error = Some(error.clone()); self.update_task(&mut wtxn, &task)?; task.remove_data()?;