From 202794f6202f9e307667427b1db0bece1b986807 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Renault?= Date: Tue, 7 Oct 2025 14:29:42 +0200 Subject: [PATCH] Expose the env closing event so we can wait for the index to close --- .../src/index_mapper/index_map.rs | 17 ++++++++++++----- crates/index-scheduler/src/index_mapper/mod.rs | 2 +- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/crates/index-scheduler/src/index_mapper/index_map.rs b/crates/index-scheduler/src/index_mapper/index_map.rs index acb95f249..6b6b0a9e7 100644 --- a/crates/index-scheduler/src/index_mapper/index_map.rs +++ b/crates/index-scheduler/src/index_mapper/index_map.rs @@ -220,11 +220,11 @@ impl IndexMap { uuid: &Uuid, enable_mdb_writemap: bool, map_size_growth: usize, - ) { + ) -> Option { let Some(index) = self.available.remove(uuid) else { - return; + return None; }; - self.close(*uuid, index, enable_mdb_writemap, map_size_growth); + Some(self.close(*uuid, index, enable_mdb_writemap, map_size_growth)) } fn close( @@ -233,14 +233,21 @@ impl IndexMap { index: Index, enable_mdb_writemap: bool, map_size_growth: usize, - ) { + ) -> EnvClosingEvent { let map_size = index.map_size() + map_size_growth; let closing_event = index.prepare_for_closing(); let generation = self.next_generation(); self.unavailable.insert( uuid, - Some(ClosingIndex { uuid, closing_event, enable_mdb_writemap, map_size, generation }), + Some(ClosingIndex { + uuid, + closing_event: closing_event.clone(), + enable_mdb_writemap, + map_size, + generation, + }), ); + closing_event } /// Attempts to delete and index. diff --git a/crates/index-scheduler/src/index_mapper/mod.rs b/crates/index-scheduler/src/index_mapper/mod.rs index 6103fe7fc..7e2d3b5e2 100644 --- a/crates/index-scheduler/src/index_mapper/mod.rs +++ b/crates/index-scheduler/src/index_mapper/mod.rs @@ -4,7 +4,7 @@ use std::time::Duration; use std::{fs, thread}; use meilisearch_types::heed::types::{SerdeJson, Str}; -use meilisearch_types::heed::{Database, Env, RoTxn, RwTxn, WithoutTls}; +use meilisearch_types::heed::{Database, Env, EnvClosingEvent, RoTxn, RwTxn, WithoutTls}; use meilisearch_types::milli; use meilisearch_types::milli::database_stats::DatabaseStats; use meilisearch_types::milli::index::RollbackOutcome;