NOBUG cleanup

This commit is contained in:
Paul Masurel
2017-02-27 09:52:28 +09:00
parent 15b60d72cc
commit ec5fb2eaa9
5 changed files with 39 additions and 11 deletions

View File

@@ -14,41 +14,69 @@ struct DeleteMeta {
#[derive(Clone, Debug, RustcDecodable,RustcEncodable)]
pub struct SegmentMeta {
segment_id: SegmentId,
num_docs: u32,
max_doc: u32,
deletes: Option<DeleteMeta>,
}
impl SegmentMeta {
/// Creates a new segment meta for
/// a segment with no deletes and no documents.
pub fn new(segment_id: SegmentId) -> SegmentMeta {
SegmentMeta {
segment_id: segment_id,
num_docs: 0,
max_doc: 0,
deletes: None,
}
}
/// Returns the segment id.
pub fn id(&self) -> SegmentId {
self.segment_id
}
pub fn num_docs(&self) -> u32 {
self.num_docs
}
/// Returns the number of deleted documents.
pub fn num_deleted_docs(&self) -> u32 {
self.deletes
.as_ref()
.map(|delete_meta| delete_meta.num_deleted_docs)
.unwrap_or(0u32)
}
/// Return the highest doc id + 1
///
/// If there are no deletes, then num_docs = max_docs
/// and all the doc ids contains in this segment
/// are exactly (0..max_doc).
pub fn max_doc(&self) -> u32 {
self.max_doc
}
/// Return the number of documents in the segment.
pub fn num_docs(&self) -> u32 {
self.max_doc() - self.num_deleted_docs()
}
/// Returns the opstamp of the last delete operation
/// taken in account in this segment.
pub fn delete_opstamp(&self) -> Option<u64> {
self.deletes
.as_ref()
.map(|delete_meta| delete_meta.opstamp)
}
/// Returns true iff the segment meta contains
/// delete information.
pub fn has_deletes(&self) -> bool {
self.deletes.is_some()
}
pub fn set_num_docs(&mut self, num_docs: u32) {
self.num_docs = num_docs;
#[doc(hidden)]
pub fn set_max_doc(&mut self, max_doc: u32) {
self.max_doc = max_doc;
}
#[doc(hidden)]
pub fn set_delete_meta(&mut self, num_deleted_docs: u32, opstamp: u64) {
self.deletes = Some(DeleteMeta {
num_deleted_docs: num_deleted_docs,

View File

@@ -33,7 +33,7 @@ fn test_indexing() {
for _ in 0..200 {
let random_val = universe.ind_sample(&mut rng);
if random_val == 0 {
index_writer.commit();
index_writer.commit().expect("Commit failed");
committed_docs.extend(&uncommitted_docs);
uncommitted_docs.clear();
index.load_searchers().unwrap();

View File

@@ -242,7 +242,7 @@ fn index_documents(heap: &mut Heap,
// let segment_entry = advance_deletes(&mut segment, delete_queue, delete_position, )?;
let mut segment_meta = SegmentMeta::new(segment_id);
segment_meta.set_num_docs(num_docs);
segment_meta.set_max_doc(num_docs);
let mut segment_entry = SegmentEntry::new(segment_meta);
segment_entry.set_doc_to_opstamp(DocToOpstampMapping::from(doc_opstamps));

View File

@@ -122,7 +122,7 @@ mod tests {
fn seg_meta(num_docs: u32) -> SegmentMeta {
let mut segment_metas = SegmentMeta::new(SegmentId::generate_random());
segment_metas.set_num_docs(num_docs);
segment_metas.set_max_doc(num_docs);
segment_metas
}

View File

@@ -247,7 +247,7 @@ impl SegmentUpdater {
let num_docs = merger.write(segment_serializer).expect("Serializing merged index failed");
let mut segment_meta = SegmentMeta::new(merged_segment.id());
segment_meta.set_num_docs(num_docs);
segment_meta.set_max_doc(num_docs);
let segment_entry = SegmentEntry::new(segment_meta);
segment_updater_clone