Add index exists function in index_scheduler

This commit is contained in:
karribalu 2024-07-08 22:27:10 +01:00
parent 05cc2d1fac
commit 47e526f5ea
3 changed files with 21 additions and 9 deletions

View File

@ -662,7 +662,11 @@ impl IndexScheduler {
let rtxn = self.env.read_txn()?; let rtxn = self.env.read_txn()?;
self.index_mapper.index(&rtxn, name) self.index_mapper.index(&rtxn, name)
} }
/// Return the boolean referring if index exists.
pub fn index_exists(&self, name: &str) -> Result<bool> {
let rtxn = self.env.read_txn()?;
self.index_mapper.index_exists(&rtxn, name)
}
/// Return the name of all indexes without opening them. /// Return the name of all indexes without opening them.
pub fn index_names(&self) -> Result<Vec<String>> { pub fn index_names(&self) -> Result<Vec<String>> {
let rtxn = self.env.read_txn()?; let rtxn = self.env.read_txn()?;
@ -3787,15 +3791,15 @@ mod tests {
]); ]);
snapshot!(snapshot_index_scheduler(&index_scheduler), name: "after_processing_the_10_tasks"); snapshot!(snapshot_index_scheduler(&index_scheduler), name: "after_processing_the_10_tasks");
// The index should not exists. // The index should not exist.
snapshot!(format!("{}", index_scheduler.index("doggos").map(|_| ()).unwrap_err()), @"Index `doggos` not found."); snapshot!(matches!(index_scheduler.index_exists("doggos"), Ok(true)), @"false");
} }
#[test] #[test]
fn test_document_addition_cant_create_index_without_index_without_autobatching() { fn test_document_addition_cant_create_index_without_index_without_autobatching() {
// We're going to execute multiple document addition that don't have // We're going to execute multiple document addition that don't have
// the right to create an index while there is no index currently. // the right to create an index while there is no index currently.
// Since the autobatching is disabled, every tasks should be processed // Since the auto-batching is disabled, every task should be processed
// sequentially and throw an IndexDoesNotExists. // sequentially and throw an IndexDoesNotExists.
let (index_scheduler, mut handle) = IndexScheduler::test(false, vec![]); let (index_scheduler, mut handle) = IndexScheduler::test(false, vec![]);
@ -3837,8 +3841,8 @@ mod tests {
handle.advance_n_failed_batches(5); handle.advance_n_failed_batches(5);
snapshot!(snapshot_index_scheduler(&index_scheduler), name: "all_tasks_processed"); snapshot!(snapshot_index_scheduler(&index_scheduler), name: "all_tasks_processed");
// The index should not exists. // The index should not exist.
snapshot!(format!("{}", index_scheduler.index("doggos").map(|_| ()).unwrap_err()), @"Index `doggos` not found."); snapshot!(matches!(index_scheduler.index_exists("doggos"), Ok(true)), @"false");
} }
#[test] #[test]

View File

@ -102,7 +102,7 @@ pub trait Analytics: Sync + Send {
/// This method should be called to aggregate post facet values searches /// This method should be called to aggregate post facet values searches
fn post_facet_search(&self, aggregate: FacetSearchAggregator); fn post_facet_search(&self, aggregate: FacetSearchAggregator);
// this method should be called to aggregate a add documents request // this method should be called to aggregate an add documents request
fn add_documents( fn add_documents(
&self, &self,
documents_query: &UpdateDocumentsQuery, documents_query: &UpdateDocumentsQuery,

View File

@ -304,7 +304,11 @@ pub async fn replace_documents(
debug!(parameters = ?params, "Replace documents"); debug!(parameters = ?params, "Replace documents");
let params = params.into_inner(); let params = params.into_inner();
analytics.add_documents(&params, index_scheduler.index(&index_uid).is_err(), &req); analytics.add_documents(
&params,
!matches!(index_scheduler.index_exists(&index_uid), Ok(true)),
&req,
);
let allow_index_creation = index_scheduler.filters().allow_index_creation(&index_uid); let allow_index_creation = index_scheduler.filters().allow_index_creation(&index_uid);
let uid = get_task_id(&req, &opt)?; let uid = get_task_id(&req, &opt)?;
@ -341,7 +345,11 @@ pub async fn update_documents(
let params = params.into_inner(); let params = params.into_inner();
debug!(parameters = ?params, "Update documents"); debug!(parameters = ?params, "Update documents");
analytics.update_documents(&params, index_scheduler.index(&index_uid).is_err(), &req); analytics.update_documents(
&params,
!matches!(index_scheduler.index_exists(&index_uid), Ok(true)),
&req,
);
let allow_index_creation = index_scheduler.filters().allow_index_creation(&index_uid); let allow_index_creation = index_scheduler.filters().allow_index_creation(&index_uid);
let uid = get_task_id(&req, &opt)?; let uid = get_task_id(&req, &opt)?;