pub struct DurableGuardStore { /* private fields */ }Expand description
Durable guard state store backed by redb.
Persists root records and clean attestations to a single file.
The in-memory RootRegistry and HotAttestationIndex remain the
hot path; this store provides crash recovery across daemon restarts.
Implementations§
Source§impl DurableGuardStore
impl DurableGuardStore
Sourcepub fn open(path: &Path) -> Result<Self, GuardStoreError>
pub fn open(path: &Path) -> Result<Self, GuardStoreError>
Open or create the durable store at the given path.
The path is validated for safety: it must not be a symlink, and the file (once created) is set to owner-only permissions (0600). The parent directory is created with 0700 permissions if needed.
Sourcepub fn load_roots(&self) -> Result<RootRegistry, GuardStoreError>
pub fn load_roots(&self) -> Result<RootRegistry, GuardStoreError>
Load all root records from the durable store into a registry.
Sourcepub fn save_root(&self, record: &GuardRootRecord) -> Result<(), GuardStoreError>
pub fn save_root(&self, record: &GuardRootRecord) -> Result<(), GuardStoreError>
Save a single root record to the durable store.
Sourcepub fn remove_root(&self, canonical_path: &[u8]) -> Result<(), GuardStoreError>
pub fn remove_root(&self, canonical_path: &[u8]) -> Result<(), GuardStoreError>
Remove a root record from the durable store.
Sourcepub fn load_attestations(
&self,
) -> Result<Vec<GitCleanAttestation>, GuardStoreError>
pub fn load_attestations( &self, ) -> Result<Vec<GitCleanAttestation>, GuardStoreError>
Load all clean attestations from the durable store.
Sourcepub fn save_attestation(
&self,
att: &GitCleanAttestation,
) -> Result<(), GuardStoreError>
pub fn save_attestation( &self, att: &GitCleanAttestation, ) -> Result<(), GuardStoreError>
Save a clean attestation to the durable store.
Sourcepub fn remove_attestation(
&self,
att: &GitCleanAttestation,
) -> Result<(), GuardStoreError>
pub fn remove_attestation( &self, att: &GitCleanAttestation, ) -> Result<(), GuardStoreError>
Remove a clean attestation from the durable store.
Sourcepub fn clear_attestations_for_policy(
&self,
policy_short: &str,
) -> Result<usize, GuardStoreError>
pub fn clear_attestations_for_policy( &self, policy_short: &str, ) -> Result<usize, GuardStoreError>
Remove all attestations for a given detector digest.
Sourcepub fn save_root_gap(
&self,
canonical_path: &[u8],
blob_oid: &str,
description: &str,
) -> Result<(), GuardStoreError>
pub fn save_root_gap( &self, canonical_path: &[u8], blob_oid: &str, description: &str, ) -> Result<(), GuardStoreError>
Save a coverage gap for a root. The key is canonical_path || 0x00 || blob_oid.
Sourcepub fn load_root_gaps(
&self,
canonical_path: &[u8],
) -> Result<Vec<(String, String)>, GuardStoreError>
pub fn load_root_gaps( &self, canonical_path: &[u8], ) -> Result<Vec<(String, String)>, GuardStoreError>
Load all coverage gaps for a root.
Sourcepub fn clear_root_gaps(
&self,
canonical_path: &[u8],
) -> Result<usize, GuardStoreError>
pub fn clear_root_gaps( &self, canonical_path: &[u8], ) -> Result<usize, GuardStoreError>
Remove all coverage gaps for a root.
Sourcepub fn mark_unclean_shutdown(&self) -> Result<(), GuardStoreError>
pub fn mark_unclean_shutdown(&self) -> Result<(), GuardStoreError>
Mark the service state as unclean (startup). This is set before the daemon begins serving requests and cleared after all state is flushed during a clean shutdown.
Sourcepub fn mark_clean_shutdown(&self) -> Result<(), GuardStoreError>
pub fn mark_clean_shutdown(&self) -> Result<(), GuardStoreError>
Mark the service state as clean (graceful shutdown). Called after all root records and attestations have been flushed.
Sourcepub fn was_clean_shutdown(&self) -> Result<bool, GuardStoreError>
pub fn was_clean_shutdown(&self) -> Result<bool, GuardStoreError>
Check whether the last shutdown was clean.
Returns true if the clean_shutdown marker is set to 1,
false if it is 0 or absent (treat absent as unclean).
Sourcepub fn save_root_with_gaps(
&self,
record: &GuardRootRecord,
gaps: &[(String, String)],
) -> Result<(), GuardStoreError>
pub fn save_root_with_gaps( &self, record: &GuardRootRecord, gaps: &[(String, String)], ) -> Result<(), GuardStoreError>
Atomically save a root record and its coverage gaps in one transaction. This ensures the root state and gap records are consistent across crashes.
Auto Trait Implementations§
impl !RefUnwindSafe for DurableGuardStore
impl !UnwindSafe for DurableGuardStore
impl Freeze for DurableGuardStore
impl Send for DurableGuardStore
impl Sync for DurableGuardStore
impl Unpin for DurableGuardStore
impl UnsafeUnpin for DurableGuardStore
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more