Introduce a new internal error type to categorize panics

This commit is contained in:
Clément Renault 2024-04-22 15:46:16 +02:00
parent 0c7003c5df
commit 96cc5319c8
No known key found for this signature in database
GPG Key ID: F250A4C4E3AE5F5F
2 changed files with 12 additions and 0 deletions

View File

@ -49,6 +49,8 @@ pub enum InternalError {
InvalidDatabaseTyping, InvalidDatabaseTyping,
#[error(transparent)] #[error(transparent)]
RayonThreadPool(#[from] ThreadPoolBuildError), RayonThreadPool(#[from] ThreadPoolBuildError),
#[error("A panic occured. Read the logs to find more information about it.")]
PanicInThreadPool,
#[error(transparent)] #[error(transparent)]
SerdeJson(#[from] serde_json::Error), SerdeJson(#[from] serde_json::Error),
#[error(transparent)] #[error(transparent)]

View File

@ -540,6 +540,11 @@ where
Ok(()) Ok(())
})?; })?;
// While reseting the pool panic catcher we return an error if we catched one.
if pool_catched_panic.swap(false, Ordering::SeqCst) {
return Err(InternalError::PanicInThreadPool.into());
}
// We write the field distribution into the main database // We write the field distribution into the main database
self.index.put_field_distribution(self.wtxn, &field_distribution)?; self.index.put_field_distribution(self.wtxn, &field_distribution)?;
@ -568,6 +573,11 @@ where
} }
Result::Ok(()) Result::Ok(())
})?; })?;
// While reseting the pool panic catcher we return an error if we catched one.
if pool_catched_panic.swap(false, Ordering::SeqCst) {
return Err(InternalError::PanicInThreadPool.into());
}
} }
self.execute_prefix_databases( self.execute_prefix_databases(