use crate::{
db::{
Db,
commit::{CommitRowOp, PreparedRowCommitOp, rollback_prepared_row_ops_reverse},
},
error::InternalError,
traits::CanisterKind,
};
pub(in crate::db) fn replay_commit_marker_row_ops(
db: &Db<impl CanisterKind>,
row_ops: &[CommitRowOp],
) -> Result<(), InternalError> {
let mut rollbacks = Vec::<PreparedRowCommitOp>::with_capacity(row_ops.len());
for row_op in row_ops {
let prepared = match db.prepare_row_commit_op(row_op) {
Ok(op) => op,
Err(err) => {
rollback_prepared_row_ops_reverse(rollbacks);
return Err(err);
}
};
rollbacks.push(prepared.snapshot_row_only_rollback());
prepared.apply_row_only();
}
Ok(())
}