From 76046a754bd19a6e8442362b179bbfdf367a9ef6 Mon Sep 17 00:00:00 2001 From: Paul Masurel Date: Mon, 26 Sep 2016 10:04:10 +0900 Subject: [PATCH] bug/4 Test are working with autoincrement segment id --- src/core/segment_id.rs | 29 ++++++++++++++++++++++++++++- src/indexer/segment_register.rs | 1 + 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/src/core/segment_id.rs b/src/core/segment_id.rs index ad9f76ccb..06c26c6a0 100644 --- a/src/core/segment_id.rs +++ b/src/core/segment_id.rs @@ -6,12 +6,39 @@ use std::path::PathBuf; use std::cmp::{Ordering, Ord}; +#[cfg(test)] +use std::sync::atomic; + #[derive(Clone, Copy, PartialEq, Eq, Hash)] pub struct SegmentId(Uuid); + +#[cfg(test)] +lazy_static! { + static ref AUTO_INC_COUNTER: atomic::AtomicUsize = atomic::AtomicUsize::default(); + static ref EMPTY_ARR: [u8; 8] = [0u8; 8]; +} + + +// During tests, we generate the segment id in a autoincrement manner +// for consistency of segment id between run. +// +// The order of the test execution is not guaranteed, but the order +// of segments within a single test is guaranteed. +#[cfg(test)] +fn create_uuid() -> Uuid { + let new_auto_inc_id = (*AUTO_INC_COUNTER).fetch_add(1, atomic::Ordering::Release); + Uuid::from_fields(new_auto_inc_id as u32, 0, 0, &*EMPTY_ARR) +} + +#[cfg(not(test))] +fn create_uuid() -> Uuid { + Uuid::new_v4() +} + impl SegmentId { pub fn generate_random() -> SegmentId { - SegmentId(Uuid::new_v4()) + SegmentId(create_uuid()) } pub fn uuid_string(&self,) -> String { diff --git a/src/indexer/segment_register.rs b/src/indexer/segment_register.rs index e29f2217b..ab6216aa6 100644 --- a/src/indexer/segment_register.rs +++ b/src/indexer/segment_register.rs @@ -64,6 +64,7 @@ impl SegmentRegister { Ok(segment_ids) } + #[cfg(test)] pub fn segment_entry(&self, segment_id: &SegmentId) -> Option { self.segment_states .read()