mirror of
https://github.com/quickwit-oss/tantivy.git
synced 2026-05-30 07:00:41 +00:00
Merger returns a SegmentMeta
This commit is contained in:
@@ -352,7 +352,7 @@ impl IndexWriter {
|
||||
}
|
||||
|
||||
/// Merges a given list of segments
|
||||
pub fn merge(&mut self, segment_ids: &[SegmentId]) -> impl Future<Item=SegmentEntry, Error=Canceled> {
|
||||
pub fn merge(&mut self, segment_ids: &[SegmentId]) -> impl Future<Item=SegmentMeta, Error=Canceled> {
|
||||
self.segment_updater.start_merge(segment_ids)
|
||||
}
|
||||
|
||||
|
||||
@@ -175,9 +175,10 @@ impl SegmentManager {
|
||||
registers_lock.uncommitted.add_segment_entry(segment_entry);
|
||||
}
|
||||
|
||||
pub fn end_merge(&self, merged_segment_metas: &[SegmentMeta], merged_segment_entry: SegmentEntry) {
|
||||
pub fn end_merge(&self, merged_segment_metas: &[SegmentMeta], merged_segment_meta: SegmentMeta) {
|
||||
let mut registers_lock = self.write();
|
||||
let merged_segment_ids: Vec<SegmentId> = merged_segment_metas.iter().map(|meta| meta.id()).collect();
|
||||
let merged_segment_entry = SegmentEntry::new(merged_segment_meta);
|
||||
if registers_lock.uncommitted.contains_all(&merged_segment_ids) {
|
||||
for segment_id in &merged_segment_ids {
|
||||
registers_lock.uncommitted.remove_segment(segment_id);
|
||||
|
||||
@@ -97,7 +97,7 @@ struct InnerSegmentUpdater {
|
||||
segment_manager: SegmentManager,
|
||||
merge_policy: RwLock<Box<MergePolicy>>,
|
||||
merging_thread_id: AtomicUsize,
|
||||
merging_threads: RwLock<HashMap<usize, JoinHandle<Result<SegmentEntry>>>>,
|
||||
merging_threads: RwLock<HashMap<usize, JoinHandle<Result<()>>>>,
|
||||
generation: AtomicUsize,
|
||||
delete_queue: DeleteQueue,
|
||||
}
|
||||
@@ -202,7 +202,7 @@ impl SegmentUpdater {
|
||||
}
|
||||
|
||||
|
||||
pub fn start_merge(&self, segment_ids: &[SegmentId]) -> impl Future<Item=SegmentEntry, Error=Canceled> {
|
||||
pub fn start_merge(&self, segment_ids: &[SegmentId]) -> impl Future<Item=SegmentMeta, Error=Canceled> {
|
||||
|
||||
self.0.segment_manager.start_merge(segment_ids);
|
||||
let segment_updater_clone = self.clone();
|
||||
@@ -263,14 +263,13 @@ impl SegmentUpdater {
|
||||
let mut segment_meta = SegmentMeta::new(merged_segment.id());
|
||||
segment_meta.set_max_doc(num_docs);
|
||||
|
||||
let segment_entry = SegmentEntry::new(segment_meta);
|
||||
segment_updater_clone
|
||||
.end_merge(segment_metas.clone(), segment_entry.clone())
|
||||
.end_merge(segment_metas.clone(), segment_meta.clone())
|
||||
.wait()
|
||||
.unwrap();
|
||||
merging_future_send.complete(segment_entry.clone());
|
||||
merging_future_send.complete(segment_meta);
|
||||
segment_updater_clone.0.merging_threads.write().unwrap().remove(&merging_thread_id);
|
||||
Ok(segment_entry)
|
||||
Ok(())
|
||||
});
|
||||
self.0.merging_threads.write().unwrap().insert(merging_thread_id, merging_join_handle);
|
||||
merging_future_recv
|
||||
@@ -293,10 +292,10 @@ impl SegmentUpdater {
|
||||
|
||||
fn end_merge(&self,
|
||||
merged_segment_metas: Vec<SegmentMeta>,
|
||||
resulting_segment_entry: SegmentEntry) -> impl Future<Item=(), Error=Error> {
|
||||
segment_meta: SegmentMeta) -> impl Future<Item=(), Error=Error> {
|
||||
|
||||
self.run_async(move |segment_updater| {
|
||||
segment_updater.0.segment_manager.end_merge(&merged_segment_metas, resulting_segment_entry);
|
||||
segment_updater.0.segment_manager.end_merge(&merged_segment_metas, segment_meta);
|
||||
let mut directory = segment_updater.0.index.directory().box_clone();
|
||||
let segment_metas = segment_updater.0.segment_manager.committed_segment_metas();
|
||||
save_metas(
|
||||
@@ -347,7 +346,7 @@ mod tests {
|
||||
index_writer.set_merge_policy(box MergeWheneverPossible);
|
||||
|
||||
{
|
||||
for i in 0..100 {
|
||||
for _ in 0..100 {
|
||||
index_writer.add_document(doc!(text_field=>"a"));
|
||||
index_writer.add_document(doc!(text_field=>"b"));
|
||||
}
|
||||
@@ -355,7 +354,7 @@ mod tests {
|
||||
}
|
||||
|
||||
{
|
||||
for i in 0..100 {
|
||||
for _ in 0..100 {
|
||||
index_writer.add_document(doc!(text_field=>"c"));
|
||||
index_writer.add_document(doc!(text_field=>"d"));
|
||||
}
|
||||
@@ -374,7 +373,7 @@ mod tests {
|
||||
assert!(index_writer.commit().is_ok());
|
||||
}
|
||||
|
||||
index.load_searchers();
|
||||
index.load_searchers().unwrap();
|
||||
assert_eq!(index.searcher().segment_readers().len(), 3);
|
||||
assert_eq!(index.searcher().num_docs(), 302);
|
||||
|
||||
@@ -383,7 +382,7 @@ mod tests {
|
||||
.expect("waiting for merging threads");
|
||||
}
|
||||
|
||||
index.load_searchers();
|
||||
index.load_searchers().unwrap();
|
||||
assert_eq!(index.searcher().segment_readers().len(), 2);
|
||||
assert_eq!(index.searcher().num_docs(), 302);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user