pub struct SessionAttachmentStore { /* private fields */ }Expand description
The concrete, session-bound facade over a flat AttachmentStore backend —
the only attachment surface the runtime and its consumers ever see.
It binds a flat blob backend, an AttachmentManifest that tracks
(session_id, attachment_id) refs, and a session_id. Every put records
a write-ahead intent in the manifest before the bytes hit the backend, so
a crash between put and the next durable commit surfaces as an uncommitted
manifest row that GC reconciles. Every get first checks the manifest holds
a ref for this session — the session-boundary guard that replaces physical
per-session isolation: a turn in one session can never resolve another
session’s content-addressed blob by guessing its hash. delete drops the
session’s manifest ref and leaves the blob in place; the bytes die later via
reclaim_unreferenced_attachments once no session references them.
Ephemeral runtimes (no durable reference store) wrap their backend with a
NoopAttachmentManifest via SessionAttachmentStore::ephemeral, so
consumers still see exactly one type. A no-op manifest imposes no boundary
guard (reads pass straight through) and records nothing.
Implementations§
Source§impl SessionAttachmentStore
impl SessionAttachmentStore
pub fn new( backend: Arc<dyn AttachmentStore>, manifest: Arc<dyn AttachmentManifest>, session_id: impl Into<String>, ) -> SessionAttachmentStore
pub fn new_with_pending( backend: Arc<dyn AttachmentStore>, manifest: Arc<dyn AttachmentManifest>, session_id: impl Into<String>, pending_manifest_commit_ids: impl IntoIterator<Item = AttachmentId>, ) -> SessionAttachmentStore
Sourcepub fn ephemeral(backend: Arc<dyn AttachmentStore>) -> SessionAttachmentStore
pub fn ephemeral(backend: Arc<dyn AttachmentStore>) -> SessionAttachmentStore
Ephemeral facade: wrap backend with a no-op manifest and an empty
session id. No boundary guard, no reference tracking — used by ephemeral
runtimes and tests with no durable reference store.
Sourcepub fn in_memory() -> SessionAttachmentStore
pub fn in_memory() -> SessionAttachmentStore
Ephemeral facade over a fresh in-memory backend.
pub fn backend(&self) -> &Arc<dyn AttachmentStore> ⓘ
pub fn manifest(&self) -> &Arc<dyn AttachmentManifest> ⓘ
pub fn session_id(&self) -> &str
pub fn persistence(&self) -> AttachmentStorePersistence
Sourcepub fn pending_manifest_commit_ids(&self) -> Vec<AttachmentId>
pub fn pending_manifest_commit_ids(&self) -> Vec<AttachmentId>
Attachment refs written through this facade that still need their write-ahead manifest rows stamped by the next runtime commit.
Sourcepub fn mark_manifest_committed(&self, ids: &[AttachmentId])
pub fn mark_manifest_committed(&self, ids: &[AttachmentId])
Clear attachment refs that were stamped committed by a successful runtime commit.