Skip to content

Commit 17db221

Browse files
Fix tests
Signed-off-by: Valerian Saliou <valerian@valeriansaliou.name>
1 parent d988b6b commit 17db221

File tree

5 files changed

+55
-74
lines changed

5 files changed

+55
-74
lines changed

src/store/fst.rs

+7-20
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ use std::time::SystemTime;
2727
use super::generic::{
2828
StoreGeneric, StoreGenericActionBuilder, StoreGenericBuilder, StoreGenericPool,
2929
};
30-
use super::item::StoreItemPart;
3130
use super::keyer::StoreKeyerHasher;
3231
use crate::APP_CONF;
3332

@@ -92,11 +91,8 @@ impl StoreFSTPathMode {
9291
}
9392

9493
impl StoreFSTPool {
95-
pub fn acquire<'a>(
96-
collection: StoreItemPart<'a>,
97-
bucket: StoreItemPart<'a>,
98-
) -> Result<StoreFSTBox, ()> {
99-
let (collection_str, bucket_str) = (collection.as_str(), bucket.as_str());
94+
pub fn acquire<'a, T: Into<&'a str>>(collection: T, bucket: T) -> Result<StoreFSTBox, ()> {
95+
let (collection_str, bucket_str) = (collection.into(), bucket.into());
10096

10197
let pool_key = StoreFSTKey::from_str(collection_str, bucket_str);
10298

@@ -550,10 +546,7 @@ impl StoreFSTActionBuilder {
550546
Self::build(store)
551547
}
552548

553-
pub fn erase<'a>(
554-
collection: StoreItemPart<'a>,
555-
bucket: Option<StoreItemPart<'a>>,
556-
) -> Result<u32, ()> {
549+
pub fn erase<'a, T: Into<&'a str>>(collection: T, bucket: Option<T>) -> Result<u32, ()> {
557550
Self::dispatch_erase(
558551
"fst",
559552
collection,
@@ -569,10 +562,9 @@ impl StoreFSTActionBuilder {
569562
}
570563

571564
impl StoreGenericActionBuilder for StoreFSTActionBuilder {
572-
fn proceed_erase_collection<'a>(collection: StoreItemPart<'a>) -> Result<u32, ()> {
565+
fn proceed_erase_collection(collection_str: &str) -> Result<u32, ()> {
573566
let path_mode = StoreFSTPathMode::Permanent;
574567

575-
let collection_str = collection.as_str();
576568
let collection_atom = StoreKeyerHasher::to_compact(collection_str);
577569
let collection_path = StoreFSTBuilder::path(path_mode, collection_atom, None);
578570

@@ -643,12 +635,7 @@ impl StoreGenericActionBuilder for StoreFSTActionBuilder {
643635
}
644636
}
645637

646-
fn proceed_erase_bucket<'a>(
647-
collection: StoreItemPart<'a>,
648-
bucket: StoreItemPart<'a>,
649-
) -> Result<u32, ()> {
650-
let (collection_str, bucket_str) = (collection.as_str(), bucket.as_str());
651-
638+
fn proceed_erase_bucket(collection_str: &str, bucket_str: &str) -> Result<u32, ()> {
652639
debug!(
653640
"sub-erase on fst bucket: {} for collection: {}",
654641
bucket_str, collection_str
@@ -823,12 +810,12 @@ impl StoreFSTAction {
823810
}
824811

825812
impl StoreFSTMisc {
826-
pub fn count_collection_buckets<'a>(collection: StoreItemPart<'a>) -> Result<usize, ()> {
813+
pub fn count_collection_buckets<'a, T: Into<&'a str>>(collection: T) -> Result<usize, ()> {
827814
let mut count = 0;
828815

829816
let path_mode = StoreFSTPathMode::Permanent;
830817

831-
let collection_atom = StoreKeyerHasher::to_compact(collection.as_str());
818+
let collection_atom = StoreKeyerHasher::to_compact(collection.into());
832819
let collection_path = StoreFSTBuilder::path(path_mode, collection_atom, None);
833820

834821
if collection_path.exists() == true {

src/store/generic.rs

+10-17
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,6 @@ use std::mem;
1212
use std::sync::{Arc, Mutex, RwLock};
1313
use std::time::SystemTime;
1414

15-
use super::item::StoreItemPart;
16-
1715
pub trait StoreGenericKey {}
1816

1917
pub trait StoreGeneric {
@@ -130,35 +128,30 @@ pub trait StoreGenericBuilder<K, S> {
130128
}
131129

132130
pub trait StoreGenericActionBuilder {
133-
fn proceed_erase_bucket<'a>(
134-
collection: StoreItemPart<'a>,
135-
bucket: StoreItemPart<'a>,
136-
) -> Result<u32, ()>;
131+
fn proceed_erase_collection(collection_str: &str) -> Result<u32, ()>;
137132

138-
fn proceed_erase_collection<'a>(collection: StoreItemPart<'a>) -> Result<u32, ()>;
133+
fn proceed_erase_bucket(collection_str: &str, bucket_str: &str) -> Result<u32, ()>;
139134

140-
fn dispatch_erase<'a>(
135+
fn dispatch_erase<'a, T: Into<&'a str>>(
141136
kind: &str,
142-
collection: StoreItemPart<'a>,
143-
bucket: Option<StoreItemPart<'a>>,
137+
collection: T,
138+
bucket: Option<T>,
144139
access_lock: &Arc<RwLock<bool>>,
145140
write_lock: &Arc<Mutex<bool>>,
146141
) -> Result<u32, ()> {
147-
info!(
148-
"{} erase requested on collection: {}",
149-
kind,
150-
collection.as_str()
151-
);
142+
let collection_str = collection.into();
143+
144+
info!("{} erase requested on collection: {}", kind, collection_str);
152145

153146
// Acquire write + access locks, and reference it in context
154147
// Notice: write lock prevents store to be acquired from any context; while access lock \
155148
// lets the erasure process wait that any thread using the store is done with work.
156149
let (_access, _write) = (access_lock.write().unwrap(), write_lock.lock().unwrap());
157150

158151
if let Some(bucket) = bucket {
159-
Self::proceed_erase_bucket(collection, bucket)
152+
Self::proceed_erase_bucket(collection_str, bucket.into())
160153
} else {
161-
Self::proceed_erase_collection(collection)
154+
Self::proceed_erase_collection(collection_str)
162155
}
163156
}
164157
}

src/store/item.rs

+6
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,12 @@ impl<'a> StoreItemPart<'a> {
4444
}
4545
}
4646

47+
impl<'a> Into<&'a str> for StoreItemPart<'a> {
48+
fn into(self) -> &'a str {
49+
self.as_str()
50+
}
51+
}
52+
4753
impl StoreItemBuilder {
4854
pub fn from_depth_1<'a>(collection: &'a str) -> Result<StoreItem<'a>, StoreItemError> {
4955
// Validate & box collection

src/store/keyer.rs

+24-23
Original file line numberDiff line numberDiff line change
@@ -161,48 +161,49 @@ mod tests {
161161
#[test]
162162
fn it_keys_meta_to_value() {
163163
assert_eq!(
164-
StoreKeyerBuilder::meta_to_value(&StoreMetaKey::IIDIncr).as_bytes(),
165-
[0, 0, 0, 0, 0]
164+
StoreKeyerBuilder::meta_to_value("bucket:1", &StoreMetaKey::IIDIncr).as_bytes(),
165+
[0, 108, 244, 29, 93, 0, 0, 0, 0]
166166
);
167167
}
168168

169169
#[test]
170170
fn it_keys_term_to_iids() {
171171
assert_eq!(
172-
StoreKeyerBuilder::term_to_iids(772137347).as_bytes(),
173-
[1, 131, 225, 5, 46]
172+
StoreKeyerBuilder::term_to_iids("bucket:2", 772137347).as_bytes(),
173+
[1, 50, 220, 166, 65, 131, 225, 5, 46]
174174
);
175175
assert_eq!(
176-
StoreKeyerBuilder::term_to_iids(3582484684).as_bytes(),
177-
[1, 204, 96, 136, 213]
176+
StoreKeyerBuilder::term_to_iids("bucket:2", 3582484684).as_bytes(),
177+
[1, 50, 220, 166, 65, 204, 96, 136, 213]
178178
);
179179
}
180180

181181
#[test]
182182
fn it_keys_oid_to_iid() {
183183
assert_eq!(
184-
StoreKeyerBuilder::oid_to_iid(&"conversation:6501e83a".to_string()).as_bytes(),
185-
[2, 31, 156, 118, 213]
184+
StoreKeyerBuilder::oid_to_iid("bucket:3", &"conversation:6501e83a".to_string())
185+
.as_bytes(),
186+
[2, 171, 194, 213, 57, 31, 156, 118, 213]
186187
);
187188
}
188189

189190
#[test]
190191
fn it_keys_iid_to_oid() {
191192
assert_eq!(
192-
StoreKeyerBuilder::iid_to_oid(10292198).as_bytes(),
193-
[3, 230, 11, 157, 0]
193+
StoreKeyerBuilder::iid_to_oid("bucket:4", 10292198).as_bytes(),
194+
[3, 105, 12, 54, 147, 230, 11, 157, 0]
194195
);
195196
}
196197

197198
#[test]
198199
fn it_keys_iid_to_terms() {
199200
assert_eq!(
200-
StoreKeyerBuilder::iid_to_terms(1).as_bytes(),
201-
[4, 1, 0, 0, 0]
201+
StoreKeyerBuilder::iid_to_terms("bucket:5", 1).as_bytes(),
202+
[4, 137, 142, 73, 67, 1, 0, 0, 0]
202203
);
203204
assert_eq!(
204-
StoreKeyerBuilder::iid_to_terms(20).as_bytes(),
205-
[4, 20, 0, 0, 0]
205+
StoreKeyerBuilder::iid_to_terms("bucket:5", 20).as_bytes(),
206+
[4, 137, 142, 73, 67, 20, 0, 0, 0]
206207
);
207208
}
208209

@@ -215,15 +216,15 @@ mod tests {
215216
#[test]
216217
fn it_formats_key() {
217218
assert_eq!(
218-
&format!("{}", StoreKeyerBuilder::term_to_iids(772137347)),
219-
"'1:2e05e183' [1, 131, 225, 5, 46]"
219+
&format!("{}", StoreKeyerBuilder::term_to_iids("bucket:6", 72137347)),
220+
"'1:71198b49:44cba83' [1, 73, 139, 25, 113, 131, 186, 76, 4]"
220221
);
221222
assert_eq!(
222223
&format!(
223224
"{}",
224-
StoreKeyerBuilder::meta_to_value(&StoreMetaKey::IIDIncr)
225+
StoreKeyerBuilder::meta_to_value("bucket:6", &StoreMetaKey::IIDIncr)
225226
),
226-
"'0:0' [0, 0, 0, 0, 0]"
227+
"'0:71198b49:0' [0, 73, 139, 25, 113, 0, 0, 0, 0]"
227228
);
228229
}
229230
}
@@ -251,28 +252,28 @@ mod benches {
251252

252253
#[bench]
253254
fn bench_key_meta_to_value(b: &mut Bencher) {
254-
b.iter(|| StoreKeyerBuilder::meta_to_value(&StoreMetaKey::IIDIncr));
255+
b.iter(|| StoreKeyerBuilder::meta_to_value("bucket:bench:1", &StoreMetaKey::IIDIncr));
255256
}
256257

257258
#[bench]
258259
fn bench_key_term_to_iids(b: &mut Bencher) {
259-
b.iter(|| StoreKeyerBuilder::term_to_iids(772137347));
260+
b.iter(|| StoreKeyerBuilder::term_to_iids("bucket:bench:2", 772137347));
260261
}
261262

262263
#[bench]
263264
fn bench_key_oid_to_iid(b: &mut Bencher) {
264265
let key = "conversation:6501e83a".to_string();
265266

266-
b.iter(|| StoreKeyerBuilder::oid_to_iid(&key));
267+
b.iter(|| StoreKeyerBuilder::oid_to_iid("bucket:bench:3", &key));
267268
}
268269

269270
#[bench]
270271
fn bench_key_iid_to_oid(b: &mut Bencher) {
271-
b.iter(|| StoreKeyerBuilder::iid_to_oid(10292198));
272+
b.iter(|| StoreKeyerBuilder::iid_to_oid("bucket:bench:4", 10292198));
272273
}
273274

274275
#[bench]
275276
fn bench_key_iid_to_terms(b: &mut Bencher) {
276-
b.iter(|| StoreKeyerBuilder::iid_to_terms(1));
277+
b.iter(|| StoreKeyerBuilder::iid_to_terms("bucket:bench:5", 1));
277278
}
278279
}

src/store/kv.rs

+8-14
Original file line numberDiff line numberDiff line change
@@ -63,11 +63,11 @@ lazy_static! {
6363
}
6464

6565
impl StoreKVPool {
66-
pub fn acquire<'a>(
66+
pub fn acquire<'a, T: Into<&'a str>>(
6767
mode: StoreKVAcquireMode,
68-
collection: StoreItemPart<'a>,
68+
collection: T,
6969
) -> Result<Option<StoreKVBox>, ()> {
70-
let collection_str = collection.as_str();
70+
let collection_str = collection.into();
7171
let pool_key = StoreKVKey::from_str(collection_str);
7272

7373
// Acquire general lock, and reference it in context
@@ -206,10 +206,7 @@ impl StoreKVActionBuilder {
206206
Self::build(bucket, store)
207207
}
208208

209-
pub fn erase<'a>(
210-
collection: StoreItemPart<'a>,
211-
bucket: Option<StoreItemPart<'a>>,
212-
) -> Result<u32, ()> {
209+
pub fn erase<'a, T: Into<&'a str>>(collection: T, bucket: Option<T>) -> Result<u32, ()> {
213210
Self::dispatch_erase(
214211
"kv",
215212
collection,
@@ -228,8 +225,7 @@ impl StoreKVActionBuilder {
228225
}
229226

230227
impl StoreGenericActionBuilder for StoreKVActionBuilder {
231-
fn proceed_erase_collection<'a>(collection: StoreItemPart<'a>) -> Result<u32, ()> {
232-
let collection_str = collection.as_str();
228+
fn proceed_erase_collection(collection_str: &str) -> Result<u32, ()> {
233229
let collection_atom = StoreKeyerHasher::to_compact(collection_str);
234230
let collection_path = StoreKVBuilder::path(collection_atom);
235231

@@ -268,10 +264,7 @@ impl StoreGenericActionBuilder for StoreKVActionBuilder {
268264
}
269265
}
270266

271-
fn proceed_erase_bucket<'a>(
272-
_collection: StoreItemPart<'a>,
273-
_bucket: StoreItemPart<'a>,
274-
) -> Result<u32, ()> {
267+
fn proceed_erase_bucket(_collection: &str, _bucket: &str) -> Result<u32, ()> {
275268
// This one is not implemented, as we need to acquire the collection; which would cause \
276269
// a party-killer dead-lock.
277270
Err(())
@@ -899,7 +892,8 @@ mod tests {
899892
#[test]
900893
fn it_proceeds_actions() {
901894
let store = StoreKVPool::acquire(StoreKVAcquireMode::Any, "c:test:3").unwrap();
902-
let action = StoreKVActionBuilder::access(bucket, store);
895+
let action =
896+
StoreKVActionBuilder::access(StoreItemPart::from_str("b:test:3").unwrap(), store);
903897

904898
assert!(action.get_meta_to_value(StoreMetaKey::IIDIncr).is_ok());
905899
assert!(action

0 commit comments

Comments
 (0)