diff --git a/milli/src/update/index_documents/extract/mod.rs b/milli/src/update/index_documents/extract/mod.rs index 341cdc9f9..bf533cfc9 100644 --- a/milli/src/update/index_documents/extract/mod.rs +++ b/milli/src/update/index_documents/extract/mod.rs @@ -11,6 +11,7 @@ mod extract_word_position_docids; use std::fs::File; use std::io::BufReader; +use std::sync::Arc; use crossbeam_channel::Sender; use rayon::prelude::*; @@ -43,7 +44,7 @@ pub(crate) fn data_from_obkv_documents( lmdb_writer_sx: Sender>, primary_key_id: FieldId, geo_fields_ids: Option<(FieldId, FieldId)>, - settings_diff: &InnerIndexSettingsDiff, + settings_diff: &Arc, max_positions_per_attributes: Option, ) -> Result<()> { puffin::profile_function!(); @@ -180,7 +181,7 @@ pub(crate) fn data_from_obkv_documents( fn run_extraction_task( chunk: grenad::Reader, indexer: GrenadParameters, - settings_diff: &InnerIndexSettingsDiff, + settings_diff: &Arc, lmdb_writer_sx: Sender>, extract_fn: FE, serialize_fn: FS, @@ -221,7 +222,7 @@ fn send_original_documents_data( original_documents_chunk: Result>>, indexer: GrenadParameters, lmdb_writer_sx: Sender>, - settings_diff: &InnerIndexSettingsDiff, + settings_diff: &Arc, ) -> Result<()> { let original_documents_chunk = original_documents_chunk.and_then(|c| unsafe { as_cloneable_grenad(&c) })?; diff --git a/milli/src/update/index_documents/mod.rs b/milli/src/update/index_documents/mod.rs index 47f1e9f19..070f31c73 100644 --- a/milli/src/update/index_documents/mod.rs +++ b/milli/src/update/index_documents/mod.rs @@ -8,6 +8,7 @@ use std::collections::{HashMap, HashSet}; use std::io::{Read, Seek}; use std::num::NonZeroU32; use std::result::Result as StdResult; +use std::sync::Arc; use crossbeam_channel::{Receiver, Sender}; use grenad::{Merger, MergerBuilder}; @@ -292,6 +293,8 @@ where settings_diff.new.recompute_facets(self.wtxn, self.index)?; settings_diff.new.recompute_searchables(self.wtxn, self.index)?; + let settings_diff = Arc::new(settings_diff); + let backup_pool; let pool = match self.indexer_config.thread_pool { Some(ref pool) => pool, diff --git a/milli/src/update/index_documents/transform.rs b/milli/src/update/index_documents/transform.rs index 90c3dbcc0..8a3463e6f 100644 --- a/milli/src/update/index_documents/transform.rs +++ b/milli/src/update/index_documents/transform.rs @@ -829,6 +829,9 @@ impl<'a, 'i> Transform<'a, 'i> { }) } + /// Rebind the field_ids of the provided document to their values + /// based on the field_ids_maps difference between the old and the new settings, + /// then fill the provided buffers with delta documents using KvWritterDelAdd. fn rebind_existing_document( old_obkv: KvReader, settings_diff: &InnerIndexSettingsDiff, diff --git a/milli/src/update/settings.rs b/milli/src/update/settings.rs index 8ded6f03c..1997e966e 100644 --- a/milli/src/update/settings.rs +++ b/milli/src/update/settings.rs @@ -1094,7 +1094,6 @@ impl<'a, 't, 'i> Settings<'a, 't, 'i> { } } -#[derive(Clone)] pub struct InnerIndexSettingsDiff { pub(crate) old: InnerIndexSettings, pub(crate) new: InnerIndexSettings,