pub trait SessionStoreFactory: Send + Sync {
// Required methods
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 'life0: 'async_trait,
'life1: 'async_trait,
Self: '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 'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait;
// Provided methods
fn durability_tier(&self) -> DurabilityTier { ... }
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 'life0: 'async_trait,
'life1: 'async_trait,
Self: '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,
Self: 'async_trait { ... }
fn has_live_attachment_ref<'life0, 'life1, 'async_trait>(
&'life0 self,
attachment_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,
Self: 'async_trait { ... }
}Required Methods§
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
'life0: 'async_trait,
'life1: 'async_trait,
Self: '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
'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait,
Provided Methods§
Sourcefn durability_tier(&self) -> DurabilityTier
fn durability_tier(&self) -> DurabilityTier
Durability tier the stores produced by this factory provide; defaults to
[DurabilityTier::Inline].
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
'life0: 'async_trait,
'life1: 'async_trait,
Self: 'async_trait,
Sourcefn 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,
Self: '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,
Self: '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.
Sourcefn has_live_attachment_ref<'life0, 'life1, 'async_trait>(
&'life0 self,
attachment_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,
Self: 'async_trait,
fn has_live_attachment_ref<'life0, 'life1, 'async_trait>(
&'life0 self,
attachment_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,
Self: '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).
Unlike Self::live_attachment_refs, this MUST NOT forget aged intents —
it is a read-only probe run after the reconciling snapshot was already
taken.
Dyn Compatibility§
This trait is dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".