Merge branch 'issues/122'

This commit is contained in:
Paul Masurel
2017-04-23 16:14:40 +08:00
3 changed files with 20 additions and 5 deletions

View File

@@ -1,6 +1,6 @@
[package] [package]
name = "tantivy" name = "tantivy"
version = "0.3.0" version = "0.3.1"
authors = ["Paul Masurel <paul.masurel@gmail.com>"] authors = ["Paul Masurel <paul.masurel@gmail.com>"]
build = "build.rs" build = "build.rs"
license = "MIT" license = "MIT"

View File

@@ -418,6 +418,12 @@ impl IndexWriter {
Ok(()) 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 /// Merges a given list of segments
pub fn merge(&mut self, segment_ids: &[SegmentId]) -> impl Future<Item=SegmentMeta, Error=Canceled> { pub fn merge(&mut self, segment_ids: &[SegmentId]) -> impl Future<Item=SegmentMeta, Error=Canceled> {
self.segment_updater.start_merge(segment_ids) self.segment_updater.start_merge(segment_ids)

View File

@@ -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<()> { pub fn commit(&self, opstamp: u64) -> Result<()> {
self.run_async(move |segment_updater| { self.run_async(move |segment_updater| {
let mut index = segment_updater.0.index.clone();
if segment_updater.is_alive() { if segment_updater.is_alive() {
let segment_entries = segment_updater let segment_entries = segment_updater
.purge_deletes(opstamp) .purge_deletes(opstamp)
.expect("Failed purge deletes"); .expect("Failed purge deletes");
segment_updater.0.segment_manager.commit(segment_entries); segment_updater.0.segment_manager.commit(segment_entries);
segment_updater.save_metas(opstamp); segment_updater.save_metas(opstamp);
let living_files = segment_updater.0.segment_manager.list_files(); segment_updater.garbage_collect_files_exec();
index.directory_mut().garbage_collect(living_files);
segment_updater.consider_merge_options(); segment_updater.consider_merge_options();
} }
}).wait() }).wait()