Example of concurrency bug

This commit is contained in:
Aode (Lion) 2022-03-14 15:51:55 -05:00
parent 3f9f0904c2
commit 92d83d4c97

30
examples/conflict.rs Normal file
View file

@ -0,0 +1,30 @@
use persy_trees::{Db, Tree};
fn main() -> Result<(), Box<dyn std::error::Error>> {
let db = Db::open("./db.persy")?;
let tree: Tree<String, u8> = db.open_tree("u8-tree")?;
let mut tx = tree.transaction()?;
tx.insert("value".into(), 5)?;
tx.commit()?;
let mut tx1 = tree.transaction()?;
let mut tx2 = tree.transaction()?;
let value1 = tx1.get(&"value".into())?.expect("Value exists");
let value2 = tx2.get(&"value".into())?.expect("Value exists");
tx1.insert("value".into(), value1 + 1)?;
tx2.insert("value".into(), value2 - 1)?;
tx1.commit()?;
tx2.commit()?;
let mut tx = tree.transaction()?;
let value = tx.get(&"value".into())?.expect("Value exists");
println!("value: {}", value);
Ok(())
}