mirror of
https://github.com/meilisearch/meilisearch.git
synced 2025-09-04 11:46:30 +00:00
Make notify_webhooks execute in its own thread
This commit is contained in:
@ -766,14 +766,8 @@ impl IndexScheduler {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// Once the tasks changes have been committed we must send all the tasks that were updated to our webhook if there is one.
|
||||
fn notify_webhook(&self, updated: &RoaringBitmap) -> Result<()> {
|
||||
let webhooks = self.cached_webhooks.read().unwrap_or_else(|poisoned| poisoned.into_inner());
|
||||
if webhooks.webhooks.is_empty() {
|
||||
return Ok(());
|
||||
}
|
||||
let webhooks = Webhooks::clone(&*webhooks);
|
||||
|
||||
/// Once the tasks changes have been committed we must send all the tasks that were updated to our webhooks
|
||||
fn notify_webhooks(&self, webhooks: Webhooks, updated: &RoaringBitmap) -> Result<()> {
|
||||
struct TaskReader<'a, 'b> {
|
||||
rtxn: &'a RoTxn<'a>,
|
||||
index_scheduler: &'a IndexScheduler,
|
||||
|
@ -26,6 +26,7 @@ use meilisearch_types::error::ResponseError;
|
||||
use meilisearch_types::heed::{Env, WithoutTls};
|
||||
use meilisearch_types::milli;
|
||||
use meilisearch_types::tasks::Status;
|
||||
use meilisearch_types::webhooks::Webhooks;
|
||||
use process_batch::ProcessBatchInfo;
|
||||
use rayon::current_num_threads;
|
||||
use rayon::iter::{IntoParallelIterator, ParallelIterator};
|
||||
@ -446,8 +447,17 @@ impl IndexScheduler {
|
||||
Ok(())
|
||||
})?;
|
||||
|
||||
// We shouldn't crash the tick function if we can't send data to the webhook.
|
||||
let _ = self.notify_webhook(&ids);
|
||||
// We shouldn't crash the tick function if we can't send data to the webhooks
|
||||
let webhooks = self.cached_webhooks.read().unwrap_or_else(|p| p.into_inner());
|
||||
if !webhooks.webhooks.is_empty() {
|
||||
let webhooks = Webhooks::clone(&*webhooks);
|
||||
let cloned_index_scheduler = self.private_clone();
|
||||
std::thread::spawn(move || {
|
||||
if let Err(e) = cloned_index_scheduler.notify_webhooks(webhooks, &ids) {
|
||||
tracing::error!("Failure to notify webhooks: {e}");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
self.breakpoint(crate::test_utils::Breakpoint::AfterProcessing);
|
||||
|
Reference in New Issue
Block a user