ic_backup/policy/fence_acquisition/
mod.rs1use crate::model::{
4 attempt_journal::AttemptJournalRecord,
5 fence_acquisition::{
6 FenceAcquisitionAcknowledgement, FenceAcquisitionError, FenceAcquisitionRequest,
7 },
8};
9use thiserror::Error;
10
11pub fn validate_acknowledgement<'a>(
21 request: &FenceAcquisitionRequest<'_>,
22 journal: &AttemptJournalRecord,
23 acknowledgement: &'a FenceAcquisitionAcknowledgement,
24) -> Result<&'a FenceAcquisitionAcknowledgement, FenceAcquisitionAcknowledgementError> {
25 request.validate_journal(journal)?;
26 if acknowledgement.authority != request.authority().digest() {
27 return Err(FenceAcquisitionAcknowledgementError::AuthorityMismatch);
28 }
29 if acknowledgement.mutation_attempt != request.mutation_attempt() {
30 return Err(FenceAcquisitionAcknowledgementError::AttemptMismatch);
31 }
32 Ok(acknowledgement)
33}
34
35#[derive(Debug, Error)]
37pub enum FenceAcquisitionAcknowledgementError {
38 #[error(transparent)]
40 Reservation(#[from] FenceAcquisitionError),
41 #[error("fence acquisition acknowledgement authority mismatch")]
43 AuthorityMismatch,
44 #[error("fence acquisition acknowledgement attempt mismatch")]
46 AttemptMismatch,
47}
48
49#[cfg(test)]
50mod tests;