pub struct LocalContinuityStore { /* private fields */ }Expand description
SQLite-backed ContinuityStore for the bundled persistent_state(path) path.
Stores ContinuityRecords and SessionSnapshots in a single SQLite database. Enforces compare-and-set on (fencing_token, checkpoint_version).
Implementations§
Source§impl LocalContinuityStore
impl LocalContinuityStore
Sourcepub fn open(path: impl AsRef<Path>) -> Result<Self, ContinuityStoreError>
pub fn open(path: impl AsRef<Path>) -> Result<Self, ContinuityStoreError>
Open (or create) a local continuity store at the given path.
§Errors
Returns ContinuityStoreError::Io if the database cannot be opened or
the schema cannot be initialized.
Sourcepub fn in_memory() -> Result<Self, ContinuityStoreError>
pub fn in_memory() -> Result<Self, ContinuityStoreError>
Open an in-memory store (for testing).
§Errors
Returns ContinuityStoreError::Io if initialization fails.
Sourcepub fn max_fencing_token(&self) -> Result<u64, ContinuityStoreError>
pub fn max_fencing_token(&self) -> Result<u64, ContinuityStoreError>
The highest fencing token ever committed to this store, across BOTH
continuity_records and session_snapshots (0 if the store is empty).
The bundled LocalLeaseProvider
seeds its monotonic counter from this on startup so fencing tokens keep
advancing across process restarts. Without it the provider’s in-memory
counter resets to 1 and restore presents a stale token that this store’s
compare-and-set rejects — the v0.7.8 “stale fencing token: presented 1,
current N” restart abort.
§Errors
Returns ContinuityStoreError::Io on a query failure.
Trait Implementations§
Source§impl ContinuityStore for LocalContinuityStore
impl ContinuityStore for LocalContinuityStore
Source§fn resolve_many<'life0, 'life1, 'async_trait>(
&'life0 self,
identities: &'life1 [AgentIdentity],
) -> Pin<Box<dyn Future<Output = Result<BTreeMap<AgentIdentity, ContinuityResolveState>, ContinuityStoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn resolve_many<'life0, 'life1, 'async_trait>(
&'life0 self,
identities: &'life1 [AgentIdentity],
) -> Pin<Box<dyn Future<Output = Result<BTreeMap<AgentIdentity, ContinuityResolveState>, ContinuityStoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn load_session_snapshot<'life0, 'life1, 'async_trait>(
&'life0 self,
session_id: &'life1 SessionId,
) -> Pin<Box<dyn Future<Output = Result<Option<SessionSnapshot>, ContinuityStoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn load_session_snapshot<'life0, 'life1, 'async_trait>(
&'life0 self,
session_id: &'life1 SessionId,
) -> Pin<Box<dyn Future<Output = Result<Option<SessionSnapshot>, ContinuityStoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn delete_session_snapshot_if_current_revision<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
session_id: &'life1 SessionId,
expected_current_revision: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<bool, ContinuityStoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn delete_session_snapshot_if_current_revision<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
session_id: &'life1 SessionId,
expected_current_revision: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<bool, ContinuityStoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
expected_current_revision. Read moreSource§fn save_session_snapshot<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
identity: &'life1 AgentIdentity,
session_id: &'life2 SessionId,
generation: ContinuityGeneration,
version: CheckpointVersion,
fencing_token: FencingToken,
snapshot: &'life3 SessionSnapshot,
) -> Pin<Box<dyn Future<Output = Result<(), ContinuityStoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
fn save_session_snapshot<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
identity: &'life1 AgentIdentity,
session_id: &'life2 SessionId,
generation: ContinuityGeneration,
version: CheckpointVersion,
fencing_token: FencingToken,
snapshot: &'life3 SessionSnapshot,
) -> Pin<Box<dyn Future<Output = Result<(), ContinuityStoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
Source§fn upsert_continuity_record<'life0, 'life1, 'async_trait>(
&'life0 self,
record: &'life1 ContinuityRecord,
fencing_token: FencingToken,
) -> Pin<Box<dyn Future<Output = Result<(), ContinuityStoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn upsert_continuity_record<'life0, 'life1, 'async_trait>(
&'life0 self,
record: &'life1 ContinuityRecord,
fencing_token: FencingToken,
) -> Pin<Box<dyn Future<Output = Result<(), ContinuityStoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn delete_continuity_record<'life0, 'life1, 'async_trait>(
&'life0 self,
identity: &'life1 AgentIdentity,
fencing_token: FencingToken,
) -> Pin<Box<dyn Future<Output = Result<(), ContinuityStoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn delete_continuity_record<'life0, 'life1, 'async_trait>(
&'life0 self,
identity: &'life1 AgentIdentity,
fencing_token: FencingToken,
) -> Pin<Box<dyn Future<Output = Result<(), ContinuityStoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Auto Trait Implementations§
impl !Freeze for LocalContinuityStore
impl RefUnwindSafe for LocalContinuityStore
impl Send for LocalContinuityStore
impl Sync for LocalContinuityStore
impl Unpin for LocalContinuityStore
impl UnsafeUnpin for LocalContinuityStore
impl UnwindSafe for LocalContinuityStore
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<A, B, T> HttpServerConnExec<A, B> for Twhere
B: Body,
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