use lock_db::prelude::*;
fn run_transaction(lm: &LockManager, txn: TxnId) -> usize {
lm.try_acquire(txn, ResourceId::new(10), LockMode::Shared)
.expect("row 10 free");
lm.try_acquire(txn, ResourceId::new(11), LockMode::Shared)
.expect("row 11 free");
lm.try_acquire(txn, ResourceId::new(12), LockMode::Exclusive)
.expect("row 12 free");
lm.release_all(txn)
}
fn main() {
let lm = LockManager::new();
let txn = TxnId::new(1);
let released = run_transaction(&lm, txn);
println!(
"transaction {} committed, released {released} locks",
txn.get()
);
assert_eq!(released, 3);
for id in [10, 11, 12] {
let res = ResourceId::new(id);
assert_eq!(lm.holder_count(res), 0);
lm.try_acquire(TxnId::new(2), res, LockMode::Exclusive)
.expect("row free after commit");
}
println!("all rows lockable again after commit");
}