From 52b95c4e591eafbe273c32c0b603ac6e2c381221 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Renault?= Date: Mon, 14 Oct 2024 16:48:15 +0200 Subject: [PATCH] Make sure we edit the task statuses --- index-scheduler/src/batch.rs | 72 ++++++++++--------- .../update/new/indexer/update_by_function.rs | 9 ++- 2 files changed, 41 insertions(+), 40 deletions(-) diff --git a/index-scheduler/src/batch.rs b/index-scheduler/src/batch.rs index 5ce658dd9..978ef9ec6 100644 --- a/index-scheduler/src/batch.rs +++ b/index-scheduler/src/batch.rs @@ -1424,6 +1424,8 @@ impl IndexScheduler { retrieve_or_guess_primary_key(&rtxn, index, &mut new_fields_ids_map, None)? .unwrap(); + let result_count = Ok((candidates.len(), candidates.len())) as Result<_>; + if task.error.is_none() { /// TODO create a pool if needed // let pool = indexer_config.thread_pool.unwrap(); @@ -1444,42 +1446,42 @@ impl IndexScheduler { // tracing::info!(indexing_result = ?addition, processed_in = ?started_processing_at.elapsed(), "document indexing done"); } - // let (original_filter, context, function) = if let Some(Details::DocumentEdition { - // original_filter, - // context, - // function, - // .. - // }) = task.details - // { - // (original_filter, context, function) - // } else { - // // In the case of a `documentEdition` the details MUST be set - // unreachable!(); - // }; + let (original_filter, context, function) = if let Some(Details::DocumentEdition { + original_filter, + context, + function, + .. + }) = task.details + { + (original_filter, context, function) + } else { + // In the case of a `documentEdition` the details MUST be set + unreachable!(); + }; - // match result_count { - // Ok((deleted_documents, edited_documents)) => { - // task.status = Status::Succeeded; - // task.details = Some(Details::DocumentEdition { - // original_filter, - // context, - // function, - // deleted_documents: Some(deleted_documents), - // edited_documents: Some(edited_documents), - // }); - // } - // Err(e) => { - // task.status = Status::Failed; - // task.details = Some(Details::DocumentEdition { - // original_filter, - // context, - // function, - // deleted_documents: Some(0), - // edited_documents: Some(0), - // }); - // task.error = Some(e.into()); - // } - // } + match result_count { + Ok((deleted_documents, edited_documents)) => { + task.status = Status::Succeeded; + task.details = Some(Details::DocumentEdition { + original_filter, + context, + function, + deleted_documents: Some(deleted_documents), + edited_documents: Some(edited_documents), + }); + } + Err(e) => { + task.status = Status::Failed; + task.details = Some(Details::DocumentEdition { + original_filter, + context, + function, + deleted_documents: Some(0), + edited_documents: Some(0), + }); + task.error = Some(e.into()); + } + } Ok(vec![task]) } diff --git a/milli/src/update/new/indexer/update_by_function.rs b/milli/src/update/new/indexer/update_by_function.rs index d9b09bd21..d2e5126d0 100644 --- a/milli/src/update/new/indexer/update_by_function.rs +++ b/milli/src/update/new/indexer/update_by_function.rs @@ -113,16 +113,15 @@ impl<'index> DocumentChanges<'index> for UpdateByFunctionChanges<'index> { scope.push_constant_dynamic("context", context.clone()); } scope.push("doc", rhai_document); - // That's were the magic happens. We run the user script - // which edits "doc" scope variable reprensenting the document - // and ignore the output and even the type of it, i.e., Dynamic. + // We run the user script which edits "doc" scope variable reprensenting + // the document and ignore the output and even the type of it, i.e., Dynamic. let _ = self .engine .eval_ast_with_scope::(&mut scope, &self.ast) .map_err(UserError::DocumentEditionRuntimeError)?; match scope.remove::("doc") { - // If the "doc" variable has set to (), we effectively delete the document. + // If the "doc" variable has been set to (), we effectively delete the document. Some(doc) if doc.is_unit() => Ok(Some(DocumentChange::Deletion(Deletion::create( docid, doc_alloc.alloc_str(&document_id), @@ -142,7 +141,7 @@ impl<'index> DocumentChanges<'index> for UpdateByFunctionChanges<'index> { // // Future: Use a custom function rhai function to track changes. // - if json_document != rhaimap_to_object(new_rhai_document) { + if dbg!(json_document) != dbg!(rhaimap_to_object(new_rhai_document)) { let mut global_fields_ids_map = new_fields_ids_map.borrow_mut(); let new_document_id = self .primary_key