diff --git a/src/indexer/index_writer.rs b/src/indexer/index_writer.rs index dde10aeb4..cedaff337 100644 --- a/src/indexer/index_writer.rs +++ b/src/indexer/index_writer.rs @@ -510,10 +510,12 @@ impl IndexWriter { Ok(self.committed_opstamp) } - /// Merges a given list of segments + /// Merges a given list of segments. + /// + /// If all segments are empty no new segment will be created. /// /// `segment_ids` is required to be non-empty. - pub fn merge(&mut self, segment_ids: &[SegmentId]) -> FutureResult<()> { + pub fn merge(&mut self, segment_ids: &[SegmentId]) -> FutureResult> { let merge_operation = self.segment_updater.make_merge_operation(segment_ids); let segment_updater = self.segment_updater.clone(); segment_updater.start_merge(merge_operation) diff --git a/src/indexer/segment_updater.rs b/src/indexer/segment_updater.rs index b1ae5c007..102355e36 100644 --- a/src/indexer/segment_updater.rs +++ b/src/indexer/segment_updater.rs @@ -483,7 +483,10 @@ impl SegmentUpdater { // suggested and the moment when it ended up being executed.) // // `segment_ids` is required to be non-empty. - pub fn start_merge(&self, merge_operation: MergeOperation) -> FutureResult<()> { + pub fn start_merge( + &self, + merge_operation: MergeOperation, + ) -> FutureResult> { assert!( !merge_operation.segment_ids().is_empty(), "Segment_ids cannot be empty." @@ -583,8 +586,11 @@ impl SegmentUpdater { &self, merge_operation: MergeOperation, mut after_merge_segment_entry: Option, - ) -> crate::Result<()> { + ) -> crate::Result> { let segment_updater = self.clone(); + let after_merge_segment_meta = after_merge_segment_entry + .as_ref() + .map(|after_merge_segment_entry| after_merge_segment_entry.meta().clone()); self.schedule_task(move || { info!( "End merge {:?}", @@ -600,7 +606,7 @@ impl SegmentUpdater { let segment = index.segment(after_merge_segment_entry.meta().clone()); if let Err(advance_deletes_err) = advance_deletes( segment, - &mut after_merge_segment_entry, + after_merge_segment_entry, committed_opstamp, ) { error!( @@ -635,7 +641,7 @@ impl SegmentUpdater { Ok(()) }) .wait()?; - Ok(()) + Ok(after_merge_segment_meta) } /// Wait for current merging threads.