Skip to main content

StorageBackedSessionStore

Struct StorageBackedSessionStore 

Source
pub struct StorageBackedSessionStore { /* private fields */ }
Expand description

A session store backed by persistent storage with an in-memory cache.

All reads hit the cache first. All writes go to both the cache and the underlying storage backend. On construction, the cache is warmed from storage to handle process restarts.

Implementations§

Source§

impl StorageBackedSessionStore

Source

pub async fn new( storage: Arc<dyn StorageSessionStore>, ) -> Result<Self, StorageError>

Create a new storage-backed session store.

Loads all existing sessions from storage into the in-memory cache.

Source

pub async fn create(&self, req: CreateSessionRequest) -> TaskSession

Create a new task session and return it.

Source

pub async fn create_if_under_cap( &self, req: CreateSessionRequest, max_sessions: u64, ) -> Result<TaskSession, SessionError>

Atomically check per-agent session cap and create if under the limit.

Source

pub async fn use_session( &self, session_id: SessionId, tool_name: &str, requesting_agent_id: Option<Uuid>, ) -> Result<TaskSession, SessionError>

Record a tool call against the session, checking all constraints.

Source

pub async fn use_session_batch( &self, session_id: SessionId, tool_names: &[&str], requesting_agent_id: Option<Uuid>, ) -> Result<TaskSession, SessionError>

Atomically validate and record a batch of tool calls against the session.

Acquires the write lock once, validates ALL tools against the whitelist and budget, and only increments calls_made by the full batch count if every tool passes. If any tool fails validation, no budget is consumed for any of them.

Source

pub async fn close( &self, session_id: SessionId, ) -> Result<TaskSession, SessionError>

Close a session, preventing further use.

Source

pub async fn get( &self, session_id: SessionId, ) -> Result<TaskSession, SessionError>

Get a session by ID without modifying it.

Source

pub async fn list_all(&self) -> Vec<TaskSession>

List all sessions currently in the store.

Source

pub async fn count_active_for_agent(&self, agent_id: Uuid) -> u64

Count the number of active sessions for a given agent.

P0: Used to enforce per-agent concurrent session caps.

Source

pub async fn close_sessions_for_agent(&self, agent_id: Uuid) -> usize

Close all active sessions belonging to a specific agent.

Called during agent deactivation.

Source

pub async fn cleanup_expired(&self) -> usize

Remove expired sessions from cache and storage. Returns the number removed.

Trait Implementations§

Source§

impl Clone for StorageBackedSessionStore

Source§

fn clone(&self) -> StorageBackedSessionStore

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more