use rocksdb::{DB, Options, Writable}; use std::thread; use std::sync::Arc; const N: usize = 100_000; #[test] pub fn test_multithreaded() { let path = "_rust_rocksdb_multithreadtest"; { let db = DB::open_default(path).unwrap(); let db = Arc::new(db); db.put(b"key", b"value1").unwrap(); let db1 = db.clone(); let j1 = thread::spawn(move || { for _ in 1..N { db1.put(b"key", b"value1").unwrap(); } }); let db2 = db.clone(); let j2 = thread::spawn(move || { for _ in 1..N { db2.put(b"key", b"value2").unwrap(); } }); let db3 = db.clone(); let j3 = thread::spawn(move || { for _ in 1..N { match db3.get(b"key") { Ok(Some(v)) => { if &v[..] != b"value1" && &v[..] != b"value2" { assert!(false); } } _ => { assert!(false); } } } }); j1.join().unwrap(); j2.join().unwrap(); j3.join().unwrap(); } assert!(DB::destroy(&Options::default(), path).is_ok()); }