Skip to main content

SessionStoreFactory

Trait SessionStoreFactory 

Source
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 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;

    // 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 Self: 'async_trait,
             'life0: 'async_trait,
             'life1: '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 { ... }
    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 Self: 'async_trait,
             'life0: 'async_trait,
             'life1: 'async_trait { ... }
}

Required Methods§

Source

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,

Source

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,

Provided Methods§

Source

fn durability_tier(&self) -> DurabilityTier

Durability tier the stores produced by this factory provide; defaults to [DurabilityTier::Inline].

Source

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,

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,

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, attachment_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).

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".

Implementors§