commit and rollback directly on session

main
Ziyang Hu 2 years ago
parent e70ed6d330
commit c5ae62cea7

@ -152,6 +152,14 @@ impl<'a> Session<'a> {
self.handle.write().map_err(|_| Poisoned)?.status = SessionStatus::Running; self.handle.write().map_err(|_| Poisoned)?.status = SessionStatus::Running;
Ok(()) Ok(())
} }
pub fn commit(&mut self) -> Result<()> {
self.txn.commit()?;
Ok(())
}
pub fn rollback(&mut self) -> Result<()> {
self.txn.rollback()?;
Ok(())
}
pub fn finish_work(&mut self) -> Result<()> { pub fn finish_work(&mut self) -> Result<()> {
self.handle.write().map_err(|_| Poisoned)?.status = SessionStatus::Completed; self.handle.write().map_err(|_| Poisoned)?.status = SessionStatus::Completed;
Ok(()) Ok(())
@ -228,7 +236,7 @@ mod tests {
assert!(engine2.is_err()); assert!(engine2.is_err());
println!("create OK"); println!("create OK");
} }
let engine2 = Engine::new(p2.to_string(), false); let engine2 = Engine::new(p2.to_string(), true);
assert!(engine2.is_ok()); assert!(engine2.is_ok());
println!("start ok"); println!("start ok");
let engine2 = Arc::new(Engine::new(p3.to_string(), true).unwrap()); let engine2 = Arc::new(Engine::new(p3.to_string(), true).unwrap());
@ -268,8 +276,18 @@ mod tests {
// println!("v: {:?}", Tuple::new(key)); // println!("v: {:?}", Tuple::new(key));
// } // }
for _ in 0..5000 { for _ in 0..5000 {
sess.pop_env(); sess.pop_env().unwrap();
}
if let Err(e) = sess.commit() {
println!("Err {} with {:?}", i, e);
} else {
println!("OK!!!! {}", i);
sess.commit().unwrap();
sess.commit().unwrap();
println!("OK!!!!!!!! {}", i);
} }
// sess.commit().unwrap();
// sess.commit().unwrap();
println!("pqr {:?}", sess.resolve("pqr")); println!("pqr {:?}", sess.resolve("pqr"));
println!("In thread {} end", i); println!("In thread {} end", i);
})) }))

Loading…
Cancel
Save