mirror of
				https://github.com/meilisearch/meilisearch.git
				synced 2025-11-04 01:46:28 +00:00 
			
		
		
		
	attach index name in errors
# Conflicts: # crates/index-scheduler/src/batch.rs # Conflicts: # crates/index-scheduler/src/batch.rs # crates/meilisearch/src/search/mod.rs
This commit is contained in:
		@@ -122,8 +122,11 @@ pub enum Error {
 | 
			
		||||
    Dump(#[from] dump::Error),
 | 
			
		||||
    #[error(transparent)]
 | 
			
		||||
    Heed(#[from] heed::Error),
 | 
			
		||||
    #[error(transparent)]
 | 
			
		||||
    Milli(#[from] milli::Error),
 | 
			
		||||
    #[error("{}", match .index_name {
 | 
			
		||||
        Some(name) if !name.is_empty() => format!("Index `{}`: {error}", name),
 | 
			
		||||
        _ => format!("{error}")
 | 
			
		||||
    })]
 | 
			
		||||
    Milli { error: milli::Error, index_name: Option<String> },
 | 
			
		||||
    #[error("An unexpected crash occurred when processing the task.")]
 | 
			
		||||
    ProcessBatchPanicked,
 | 
			
		||||
    #[error(transparent)]
 | 
			
		||||
@@ -190,7 +193,7 @@ impl Error {
 | 
			
		||||
            | Error::AbortedTask
 | 
			
		||||
            | Error::Dump(_)
 | 
			
		||||
            | Error::Heed(_)
 | 
			
		||||
            | Error::Milli(_)
 | 
			
		||||
            | Error::Milli { .. }
 | 
			
		||||
            | Error::ProcessBatchPanicked
 | 
			
		||||
            | Error::FileStore(_)
 | 
			
		||||
            | Error::IoError(_)
 | 
			
		||||
@@ -209,6 +212,10 @@ impl Error {
 | 
			
		||||
    pub fn with_custom_error_code(self, code: Code) -> Self {
 | 
			
		||||
        Self::WithCustomErrorCode(code, Box::new(self))
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    pub fn from_milli(error: milli::Error, index_name: Option<String>) -> Self {
 | 
			
		||||
        Self::Milli { error, index_name }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl ErrorCode for Error {
 | 
			
		||||
@@ -236,7 +243,7 @@ impl ErrorCode for Error {
 | 
			
		||||
            // TODO: not sure of the Code to use
 | 
			
		||||
            Error::NoSpaceLeftInTaskQueue => Code::NoSpaceLeftOnDevice,
 | 
			
		||||
            Error::Dump(e) => e.error_code(),
 | 
			
		||||
            Error::Milli(e) => e.error_code(),
 | 
			
		||||
            Error::Milli { error, .. } => error.error_code(),
 | 
			
		||||
            Error::ProcessBatchPanicked => Code::Internal,
 | 
			
		||||
            Error::Heed(e) => e.error_code(),
 | 
			
		||||
            Error::HeedTransaction(e) => e.error_code(),
 | 
			
		||||
 
 | 
			
		||||
@@ -3,13 +3,13 @@ use std::path::Path;
 | 
			
		||||
use std::time::Duration;
 | 
			
		||||
 | 
			
		||||
use meilisearch_types::heed::{EnvClosingEvent, EnvFlags, EnvOpenOptions};
 | 
			
		||||
use meilisearch_types::milli::Index;
 | 
			
		||||
use meilisearch_types::milli::{Index, Result};
 | 
			
		||||
use time::OffsetDateTime;
 | 
			
		||||
use uuid::Uuid;
 | 
			
		||||
 | 
			
		||||
use super::IndexStatus::{self, Available, BeingDeleted, Closing, Missing};
 | 
			
		||||
use crate::lru::{InsertionOutcome, LruMap};
 | 
			
		||||
use crate::{clamp_to_page_size, Result};
 | 
			
		||||
use crate::{clamp_to_page_size};
 | 
			
		||||
 | 
			
		||||
/// Keep an internally consistent view of the open indexes in memory.
 | 
			
		||||
///
 | 
			
		||||
 
 | 
			
		||||
@@ -11,7 +11,7 @@ use serde::{Deserialize, Serialize};
 | 
			
		||||
use time::OffsetDateTime;
 | 
			
		||||
use tracing::error;
 | 
			
		||||
use uuid::Uuid;
 | 
			
		||||
 | 
			
		||||
use meilisearch_types::milli;
 | 
			
		||||
use self::index_map::IndexMap;
 | 
			
		||||
use self::IndexStatus::{Available, BeingDeleted, Closing, Missing};
 | 
			
		||||
use crate::uuid_codec::UuidCodec;
 | 
			
		||||
@@ -121,7 +121,7 @@ impl IndexStats {
 | 
			
		||||
    /// # Parameters
 | 
			
		||||
    ///
 | 
			
		||||
    /// - rtxn: a RO transaction for the index, obtained from `Index::read_txn()`.
 | 
			
		||||
    pub fn new(index: &Index, rtxn: &RoTxn) -> Result<Self> {
 | 
			
		||||
    pub fn new(index: &Index, rtxn: &RoTxn) -> milli::Result<Self> {
 | 
			
		||||
        Ok(IndexStats {
 | 
			
		||||
            number_of_documents: index.number_of_documents(rtxn)?,
 | 
			
		||||
            database_size: index.on_disk_size()?,
 | 
			
		||||
@@ -189,7 +189,7 @@ impl IndexMapper {
 | 
			
		||||
                    date,
 | 
			
		||||
                    self.enable_mdb_writemap,
 | 
			
		||||
                    self.index_base_map_size,
 | 
			
		||||
                )?;
 | 
			
		||||
                ).map_err(|e| Error::from_milli(e, Some(uuid.to_string())))?;
 | 
			
		||||
 | 
			
		||||
                wtxn.commit()?;
 | 
			
		||||
 | 
			
		||||
@@ -357,7 +357,8 @@ impl IndexMapper {
 | 
			
		||||
                    };
 | 
			
		||||
                    let index_path = self.base_path.join(uuid.to_string());
 | 
			
		||||
                    // take the lock to reopen the environment.
 | 
			
		||||
                    reopen.reopen(&mut self.index_map.write().unwrap(), &index_path)?;
 | 
			
		||||
                    reopen.reopen(&mut self.index_map.write().unwrap(), &index_path)
 | 
			
		||||
                        .map_err(|e| Error::from_milli(e, Some(uuid.to_string())))?;
 | 
			
		||||
                    continue;
 | 
			
		||||
                }
 | 
			
		||||
                BeingDeleted => return Err(Error::IndexNotFound(name.to_string())),
 | 
			
		||||
@@ -378,7 +379,7 @@ impl IndexMapper {
 | 
			
		||||
                                None,
 | 
			
		||||
                                self.enable_mdb_writemap,
 | 
			
		||||
                                self.index_base_map_size,
 | 
			
		||||
                            )?;
 | 
			
		||||
                            ).map_err(|e| Error::from_milli(e, Some(uuid.to_string())))?;
 | 
			
		||||
                        }
 | 
			
		||||
                        Available(index) => break index,
 | 
			
		||||
                        Closing(_) => {
 | 
			
		||||
@@ -459,7 +460,7 @@ impl IndexMapper {
 | 
			
		||||
            None => {
 | 
			
		||||
                let index = self.index(rtxn, index_uid)?;
 | 
			
		||||
                let index_rtxn = index.read_txn()?;
 | 
			
		||||
                IndexStats::new(&index, &index_rtxn)
 | 
			
		||||
                IndexStats::new(&index, &index_rtxn).map_err(|e| Error::from_milli(e, Some(uuid.to_string())))
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -1678,9 +1678,9 @@ impl IndexScheduler {
 | 
			
		||||
                tracing::info!("A batch of tasks was successfully completed with {success} successful tasks and {failure} failed tasks.");
 | 
			
		||||
            }
 | 
			
		||||
            // If we have an abortion error we must stop the tick here and re-schedule tasks.
 | 
			
		||||
            Err(Error::Milli(milli::Error::InternalError(
 | 
			
		||||
                milli::InternalError::AbortedIndexation,
 | 
			
		||||
            )))
 | 
			
		||||
            Err(Error::Milli{
 | 
			
		||||
               error: milli::Error::InternalError(milli::InternalError::AbortedIndexation), ..
 | 
			
		||||
            })
 | 
			
		||||
            | Err(Error::AbortedTask) => {
 | 
			
		||||
                #[cfg(test)]
 | 
			
		||||
                self.breakpoint(Breakpoint::AbortedIndexation);
 | 
			
		||||
@@ -1699,9 +1699,9 @@ impl IndexScheduler {
 | 
			
		||||
            // 2. close the associated environment
 | 
			
		||||
            // 3. resize it
 | 
			
		||||
            // 4. re-schedule tasks
 | 
			
		||||
            Err(Error::Milli(milli::Error::UserError(
 | 
			
		||||
                milli::UserError::MaxDatabaseSizeReached,
 | 
			
		||||
            ))) if index_uid.is_some() => {
 | 
			
		||||
            Err(Error::Milli {
 | 
			
		||||
                error: milli::Error::UserError(milli::UserError::MaxDatabaseSizeReached), ..
 | 
			
		||||
            }) if index_uid.is_some() => {
 | 
			
		||||
                // fixme: add index_uid to match to avoid the unwrap
 | 
			
		||||
                let index_uid = index_uid.unwrap();
 | 
			
		||||
                // fixme: handle error more gracefully? not sure when this could happen
 | 
			
		||||
@@ -1943,6 +1943,7 @@ impl IndexScheduler {
 | 
			
		||||
    // TODO: consider using a type alias or a struct embedder/template
 | 
			
		||||
    pub fn embedders(
 | 
			
		||||
        &self,
 | 
			
		||||
        index_uid: String,
 | 
			
		||||
        embedding_configs: Vec<IndexEmbeddingConfig>,
 | 
			
		||||
    ) -> Result<EmbeddingConfigs> {
 | 
			
		||||
        let res: Result<_> = embedding_configs
 | 
			
		||||
@@ -1954,7 +1955,10 @@ impl IndexScheduler {
 | 
			
		||||
                     ..
 | 
			
		||||
                 }| {
 | 
			
		||||
                    let prompt =
 | 
			
		||||
                        Arc::new(prompt.try_into().map_err(meilisearch_types::milli::Error::from)?);
 | 
			
		||||
                        Arc::new(prompt.try_into()
 | 
			
		||||
                            .map_err(meilisearch_types::milli::Error::from)
 | 
			
		||||
                            .map_err(|e| Error::from_milli(e, Some(index_uid.clone())))?
 | 
			
		||||
                        );
 | 
			
		||||
                    // optimistically return existing embedder
 | 
			
		||||
                    {
 | 
			
		||||
                        let embedders = self.embedders.read().unwrap();
 | 
			
		||||
@@ -1970,7 +1974,8 @@ impl IndexScheduler {
 | 
			
		||||
                    let embedder = Arc::new(
 | 
			
		||||
                        Embedder::new(embedder_options.clone())
 | 
			
		||||
                            .map_err(meilisearch_types::milli::vector::Error::from)
 | 
			
		||||
                            .map_err(meilisearch_types::milli::Error::from)?,
 | 
			
		||||
                            .map_err(meilisearch_types::milli::Error::from)
 | 
			
		||||
                            .map_err(|e| Error::from_milli(e, Some(index_uid.clone())))?,
 | 
			
		||||
                    );
 | 
			
		||||
                    {
 | 
			
		||||
                        let mut embedders = self.embedders.write().unwrap();
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user