pub struct SqliteSessionStoreFactory { /* private fields */ }Expand description
Explicit first-party factory for one SQLite session database per Lash session.
Hosts opt into this by passing it to lash::LashCoreBuilder::store_factory.
The factory never becomes a default: app storage and runtime storage remain
host-owned decisions.
Implementations§
Source§impl SqliteSessionStoreFactory
impl SqliteSessionStoreFactory
pub fn new(root: impl Into<PathBuf>) -> Self
pub fn with_options(root: impl Into<PathBuf>, options: StoreOptions) -> Self
pub fn path_for_session(&self, session_id: &str) -> PathBuf
Trait Implementations§
Source§impl Clone for SqliteSessionStoreFactory
impl Clone for SqliteSessionStoreFactory
Source§fn clone(&self) -> SqliteSessionStoreFactory
fn clone(&self) -> SqliteSessionStoreFactory
Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl Debug for SqliteSessionStoreFactory
impl Debug for SqliteSessionStoreFactory
Source§impl SessionStoreFactory for SqliteSessionStoreFactory
impl SessionStoreFactory for SqliteSessionStoreFactory
Source§fn durability_tier(&self) -> DurabilityTier
fn durability_tier(&self) -> DurabilityTier
Durability tier the stores produced by this factory provide; defaults to
[
DurabilityTier::Inline].fn create_store<'life0, 'life1, 'async_trait>(
&'life0 self,
request: &'life1 SessionStoreCreateRequest,
) -> Pin<Box<dyn Future<Output = Result<Arc<dyn RuntimePersistence>, String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn open_existing_store<'life0, 'life1, 'async_trait>(
&'life0 self,
request: &'life1 SessionStoreCreateRequest,
) -> Pin<Box<dyn Future<Output = Result<Option<Arc<dyn RuntimePersistence>>, String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn delete_session<'life0, 'life1, 'async_trait>(
&'life0 self,
session_id: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<(), String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn live_attachment_refs<'life0, 'async_trait>(
&'life0 self,
intent_grace_cutoff_epoch_ms: u64,
) -> Pin<Box<dyn Future<Output = Result<BTreeSet<AttachmentId>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn live_attachment_refs<'life0, 'async_trait>(
&'life0 self,
intent_grace_cutoff_epoch_ms: u64,
) -> Pin<Box<dyn Future<Output = Result<BTreeSet<AttachmentId>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
The attachment GC root set across ALL sessions this factory owns,
reconciled against
intent_grace_cutoff_epoch_ms: every committed ref,
plus every uncommitted intent younger than the cutoff. Intents at or
before the cutoff are crash orphans (their turn never committed and has
aged past the grace window) — the factory forgets them and excludes them,
so their blobs become collectable. Factories with no attachment story
default to empty; the durable factories override this (Postgres queries
and prunes the global manifest table; SQLite unions and reconciles its
per-session databases at sweep time). Exposed to the GC lever via the
blanket AttachmentRootSet implementation.Source§fn has_live_attachment_ref<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 AttachmentId,
intent_grace_cutoff_epoch_ms: u64,
) -> Pin<Box<dyn Future<Output = Result<bool, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn has_live_attachment_ref<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 AttachmentId,
intent_grace_cutoff_epoch_ms: u64,
) -> Pin<Box<dyn Future<Output = Result<bool, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Whether ANY session this factory owns currently holds a GC-live ref for
attachment_id (a committed ref, or an uncommitted intent younger than
the cutoff). The single-id counterpart to
Self::live_attachment_refs, used by the attachment GC lever’s
delete-time root re-check so it need not re-materialize the whole root set
per candidate blob. The default re-materializes the root set and tests
membership; the durable factories override with a targeted single-id query
(Postgres one indexed SELECT; SQLite iterates its per-session databases
only until the first hit). Read moreAuto Trait Implementations§
impl Freeze for SqliteSessionStoreFactory
impl RefUnwindSafe for SqliteSessionStoreFactory
impl Send for SqliteSessionStoreFactory
impl Sync for SqliteSessionStoreFactory
impl Unpin for SqliteSessionStoreFactory
impl UnsafeUnpin for SqliteSessionStoreFactory
impl UnwindSafe for SqliteSessionStoreFactory
Blanket Implementations§
Source§impl<T> AttachmentRootSet for Twhere
T: SessionStoreFactory + ?Sized,
impl<T> AttachmentRootSet for Twhere
T: SessionStoreFactory + ?Sized,
Source§fn live_attachment_refs<'life0, 'async_trait>(
&'life0 self,
intent_grace_cutoff_epoch_ms: u64,
) -> Pin<Box<dyn Future<Output = Result<BTreeSet<AttachmentId>, StoreError>> + Send + 'async_trait>>where
'life0: 'async_trait,
T: 'async_trait,
fn live_attachment_refs<'life0, 'async_trait>(
&'life0 self,
intent_grace_cutoff_epoch_ms: u64,
) -> Pin<Box<dyn Future<Output = Result<BTreeSet<AttachmentId>, StoreError>> + Send + 'async_trait>>where
'life0: 'async_trait,
T: 'async_trait,
The live root set, reconciled against
intent_grace_cutoff_epoch_ms. Read moreSource§fn has_live_attachment_ref<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 AttachmentId,
intent_grace_cutoff_epoch_ms: u64,
) -> Pin<Box<dyn Future<Output = Result<bool, StoreError>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
T: 'async_trait,
fn has_live_attachment_ref<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 AttachmentId,
intent_grace_cutoff_epoch_ms: u64,
) -> Pin<Box<dyn Future<Output = Result<bool, StoreError>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
T: 'async_trait,
Whether a single id currently has a live root — a committed ref, or an
uncommitted intent younger than
intent_grace_cutoff_epoch_ms. Read moreSource§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
Mutably borrows from an owned value. Read more