From 3e68b61d8f5ef84c377b65274142da5986cc078b Mon Sep 17 00:00:00 2001 From: Paul Masurel Date: Sun, 23 Apr 2017 15:51:06 +0800 Subject: [PATCH] issue/122 Adds a garbage collect method --- src/indexer/index_writer.rs | 6 ++++++ src/indexer/segment_updater.rs | 17 +++++++++++++---- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/indexer/index_writer.rs b/src/indexer/index_writer.rs index 48d76a576..71b182a42 100644 --- a/src/indexer/index_writer.rs +++ b/src/indexer/index_writer.rs @@ -418,6 +418,12 @@ impl IndexWriter { Ok(()) } + /// Detects and removes the files that + /// are not used by the index anymore. + pub fn garbage_collect_files(&mut self) -> Result<()> { + self.segment_updater.garbage_collect_files() + } + /// Merges a given list of segments pub fn merge(&mut self, segment_ids: &[SegmentId]) -> impl Future { self.segment_updater.start_merge(segment_ids) diff --git a/src/indexer/segment_updater.rs b/src/indexer/segment_updater.rs index 4ac7ddea7..e7c8ed3bc 100644 --- a/src/indexer/segment_updater.rs +++ b/src/indexer/segment_updater.rs @@ -264,18 +264,27 @@ impl SegmentUpdater { } } + pub fn garbage_collect_files(&self) -> Result<()> { + self.run_async(move |segment_updater| { + segment_updater.garbage_collect_files_exec(); + }).wait() + } + + fn garbage_collect_files_exec(&self) { + let living_files = self.0.segment_manager.list_files(); + let mut index = self.0.index.clone(); + index.directory_mut().garbage_collect(living_files); + } + pub fn commit(&self, opstamp: u64) -> Result<()> { self.run_async(move |segment_updater| { - let mut index = segment_updater.0.index.clone(); - if segment_updater.is_alive() { let segment_entries = segment_updater .purge_deletes(opstamp) .expect("Failed purge deletes"); segment_updater.0.segment_manager.commit(segment_entries); segment_updater.save_metas(opstamp); - let living_files = segment_updater.0.segment_manager.list_files(); - index.directory_mut().garbage_collect(living_files); + segment_updater.garbage_collect_files_exec(); segment_updater.consider_merge_options(); } }).wait()