Skip to content

Commit 085e63a

Browse files
committed
return new segment meta
1 parent f6f23ba commit 085e63a

File tree

2 files changed

+14
-6
lines changed

2 files changed

+14
-6
lines changed

src/indexer/index_writer.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -510,10 +510,12 @@ impl IndexWriter {
510510
Ok(self.committed_opstamp)
511511
}
512512

513-
/// Merges a given list of segments
513+
/// Merges a given list of segments.
514+
///
515+
/// If all segments are empty no new segment will be created.
514516
///
515517
/// `segment_ids` is required to be non-empty.
516-
pub fn merge(&mut self, segment_ids: &[SegmentId]) -> FutureResult<()> {
518+
pub fn merge(&mut self, segment_ids: &[SegmentId]) -> FutureResult<Option<SegmentMeta>> {
517519
let merge_operation = self.segment_updater.make_merge_operation(segment_ids);
518520
let segment_updater = self.segment_updater.clone();
519521
segment_updater.start_merge(merge_operation)

src/indexer/segment_updater.rs

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -483,7 +483,10 @@ impl SegmentUpdater {
483483
// suggested and the moment when it ended up being executed.)
484484
//
485485
// `segment_ids` is required to be non-empty.
486-
pub fn start_merge(&self, merge_operation: MergeOperation) -> FutureResult<()> {
486+
pub fn start_merge(
487+
&self,
488+
merge_operation: MergeOperation,
489+
) -> FutureResult<Option<SegmentMeta>> {
487490
assert!(
488491
!merge_operation.segment_ids().is_empty(),
489492
"Segment_ids cannot be empty."
@@ -583,8 +586,11 @@ impl SegmentUpdater {
583586
&self,
584587
merge_operation: MergeOperation,
585588
mut after_merge_segment_entry: Option<SegmentEntry>,
586-
) -> crate::Result<()> {
589+
) -> crate::Result<Option<SegmentMeta>> {
587590
let segment_updater = self.clone();
591+
let after_merge_segment_meta = after_merge_segment_entry
592+
.as_ref()
593+
.map(|after_merge_segment_entry| after_merge_segment_entry.meta().clone());
588594
self.schedule_task(move || {
589595
info!(
590596
"End merge {:?}",
@@ -600,7 +606,7 @@ impl SegmentUpdater {
600606
let segment = index.segment(after_merge_segment_entry.meta().clone());
601607
if let Err(advance_deletes_err) = advance_deletes(
602608
segment,
603-
&mut after_merge_segment_entry,
609+
after_merge_segment_entry,
604610
committed_opstamp,
605611
) {
606612
error!(
@@ -635,7 +641,7 @@ impl SegmentUpdater {
635641
Ok(())
636642
})
637643
.wait()?;
638-
Ok(())
644+
Ok(after_merge_segment_meta)
639645
}
640646

641647
/// Wait for current merging threads.

0 commit comments

Comments
 (0)