pub struct TenantAwareInMemoryTaskStore { /* private fields */ }Expand description
Tenant-isolated in-memory TaskStore.
Maintains a separate InMemoryTaskStore per tenant, providing full
data isolation between tenants. The current tenant is determined from
TenantContext.
§Usage
use a2a_protocol_server::store::tenant::{TenantAwareInMemoryTaskStore, TenantContext};
use a2a_protocol_server::store::TaskStore;
let store = TenantAwareInMemoryTaskStore::new();
// Tenant A saves a task
TenantContext::scope("tenant-a", async {
let task = Task {
id: TaskId::new("task-1"),
context_id: ContextId::new("ctx-1"),
status: TaskStatus::with_timestamp(TaskState::Submitted),
history: None,
artifacts: None,
metadata: None,
};
store.save(task).await.unwrap();
}).await;
// Tenant B cannot see tenant A's task
TenantContext::scope("tenant-b", async {
let result = store.get(&TaskId::new("task-1")).await.unwrap();
assert!(result.is_none());
}).await;Implementations§
Source§impl TenantAwareInMemoryTaskStore
impl TenantAwareInMemoryTaskStore
Sourcepub fn new() -> TenantAwareInMemoryTaskStore
pub fn new() -> TenantAwareInMemoryTaskStore
Creates a new tenant-aware store with default configuration.
Sourcepub fn with_config(config: TenantStoreConfig) -> TenantAwareInMemoryTaskStore
pub fn with_config(config: TenantStoreConfig) -> TenantAwareInMemoryTaskStore
Creates a new tenant-aware store with custom configuration.
Sourcepub async fn tenant_count(&self) -> usize
pub async fn tenant_count(&self) -> usize
Returns the number of active tenant partitions.
Sourcepub async fn run_eviction_all(&self)
pub async fn run_eviction_all(&self)
Runs eviction on all tenant stores.
Call periodically to clean up terminal tasks in idle tenants.
Sourcepub async fn prune_empty_tenants(&self)
pub async fn prune_empty_tenants(&self)
Removes empty tenant partitions to reclaim memory.
A partition is considered empty when its task count is zero.
Trait Implementations§
Source§impl Debug for TenantAwareInMemoryTaskStore
impl Debug for TenantAwareInMemoryTaskStore
Source§impl Default for TenantAwareInMemoryTaskStore
impl Default for TenantAwareInMemoryTaskStore
Source§fn default() -> TenantAwareInMemoryTaskStore
fn default() -> TenantAwareInMemoryTaskStore
Returns the “default value” for a type. Read more
Source§impl TaskStore for TenantAwareInMemoryTaskStore
impl TaskStore for TenantAwareInMemoryTaskStore
Source§fn save<'a>(
&'a self,
task: Task,
) -> Pin<Box<dyn Future<Output = Result<(), A2aError>> + Send + 'a>>
fn save<'a>( &'a self, task: Task, ) -> Pin<Box<dyn Future<Output = Result<(), A2aError>> + Send + 'a>>
Saves (creates or updates) a task. Read more
Source§fn get<'a>(
&'a self,
id: &'a TaskId,
) -> Pin<Box<dyn Future<Output = Result<Option<Task>, A2aError>> + Send + 'a>>
fn get<'a>( &'a self, id: &'a TaskId, ) -> Pin<Box<dyn Future<Output = Result<Option<Task>, A2aError>> + Send + 'a>>
Retrieves a task by its ID, returning
None if not found. Read moreSource§fn list<'a>(
&'a self,
params: &'a ListTasksParams,
) -> Pin<Box<dyn Future<Output = Result<TaskListResponse, A2aError>> + Send + 'a>>
fn list<'a>( &'a self, params: &'a ListTasksParams, ) -> Pin<Box<dyn Future<Output = Result<TaskListResponse, A2aError>> + Send + 'a>>
Lists tasks matching the given filter parameters. Read more
Source§fn insert_if_absent<'a>(
&'a self,
task: Task,
) -> Pin<Box<dyn Future<Output = Result<bool, A2aError>> + Send + 'a>>
fn insert_if_absent<'a>( &'a self, task: Task, ) -> Pin<Box<dyn Future<Output = Result<bool, A2aError>> + Send + 'a>>
Atomically inserts a task only if no task with the same ID exists. Read more
Auto Trait Implementations§
impl !Freeze for TenantAwareInMemoryTaskStore
impl !RefUnwindSafe for TenantAwareInMemoryTaskStore
impl Send for TenantAwareInMemoryTaskStore
impl Sync for TenantAwareInMemoryTaskStore
impl Unpin for TenantAwareInMemoryTaskStore
impl UnsafeUnpin for TenantAwareInMemoryTaskStore
impl !UnwindSafe for TenantAwareInMemoryTaskStore
Blanket Implementations§
Source§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
Source§impl<T> FutureExt for T
impl<T> FutureExt for T
Source§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
Source§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
Wrap the input message
T in a tonic::Request