diff --git a/crates/meilisearch-types/src/batches.rs b/crates/meilisearch-types/src/batches.rs index cec74fb75..c8d98655f 100644 --- a/crates/meilisearch-types/src/batches.rs +++ b/crates/meilisearch-types/src/batches.rs @@ -100,7 +100,7 @@ pub struct EmbedderStatsView { impl From<&EmbedderStats> for EmbedderStatsView { fn from(stats: &EmbedderStats) -> Self { - let errors = stats.errors.read().unwrap(); + let errors = stats.errors.read().unwrap_or_else(|p| p.into_inner()); Self { total_count: stats.total_count.load(std::sync::atomic::Ordering::Relaxed), error_count: errors.1 as usize, diff --git a/crates/milli/src/progress.rs b/crates/milli/src/progress.rs index 7ecfcc095..61c61cd49 100644 --- a/crates/milli/src/progress.rs +++ b/crates/milli/src/progress.rs @@ -30,7 +30,9 @@ pub struct EmbedderStats { impl std::fmt::Debug for EmbedderStats { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - let (error, count) = self.errors.read().unwrap().clone(); + let guard = self.errors.read().unwrap_or_else(|p| p.into_inner()); + let (error, count) = (guard.0.clone(), guard.1); + std::mem::drop(guard); f.debug_struct("EmbedderStats") .field("last_error", &error) .field("total_count", &self.total_count.load(Ordering::Relaxed)) diff --git a/crates/milli/src/vector/rest.rs b/crates/milli/src/vector/rest.rs index 409284b65..dd08c6a5e 100644 --- a/crates/milli/src/vector/rest.rs +++ b/crates/milli/src/vector/rest.rs @@ -335,10 +335,11 @@ where Err(retry) => { tracing::warn!("Failed: {}", retry.error); if let Some(embedder_stats) = &embedder_stats { - if let Ok(mut errors) = embedder_stats.errors.write() { - errors.0 = Some(retry.error.to_string()); - errors.1 += 1; - } + let stringified_error = retry.error.to_string(); + let mut errors = + embedder_stats.errors.write().unwrap_or_else(|p| p.into_inner()); + errors.0 = Some(stringified_error); + errors.1 += 1; } if let Some(deadline) = deadline { let now = std::time::Instant::now(); @@ -377,11 +378,11 @@ where Ok(response) => Ok(response), Err(retry) => { if let Some(embedder_stats) = &embedder_stats { - if let Ok(mut errors) = embedder_stats.errors.write() { - errors.0 = Some(retry.error.to_string()); - errors.1 += 1; - } - } + let stringified_error = retry.error.to_string(); + let mut errors = embedder_stats.errors.write().unwrap_or_else(|p| p.into_inner()); + errors.0 = Some(stringified_error); + errors.1 += 1; + }; Err(retry.into_error()) } }