From b185df2b22d0d3de273176c2238ea4def02640c7 Mon Sep 17 00:00:00 2001 From: Evance Souamoro Date: Tue, 6 Apr 2021 11:48:51 +0000 Subject: [PATCH] added a scratched of implementation but still need to craft one detail and write test to validate --- src/indexer/segment_updater.rs | 32 ++++++++++++++++++-------------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/src/indexer/segment_updater.rs b/src/indexer/segment_updater.rs index 5f62fde96..b36454c3b 100644 --- a/src/indexer/segment_updater.rs +++ b/src/indexer/segment_updater.rs @@ -154,9 +154,10 @@ pub fn merge_segments(indices: &[Index], output_directory: PathBuf) -> crate::Re let mut segments: Vec = vec![]; for index in indices { segments.extend( - index.searchable_segments()? + index + .searchable_segments()? .iter() - .map(|segment| merged_index.segment(segment.meta().clone())) + .map(|segment| merged_index.segment(segment.meta().clone())), ); } @@ -169,7 +170,8 @@ pub fn merge_segments(indices: &[Index], output_directory: PathBuf) -> crate::Re let mut segment_metas: Vec = segments .iter() - .map(|segment| segment.meta().clone()).collect(); + .map(|segment| segment.meta().clone()) + .collect(); segment_metas.push(segment_meta); let opstamp = 0u64; //? should be set @@ -187,20 +189,22 @@ pub fn merge_segments(indices: &[Index], output_directory: PathBuf) -> crate::Re } fn is_same_schema(schemas: &[Schema]) -> crate::Result { - let first = schemas - .first() - .ok_or(crate::TantivyError::InvalidArgument("Empty schema set provided".to_string()))?; - + let first = schemas.first().ok_or(crate::TantivyError::InvalidArgument( + "Empty schema set provided".to_string(), + ))?; + let first_json = serde_json::to_string(&first)?; - let is_not_same = schemas.iter().skip(1).any(|next| { - serde_json::to_string(next) - .map_or(true, |next_json| next_json != first_json) - }); + let is_not_same = schemas + .iter() + .skip(1) + .any(|next| serde_json::to_string(next).map_or(true, |next_json| next_json != first_json)); match is_not_same { - true => Err(crate::TantivyError::InvalidArgument("Attempt to merge different schema indices".to_string())), - false => Ok(first.clone()) + true => Err(crate::TantivyError::InvalidArgument( + "Attempt to merge different schema indices".to_string(), + )), + false => Ok(first.clone()), } } @@ -604,10 +608,10 @@ impl SegmentUpdater { #[cfg(test)] mod tests { + use super::is_same_schema; use crate::indexer::merge_policy::tests::MergeWheneverPossible; use crate::schema::*; use crate::Index; - use super::is_same_schema; #[test] fn test_delete_during_merge() {