commit
682b1c7ca8
@ -1,3 +1,4 @@ |
|||||||
extern crate rocksdb; |
extern crate rocksdb; |
||||||
|
|
||||||
mod test_iterator; |
mod test_iterator; |
||||||
|
mod test_multithreaded; |
||||||
|
@ -0,0 +1,48 @@ |
|||||||
|
use rocksdb::{Options, RocksDB, Writable, Direction, RocksDBResult}; |
||||||
|
use std::thread::{self, Builder}; |
||||||
|
use std::sync::Arc; |
||||||
|
|
||||||
|
const N: usize = 1000_000; |
||||||
|
|
||||||
|
#[test] |
||||||
|
pub fn test_multithreaded() { |
||||||
|
let path = "_rust_rocksdb_multithreadtest"; |
||||||
|
let db = RocksDB::open_default(path).unwrap(); |
||||||
|
let db = Arc::new(db); |
||||||
|
|
||||||
|
db.put(b"key", b"value1"); |
||||||
|
|
||||||
|
let db1 = db.clone(); |
||||||
|
let j1 = thread::spawn(move|| { |
||||||
|
for i in 1..N { |
||||||
|
db1.put(b"key", b"value1"); |
||||||
|
} |
||||||
|
}); |
||||||
|
|
||||||
|
let db2 = db.clone(); |
||||||
|
let j2 = thread::spawn(move|| { |
||||||
|
for i in 1..N { |
||||||
|
db2.put(b"key", b"value2"); |
||||||
|
} |
||||||
|
}); |
||||||
|
|
||||||
|
let db3 = db.clone(); |
||||||
|
let j3 = thread::spawn(move|| { |
||||||
|
for i in 1..N { |
||||||
|
match db3.get(b"key") { |
||||||
|
RocksDBResult::Some(v) => { |
||||||
|
if &v[..] != b"value1" && &v[..] != b"value2" { |
||||||
|
assert!(false); |
||||||
|
} |
||||||
|
} |
||||||
|
_ => { |
||||||
|
assert!(false); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
}); |
||||||
|
|
||||||
|
j1.join(); |
||||||
|
j2.join(); |
||||||
|
j3.join(); |
||||||
|
} |
Loading…
Reference in new issue