diff --git a/Cargo.lock b/Cargo.lock index 2b41dd265..1224c0c97 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2125,6 +2125,7 @@ dependencies = [ "num_cpus", "obkv", "once_cell", + "page_size", "parking_lot", "paste", "permissive-json-pointer", diff --git a/meilisearch-lib/Cargo.toml b/meilisearch-lib/Cargo.toml index 672897380..0e7b05453 100644 --- a/meilisearch-lib/Cargo.toml +++ b/meilisearch-lib/Cargo.toml @@ -33,6 +33,7 @@ mime = "0.3.16" num_cpus = "1.13.1" obkv = "0.2.0" once_cell = "1.10.0" +page_size = "0.4.2" parking_lot = "0.12.0" permissive-json-pointer = { path = "../permissive-json-pointer" } rand = "0.8.5" diff --git a/meilisearch-lib/src/index_controller/mod.rs b/meilisearch-lib/src/index_controller/mod.rs index 88782c5ea..3002bfbdd 100644 --- a/meilisearch-lib/src/index_controller/mod.rs +++ b/meilisearch-lib/src/index_controller/mod.rs @@ -275,11 +275,13 @@ impl IndexControllerBuilder { /// Set the index controller builder's max update store size. pub fn set_max_task_store_size(&mut self, max_update_store_size: usize) -> &mut Self { + let max_update_store_size = clamp_to_page_size(max_update_store_size); self.max_task_store_size.replace(max_update_store_size); self } pub fn set_max_index_size(&mut self, size: usize) -> &mut Self { + let size = clamp_to_page_size(size); self.max_index_size.replace(size); self } @@ -645,6 +647,11 @@ pub async fn get_arc_ownership_blocking(mut item: Arc) -> T { } } +// Clamp the provided value to be a multiple of system page size. +fn clamp_to_page_size(size: usize) -> usize { + size / page_size::get() * page_size::get() +} + #[cfg(test)] mod test { use futures::future::ok;