use crate::{
error::{GenericError, PE},
journal::recover_impl::RecoverImpl,
persy::PersyImpl,
Persy, TransactionId,
};
use std::sync::Arc;
#[derive(PartialEq, Eq, Debug, Clone)]
pub enum RecoverStatus {
Partial,
Started,
PrepareCommit,
Rollback,
Commit,
Cleanup,
}
pub struct Recover {
recover_impl: RecoverImpl,
persy_impl: Arc<PersyImpl>,
}
impl Recover {
pub(crate) fn new(recover_impl: RecoverImpl, persy_impl: Arc<PersyImpl>) -> Recover {
Recover {
recover_impl,
persy_impl,
}
}
pub fn list_transactions(&self) -> Vec<(TransactionId, RecoverStatus)> {
self.recover_impl.list_transactions()
}
pub fn commit(&mut self, tx_id: TransactionId) {
self.recover_impl.commit(tx_id)
}
pub fn rollback(&mut self, tx_id: TransactionId) {
self.recover_impl.rollback(tx_id)
}
pub fn status(&self, tx_id: TransactionId) -> Option<RecoverStatus> {
self.recover_impl.status(tx_id)
}
pub fn finalize(self) -> Result<Persy, PE<GenericError>> {
self.persy_impl.final_recover(self.recover_impl)?;
Ok(Persy {
persy_impl: self.persy_impl,
})
}
}