From 2554072e8f48817003b73eba97fa96957e930da8 Mon Sep 17 00:00:00 2001 From: Luca Cominardi Date: Wed, 22 Jul 2026 14:50:29 +0200 Subject: [PATCH] fix: address manual mapping review comments Co-authored-by: Cursor --- src/indexer/doc_id_mapping.rs | 4 ++-- src/indexer/single_segment_index_writer.rs | 26 ++++++++++------------ 2 files changed, 14 insertions(+), 16 deletions(-) diff --git a/src/indexer/doc_id_mapping.rs b/src/indexer/doc_id_mapping.rs index e15714a29..b78223d53 100644 --- a/src/indexer/doc_id_mapping.rs +++ b/src/indexer/doc_id_mapping.rs @@ -100,7 +100,7 @@ impl DocIdMapping { fn from_new_id_to_old_id_inner( new_doc_id_to_old: Vec, - mut check: impl FnMut(DocId) -> Result<(), E>, + mut validate: impl FnMut(DocId) -> Result<(), E>, ) -> Result { let max_doc = new_doc_id_to_old.len(); let old_max_doc = new_doc_id_to_old @@ -111,7 +111,7 @@ impl DocIdMapping { .unwrap_or(0); let mut old_doc_id_to_new = vec![0; old_max_doc as usize]; for i in 0..max_doc { - (check)(new_doc_id_to_old[i])?; + (validate)(new_doc_id_to_old[i])?; old_doc_id_to_new[new_doc_id_to_old[i] as usize] = i as DocId; } Ok(DocIdMapping { diff --git a/src/indexer/single_segment_index_writer.rs b/src/indexer/single_segment_index_writer.rs index c2a6a1b7e..7f07d4680 100644 --- a/src/indexer/single_segment_index_writer.rs +++ b/src/indexer/single_segment_index_writer.rs @@ -4,7 +4,7 @@ use crate::indexer::operation::AddOperation; use crate::indexer::segment_updater::save_metas; use crate::indexer::{DocIdMapping, SegmentWriter}; use crate::schema::document::Document; -use crate::{Directory, Index, IndexMeta, IndexSettings, Opstamp, Segment, TantivyDocument}; +use crate::{Directory, Index, IndexMeta, Opstamp, Segment, TantivyDocument}; #[doc(hidden)] pub struct SingleSegmentIndexWriter { @@ -45,9 +45,8 @@ impl SingleSegmentIndexWriter { } = self; let max_doc = segment_writer.max_doc(); segment_writer.finalize()?; - let remapping_required = segment.index().settings().sort_by_field.is_some(); - let index_settings = segment.index().settings().clone(); - Self::finalize_inner(segment, max_doc, remapping_required, index_settings) + let did_remapping = segment.index().settings().sort_by_field.is_some(); + Self::finalize_inner(segment, max_doc, did_remapping, false) } pub fn finalize_with_doc_id_mapping(self, mapping: &DocIdMapping) -> crate::Result { @@ -58,30 +57,29 @@ impl SingleSegmentIndexWriter { } = self; let max_doc = segment_writer.max_doc(); segment_writer.finalize_with_doc_id_mapping(mapping)?; - let mut index_settings = segment.index().settings().clone(); - index_settings.manual_doc_id_mapping = false; - let mut index = Self::finalize_inner(segment, max_doc, true, index_settings)?; - index.settings_mut().manual_doc_id_mapping = false; - Ok(index) + Self::finalize_inner(segment, max_doc, true, true) } fn finalize_inner( segment: Segment, max_doc: u32, - remapping_required: bool, - index_settings: IndexSettings, + did_remapping: bool, + clear_manual_doc_id_mapping: bool, ) -> crate::Result { let segment: Segment = segment.with_max_doc(max_doc); let segment_meta = segment.meta(); let mut index = segment.index().clone(); + if clear_manual_doc_id_mapping { + index.settings_mut().manual_doc_id_mapping = false; + } - if remapping_required { + if did_remapping { // Untrack the temp docstore file from the segment metadata. segment_meta.untrack_temp_docstore(); } let index_meta = IndexMeta { - index_settings, + index_settings: index.settings().clone(), segments: vec![segment_meta.clone()], schema: index.schema(), opstamp: 0, @@ -90,7 +88,7 @@ impl SingleSegmentIndexWriter { save_metas(&index_meta, index.directory())?; index.directory().sync_directory()?; - if remapping_required { + if did_remapping { // Run the garbage collector to remove the temp docstore file from the directory. let mut living_files = segment_meta.list_files(); living_files.insert(crate::core::META_FILEPATH.to_path_buf());