Skip to main content

PersistenceEngine

Struct PersistenceEngine 

Source
pub struct PersistenceEngine { /* private fields */ }
Expand description

The persistence engine — wraps KanbanStore + RelationsStore with dirty tracking, atomic saves (via arrow-graph-git), and graph-native commits.

Implementations§

Source§

impl PersistenceEngine

Source

pub fn new(config: PersistenceConfig) -> Self

Create a new persistence engine with the given config.

Source

pub fn mark_dirty(&mut self)

Mark state as dirty (a mutation occurred).

Source

pub fn is_dirty(&self) -> bool

Whether the engine has unsaved changes.

Source

pub fn periodic_save_due(&self) -> bool

Check if a periodic save is due.

Source

pub fn git_backup_due(&self) -> bool

Check if a graph-native commit is due.

Source

pub fn save( &mut self, store: &KanbanStore, relations: &RelationsStore, ) -> Result<SaveMetrics>

Save the kanban state to Parquet atomically.

Delegates to persist::save_all() which uses arrow-graph-git::save_named_batches() for crash-safe atomic writes with WAL protection.

Source

pub fn git_backup(&mut self, item_count: usize) -> Result<GitBackupMetrics>

Create a graph-native commit for the audit trail.

Replaces shell git add + git commit with a CommitsTable entry persisted as JSON. History is queryable via commits().

Source

pub fn load_commits(&mut self) -> Result<()>

Load commit history from disk (call after startup).

Source

pub fn commits(&self) -> &CommitsTable

Get the commit history (graph-native audit trail).

Source

pub fn check_wal_recovery(root: &Path) -> Result<bool>

Check for and recover from an incomplete save (WAL present on startup).

If a WAL file exists, the previous save was interrupted. The Parquet files may be in an inconsistent state. Since we use atomic file replacement (write .tmp then rename), the old files are still valid. Remove the WAL and proceed — the old state is correct.

Source

pub fn shutdown( &mut self, store: &KanbanStore, relations: &RelationsStore, ) -> Result<()>

Graceful shutdown — save state before exit.

Source

pub fn health( &self, store: &KanbanStore, relations: &RelationsStore, ) -> HealthMetrics

Get current health metrics.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T> Allocation for T
where T: RefUnwindSafe + Send + Sync,