fork of https://github.com/rust-rocksdb/rust-rocksdb for nextgraph
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
48 lines
1.1 KiB
48 lines
1.1 KiB
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();
|
|
}
|
|
|