Skip to content

Commit 42d15e0

Browse files
committed
Move MemStore to tests directory
The in-memory metadastore is intended for testing purposes only.
1 parent ff3fe59 commit 42d15e0

2 files changed

Lines changed: 49 additions & 54 deletions

File tree

minikv-core/src/storage/mod.rs

Lines changed: 0 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -42,56 +42,3 @@ pub trait MetadataStore: Send + Sync {
4242
/// Primarily used by `rebuild_all` to regenerate the database from scratch.
4343
fn delete_all(&self) -> Result<(), Error>;
4444
}
45-
46-
/// In-memory `MetadataStore` backed by a `BTreeMap`.
47-
///
48-
/// Useful for unit and integration tests that do not require persistent storage.
49-
#[cfg(debug_assertions)]
50-
pub mod mem {
51-
use super::*;
52-
use std::collections::BTreeMap;
53-
use std::sync::Mutex;
54-
55-
#[derive(Default)]
56-
pub struct MemStore {
57-
inner: Mutex<BTreeMap<Vec<u8>, Vec<u8>>>,
58-
}
59-
60-
impl MetadataStore for MemStore {
61-
fn get(&self, key: &[u8]) -> Result<Option<Vec<u8>>, Error> {
62-
Ok(self.inner.lock().unwrap().get(key).cloned())
63-
}
64-
65-
fn put(&self, key: &[u8], value: &[u8]) -> Result<(), Error> {
66-
self.inner
67-
.lock()
68-
.unwrap()
69-
.insert(key.to_vec(), value.to_vec());
70-
Ok(())
71-
}
72-
73-
fn delete(&self, key: &[u8]) -> Result<(), Error> {
74-
self.inner.lock().unwrap().remove(key);
75-
Ok(())
76-
}
77-
78-
fn scan_prefix(&self, prefix: &[u8]) -> Result<Vec<KeyValuePair>, Error> {
79-
let store = self.inner.lock().unwrap();
80-
Ok(store
81-
.iter()
82-
.filter(|(k, _)| k.starts_with(prefix))
83-
.map(|(k, v)| (k.clone(), v.clone()))
84-
.collect())
85-
}
86-
87-
fn scan_all(&self) -> Result<Vec<KeyValuePair>, Error> {
88-
let store = self.inner.lock().unwrap();
89-
Ok(store.iter().map(|(k, v)| (k.clone(), v.clone())).collect())
90-
}
91-
92-
fn delete_all(&self) -> Result<(), Error> {
93-
self.inner.lock().unwrap().clear();
94-
Ok(())
95-
}
96-
}
97-
}

minikv-core/tests/rebalance.rs

Lines changed: 49 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,18 +8,66 @@
88
//! An in-memory `MemStore` is used as the metadata backend.
99
1010
use dashmap::DashMap;
11+
use minikv_core::Error;
12+
use minikv_core::KeyValuePair;
13+
use minikv_core::MetadataStore;
1114
use minikv_core::locking::KeyLock;
1215
use minikv_core::rebalance::rebalance_key;
1316
use minikv_core::replication::build_volume_client;
1417
use minikv_core::state::AppState;
15-
use minikv_core::storage::mem::MemStore;
1618
use minikv_core::volumes::needs_rebalance;
19+
use std::collections::BTreeMap;
1720
use std::collections::HashMap;
1821
use std::sync::Arc;
22+
use std::sync::Mutex;
1923
use std::time::Duration;
2024
use wiremock::matchers::method;
2125
use wiremock::{Mock, MockServer, ResponseTemplate};
2226

27+
// In-memory `MetadataStore` backed by a `BTreeMap`.
28+
#[derive(Default)]
29+
pub struct MemStore {
30+
inner: Mutex<BTreeMap<Vec<u8>, Vec<u8>>>,
31+
}
32+
33+
impl MetadataStore for MemStore {
34+
fn get(&self, key: &[u8]) -> Result<Option<Vec<u8>>, Error> {
35+
Ok(self.inner.lock().unwrap().get(key).cloned())
36+
}
37+
38+
fn put(&self, key: &[u8], value: &[u8]) -> Result<(), Error> {
39+
self.inner
40+
.lock()
41+
.unwrap()
42+
.insert(key.to_vec(), value.to_vec());
43+
Ok(())
44+
}
45+
46+
fn delete(&self, key: &[u8]) -> Result<(), Error> {
47+
self.inner.lock().unwrap().remove(key);
48+
Ok(())
49+
}
50+
51+
fn scan_prefix(&self, prefix: &[u8]) -> Result<Vec<KeyValuePair>, Error> {
52+
let store = self.inner.lock().unwrap();
53+
Ok(store
54+
.iter()
55+
.filter(|(k, _)| k.starts_with(prefix))
56+
.map(|(k, v)| (k.clone(), v.clone()))
57+
.collect())
58+
}
59+
60+
fn scan_all(&self) -> Result<Vec<KeyValuePair>, Error> {
61+
let store = self.inner.lock().unwrap();
62+
Ok(store.iter().map(|(k, v)| (k.clone(), v.clone())).collect())
63+
}
64+
65+
fn delete_all(&self) -> Result<(), Error> {
66+
self.inner.lock().unwrap().clear();
67+
Ok(())
68+
}
69+
}
70+
2371
/// Build a test `AppState` backed by `MemStore` and pointing at `volumes`.
2472
fn make_state(volumes: Vec<String>) -> Arc<AppState> {
2573
let replicas = volumes.len().min(2);

0 commit comments

Comments
 (0)