diff --git a/src/core/index.rs b/src/core/index.rs index 227190594..50d184df2 100644 --- a/src/core/index.rs +++ b/src/core/index.rs @@ -216,8 +216,22 @@ impl Index { Index::open(mmap_directory) } - pub(crate) fn inventory(&self) -> &SegmentMetaInventory { - &self.inventory + /// Returns the list of the segment metas tracked by the index. + /// + /// Such segments can of course be part of the index, + /// but also they could be segments being currently built or in the middle of a merge + /// operation. + pub fn list_all_segment_metas(&self) -> Vec { + self.inventory.all() + } + + /// Creates a new segment_meta (Advanced user only). + /// + /// As long as the `SegmentMeta` lives, the files associated with the + /// `SegmentMeta` are guaranteed to not be garbage collected, regardless of + /// whether the segment is recorded as part of the index or not. + pub fn new_segment_meta(&self, segment_id: SegmentId, max_doc: u32) -> SegmentMeta { + self.inventory.new_segment_meta(segment_id, max_doc) } /// Open the index using the provided directory diff --git a/src/core/index_meta.rs b/src/core/index_meta.rs index b6f54774c..a1be67fee 100644 --- a/src/core/index_meta.rs +++ b/src/core/index_meta.rs @@ -30,7 +30,6 @@ impl SegmentMetaInventory { .collect::>() } - #[doc(hidden)] pub fn new_segment_meta(&self, segment_id: SegmentId, max_doc: u32) -> SegmentMeta { let inner = InnerSegmentMeta { segment_id, diff --git a/src/indexer/index_writer.rs b/src/indexer/index_writer.rs index bfbd1bbc0..917b90fab 100644 --- a/src/indexer/index_writer.rs +++ b/src/indexer/index_writer.rs @@ -209,10 +209,7 @@ fn index_documents( assert!(num_docs > 0); let doc_opstamps: Vec = segment_writer.finalize()?; - let segment_meta = segment - .index() - .inventory() - .new_segment_meta(segment_id, num_docs); + let segment_meta = segment.index().new_segment_meta(segment_id, num_docs); let last_docstamp: Opstamp = *(doc_opstamps.last().unwrap()); diff --git a/src/indexer/segment_updater.rs b/src/indexer/segment_updater.rs index 33f5c03b5..0415592a9 100644 --- a/src/indexer/segment_updater.rs +++ b/src/indexer/segment_updater.rs @@ -126,9 +126,7 @@ fn perform_merge( let num_docs = merger.write(segment_serializer)?; - let segment_meta = index - .inventory() - .new_segment_meta(merged_segment.id(), num_docs); + let segment_meta = index.new_segment_meta(merged_segment.id(), num_docs); let after_merge_segment_entry = SegmentEntry::new(segment_meta.clone(), delete_cursor, None); Ok(after_merge_segment_entry) @@ -282,7 +280,7 @@ impl SegmentUpdater { fn list_files(&self) -> HashSet { let mut files = HashSet::new(); files.insert(META_FILEPATH.to_path_buf()); - for segment_meta in self.0.index.inventory().all() { + for segment_meta in self.0.index.list_all_segment_metas() { files.extend(segment_meta.list_files()); } files