pub struct InMemoryStore { /* private fields */ }Expand description
Correct non-durable crate::EventStore implementation for tests and backend equivalence.
Implementations§
Source§impl InMemoryStore
impl InMemoryStore
Sourcepub fn write_raw_assistant_session(
&self,
session_id: &str,
bytes: Vec<u8>,
) -> Result<(), StoreError>
pub fn write_raw_assistant_session( &self, session_id: &str, bytes: Vec<u8>, ) -> Result<(), StoreError>
Write assistant-session backend bytes directly for persistence conformance testing (poisoned-row listing behaviour), bypassing the entity codec.
§Errors
StoreError::Serialization when session_id is empty or whitespace.
Source§impl InMemoryStore
impl InMemoryStore
Sourcepub fn write_raw_worker_deployment(
&self,
name: &str,
bytes: Vec<u8>,
) -> Result<(), StoreError>
pub fn write_raw_worker_deployment( &self, name: &str, bytes: Vec<u8>, ) -> Result<(), StoreError>
Write backend bytes directly for persistence conformance testing.
This deliberately bypasses the entity codec so the shared suite can pin poisoned-row listing, replacement, and deletion behavior on every backend.
§Errors
Returns StoreError::Serialization when name is empty or whitespace.
Sourcepub fn write_raw_workloop(
&self,
loop_id: &str,
bytes: Vec<u8>,
) -> Result<(), StoreError>
pub fn write_raw_workloop( &self, loop_id: &str, bytes: Vec<u8>, ) -> Result<(), StoreError>
Write workloop backend bytes directly for persistence conformance testing (poisoned-row listing behavior), bypassing the entity codec.
§Errors
Returns StoreError::Serialization when loop_id is empty.
Trait Implementations§
Source§impl AssistantSessionStore for InMemoryStore
impl AssistantSessionStore for InMemoryStore
Source§fn put_assistant_session<'life0, 'async_trait>(
&'life0 self,
record: AssistantSessionRecord,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn put_assistant_session<'life0, 'async_trait>(
&'life0 self,
record: AssistantSessionRecord,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§fn get_assistant_session<'life0, 'life1, 'async_trait>(
&'life0 self,
session_id: &'life1 AssistantSessionId,
) -> Pin<Box<dyn Future<Output = Result<Option<AssistantSessionRecord>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn get_assistant_session<'life0, 'life1, 'async_trait>(
&'life0 self,
session_id: &'life1 AssistantSessionId,
) -> Pin<Box<dyn Future<Output = Result<Option<AssistantSessionRecord>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn list_assistant_sessions<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<AssistantSessionListing, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn list_assistant_sessions<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<AssistantSessionListing, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
created_at then session id. Read moreSource§fn append_assistant_transcript_event<'life0, 'life1, 'async_trait>(
&'life0 self,
session_id: &'life1 AssistantSessionId,
recorded_at: DateTime<Utc>,
payload: Payload,
) -> Pin<Box<dyn Future<Output = Result<u64, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn append_assistant_transcript_event<'life0, 'life1, 'async_trait>(
&'life0 self,
session_id: &'life1 AssistantSessionId,
recorded_at: DateTime<Utc>,
payload: Payload,
) -> Pin<Box<dyn Future<Output = Result<u64, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn assistant_transcript_head<'life0, 'life1, 'async_trait>(
&'life0 self,
session_id: &'life1 AssistantSessionId,
) -> Pin<Box<dyn Future<Output = Result<u64, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn assistant_transcript_head<'life0, 'life1, 'async_trait>(
&'life0 self,
session_id: &'life1 AssistantSessionId,
) -> Pin<Box<dyn Future<Output = Result<u64, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn put_assistant_default_harness<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
subject: &'life1 str,
harness: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn put_assistant_default_harness<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
subject: &'life1 str,
harness: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
subject last opened a session on. Read moreSource§fn assistant_default_harness<'life0, 'life1, 'async_trait>(
&'life0 self,
subject: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Option<String>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn assistant_default_harness<'life0, 'life1, 'async_trait>(
&'life0 self,
subject: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Option<String>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn assistant_transcript<'life0, 'life1, 'async_trait>(
&'life0 self,
session_id: &'life1 AssistantSessionId,
after: Option<u64>,
) -> Pin<Box<dyn Future<Output = Result<Vec<AssistantTranscriptEvent>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn assistant_transcript<'life0, 'life1, 'async_trait>(
&'life0 self,
session_id: &'life1 AssistantSessionId,
after: Option<u64>,
) -> Pin<Box<dyn Future<Output = Result<Vec<AssistantTranscriptEvent>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
after. Read moreSource§impl Debug for InMemoryStore
impl Debug for InMemoryStore
Source§impl Default for InMemoryStore
impl Default for InMemoryStore
Source§fn default() -> InMemoryStore
fn default() -> InMemoryStore
Source§impl NamespaceStore for InMemoryStore
impl NamespaceStore for InMemoryStore
Source§fn register_namespace<'life0, 'life1, 'async_trait>(
&'life0 self,
name: &'life1 str,
origin: NamespaceOrigin,
) -> Pin<Box<dyn Future<Output = Result<MintOutcome, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn register_namespace<'life0, 'life1, 'async_trait>(
&'life0 self,
name: &'life1 str,
origin: NamespaceOrigin,
) -> Pin<Box<dyn Future<Output = Result<MintOutcome, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn put_namespace<'life0, 'async_trait>(
&'life0 self,
record: NamespaceRecord,
) -> Pin<Box<dyn Future<Output = Result<MintOutcome, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn put_namespace<'life0, 'async_trait>(
&'life0 self,
record: NamespaceRecord,
) -> Pin<Box<dyn Future<Output = Result<MintOutcome, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
POST /namespaces). Read moreSource§fn list_namespaces<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Vec<NamespaceRecord>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn list_namespaces<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Vec<NamespaceRecord>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§fn get_namespace<'life0, 'life1, 'async_trait>(
&'life0 self,
name: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Option<NamespaceRecord>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn get_namespace<'life0, 'life1, 'async_trait>(
&'life0 self,
name: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Option<NamespaceRecord>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
name. Read moreSource§fn set_namespace_placement<'life0, 'life1, 'async_trait>(
&'life0 self,
name: &'life1 str,
placement: NamespacePlacement,
) -> Pin<Box<dyn Future<Output = Result<Option<()>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn set_namespace_placement<'life0, 'life1, 'async_trait>(
&'life0 self,
name: &'life1 str,
placement: NamespacePlacement,
) -> Pin<Box<dyn Future<Output = Result<Option<()>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn deprecate_namespace<'life0, 'life1, 'async_trait>(
&'life0 self,
name: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn deprecate_namespace<'life0, 'life1, 'async_trait>(
&'life0 self,
name: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
NamespaceState::Active to
NamespaceState::Deprecated (deprecate-before-delete). Read moreSource§impl PackageStore for InMemoryStore
impl PackageStore for InMemoryStore
Source§fn put_package<'life0, 'async_trait>(
&'life0 self,
record: PackageRecord,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn put_package<'life0, 'async_trait>(
&'life0 self,
record: PackageRecord,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
record and atomically points the type’s route at it. Read moreSource§fn put_package_with_routes<'life0, 'life1, 'async_trait>(
&'life0 self,
record: PackageRecord,
route_workflow_types: &'life1 [String],
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn put_package_with_routes<'life0, 'life1, 'async_trait>(
&'life0 self,
record: PackageRecord,
route_workflow_types: &'life1 [String],
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
record and atomically points every member workflow type at
its content hash. Read moreSource§fn list_packages<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Vec<PackageRecord>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn list_packages<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Vec<PackageRecord>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
deployed_at order
(ties broken by (workflow_type, content_hash) text order), so
startup reload re-applies deploys deterministically.Source§fn delete_package<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
workflow_type: &'life1 str,
content_hash: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn delete_package<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
workflow_type: &'life1 str,
content_hash: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
(workflow_type, content_hash). Read moreSource§fn put_package_route<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
workflow_type: &'life1 str,
content_hash: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn put_package_route<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
workflow_type: &'life1 str,
content_hash: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Source§fn list_package_routes<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Vec<PackageRouteRecord>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn list_package_routes<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Vec<PackageRouteRecord>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
workflow_type text order.Source§impl ReadableEventStore for InMemoryStore
impl ReadableEventStore for InMemoryStore
Source§fn read_history<'life0, 'life1, 'async_trait>(
&'life0 self,
workflow_id: &'life1 WorkflowId,
) -> Pin<Box<dyn Future<Output = Result<Vec<Event>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn read_history<'life0, 'life1, 'async_trait>(
&'life0 self,
workflow_id: &'life1 WorkflowId,
) -> Pin<Box<dyn Future<Output = Result<Vec<Event>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
workflow_id in ascending sequence order. Read moreSource§fn read_history_from<'life0, 'life1, 'async_trait>(
&'life0 self,
workflow_id: &'life1 WorkflowId,
from_seq: u64,
) -> Pin<Box<dyn Future<Output = Result<Vec<Event>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn read_history_from<'life0, 'life1, 'async_trait>(
&'life0 self,
workflow_id: &'life1 WorkflowId,
from_seq: u64,
) -> Pin<Box<dyn Future<Output = Result<Vec<Event>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
workflow_id restricted to events with sequence number
greater than or equal to from_seq, in ascending sequence order. Read moreSource§fn read_run_chain<'life0, 'life1, 'async_trait>(
&'life0 self,
workflow_id: &'life1 WorkflowId,
) -> Pin<Box<dyn Future<Output = Result<Vec<RunSummary>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn read_run_chain<'life0, 'life1, 'async_trait>(
&'life0 self,
workflow_id: &'life1 WorkflowId,
) -> Pin<Box<dyn Future<Output = Result<Vec<RunSummary>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
workflow_id in continuation order.Source§fn list_workflow_ids<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Vec<WorkflowId>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn list_workflow_ids<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Vec<WorkflowId>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§fn stream_heads<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Vec<StreamHead>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn stream_heads<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Vec<StreamHead>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
seq of its last event —
the stream-side half of the handshake that lets a boot trust a
visibility row instead of opening the history behind it
(crate::visibility::head). Read moreSource§fn list_active<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Vec<WorkflowId>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn list_active<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Vec<WorkflowId>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
WorkflowStatus::Running. Read moreSource§fn list_paused<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Vec<WorkflowId>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn list_paused<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Vec<WorkflowId>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
WorkflowStatus::Paused. Read moreSource§fn query<'life0, 'life1, 'async_trait>(
&'life0 self,
filter: &'life1 WorkflowFilter,
) -> Pin<Box<dyn Future<Output = Result<Vec<WorkflowSummary>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn query<'life0, 'life1, 'async_trait>(
&'life0 self,
filter: &'life1 WorkflowFilter,
) -> Pin<Box<dyn Future<Output = Result<Vec<WorkflowSummary>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
filter.Source§fn schedule_timer<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
workflow_id: &'life1 WorkflowId,
timer_id: &'life2 TimerId,
fire_at: DateTime<Utc>,
armed_seq: u64,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn schedule_timer<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
workflow_id: &'life1 WorkflowId,
timer_id: &'life2 TimerId,
fire_at: DateTime<Utc>,
armed_seq: u64,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Source§fn retire_timer<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
workflow_id: &'life1 WorkflowId,
timer_id: &'life2 TimerId,
fire_at: DateTime<Utc>,
armed_seq: u64,
) -> Pin<Box<dyn Future<Output = Result<TimerRetirement, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn retire_timer<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
workflow_id: &'life1 WorkflowId,
timer_id: &'life2 TimerId,
fire_at: DateTime<Utc>,
armed_seq: u64,
) -> Pin<Box<dyn Future<Output = Result<TimerRetirement, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
(workflow_id, timer_id) — but only
while the row still carries exactly the (fire_at, armed_seq)
identity of the arming being retired. Read moreSource§fn expired_timers<'life0, 'async_trait>(
&'life0 self,
as_of: DateTime<Utc>,
) -> Pin<Box<dyn Future<Output = Result<Vec<TimerEntry>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn expired_timers<'life0, 'async_trait>(
&'life0 self,
as_of: DateTime<Utc>,
) -> Pin<Box<dyn Future<Output = Result<Vec<TimerEntry>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fire_at is less than or equal to as_of.Source§fn set_owned_shards(&self, shards: Option<&[usize]>)
fn set_owned_shards(&self, shards: Option<&[usize]>)
shards is None. Read moreSource§fn acquire_owned_shards(&self, shards: &[usize]) -> Result<(), StoreError>
fn acquire_owned_shards(&self, shards: &[usize]) -> Result<(), StoreError>
Source§fn acquire_owned_shard(&self, shard: usize) -> Result<(), StoreError>
fn acquire_owned_shard(&self, shard: usize) -> Result<(), StoreError>
shard — the
per-shard primitive Self::acquire_owned_shards is a loop over, exposed
so the failover path can drive a per-shard abort seam: a clean election
loss on one shard (StoreError::NotOwner) drops only that shard rather
than failing the whole adoption batch (ADR-021 clean-partial). Read moreSource§fn is_current_owner(&self, shard: usize) -> bool
fn is_current_owner(&self, shard: usize) -> bool
shard — it won
the per-shard election THIS process lifetime and has not been deposed
in-process. Read moreSource§fn extend_owned_shards(&self, shards: &[usize])
fn extend_owned_shards(&self, shards: &[usize])
shards to this node’s owned-enumeration scope, UNIONING them with
the shards it already owns rather than replacing the set. Read moreSource§fn publish_shard_owner(&self, shard: usize) -> Result<(), StoreError>
fn publish_shard_owner(&self, shard: usize) -> Result<(), StoreError>
shard in the cluster’s
shard-owner directory, so other nodes’ request-routing edges resolve
shard to this node (SS-3). Read moreSource§impl VisibilityStore for InMemoryStore
impl VisibilityStore for InMemoryStore
Source§fn list_workflows<'life0, 'life1, 'async_trait>(
&'life0 self,
request: &'life1 WorkflowListRequest,
) -> Pin<Box<dyn Future<Output = Result<VisibilityPage, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn list_workflows<'life0, 'life1, 'async_trait>(
&'life0 self,
request: &'life1 WorkflowListRequest,
) -> Pin<Box<dyn Future<Output = Result<VisibilityPage, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
The reference fold: every row is a candidate and paginate does the
rest. Linear in the namespace by design — this store exists to define
the answer, not to serve it at scale.
Source§fn record_visibility<'life0, 'async_trait>(
&'life0 self,
record: VisibilityRecord,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn record_visibility<'life0, 'async_trait>(
&'life0 self,
record: VisibilityRecord,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
record.workflow_id, replacing any previous
generation’s row and moving it under its new sort keys atomically.
The replace is part of the write, not a separate pass: after this
returns, the workflow has exactly one row and it is this one. Read moreSource§fn get_visibility<'life0, 'life1, 'async_trait>(
&'life0 self,
workflow_id: &'life1 WorkflowId,
) -> Pin<Box<dyn Future<Output = Result<Option<VisibilityRecord>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn get_visibility<'life0, 'life1, 'async_trait>(
&'life0 self,
workflow_id: &'life1 WorkflowId,
) -> Pin<Box<dyn Future<Output = Result<Option<VisibilityRecord>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
None when it has no row yet. Read moreSource§fn remove_visibility<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
workflow_id: &'life1 WorkflowId,
run_id: &'life2 RunId,
) -> Pin<Box<dyn Future<Output = Result<bool, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn remove_visibility<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
workflow_id: &'life1 WorkflowId,
run_id: &'life2 RunId,
) -> Pin<Box<dyn Future<Output = Result<bool, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
workflow_id IF it belongs to run_id, and any
row a store written before the one-row collapse still holds for that
(workflow_id, run_id) pair. Returns whether anything was removed. Read moreSource§impl WorkerDeploymentStore for InMemoryStore
impl WorkerDeploymentStore for InMemoryStore
Source§fn put_worker_deployment<'life0, 'async_trait>(
&'life0 self,
record: WorkerDeployment,
) -> Pin<Box<dyn Future<Output = Result<WorkerDeploymentPutResult, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn put_worker_deployment<'life0, 'async_trait>(
&'life0 self,
record: WorkerDeployment,
) -> Pin<Box<dyn Future<Output = Result<WorkerDeploymentPutResult, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§fn get_worker_deployment<'life0, 'life1, 'async_trait>(
&'life0 self,
name: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Option<WorkerDeployment>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn get_worker_deployment<'life0, 'life1, 'async_trait>(
&'life0 self,
name: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Option<WorkerDeployment>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn list_worker_deployments<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<WorkerDeploymentListing, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn list_worker_deployments<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<WorkerDeploymentListing, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§fn set_desired_state<'life0, 'life1, 'async_trait>(
&'life0 self,
name: &'life1 str,
desired: DesiredState,
) -> Pin<Box<dyn Future<Output = Result<Option<WorkerDeployment>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn set_desired_state<'life0, 'life1, 'async_trait>(
&'life0 self,
name: &'life1 str,
desired: DesiredState,
) -> Pin<Box<dyn Future<Output = Result<Option<WorkerDeployment>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
None when absent.Source§fn delete_worker_deployment<'life0, 'life1, 'async_trait>(
&'life0 self,
name: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<WorkerDeploymentDeleteOutcome, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn delete_worker_deployment<'life0, 'life1, 'async_trait>(
&'life0 self,
name: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<WorkerDeploymentDeleteOutcome, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§impl WorkloopStore for InMemoryStore
impl WorkloopStore for InMemoryStore
Source§fn put_workloop<'life0, 'async_trait>(
&'life0 self,
record: WorkloopRecord,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn put_workloop<'life0, 'async_trait>(
&'life0 self,
record: WorkloopRecord,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§fn get_workloop<'life0, 'life1, 'async_trait>(
&'life0 self,
loop_id: &'life1 WorkflowId,
) -> Pin<Box<dyn Future<Output = Result<Option<WorkloopRecord>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn get_workloop<'life0, 'life1, 'async_trait>(
&'life0 self,
loop_id: &'life1 WorkflowId,
) -> Pin<Box<dyn Future<Output = Result<Option<WorkloopRecord>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn list_workloops<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<WorkloopListing, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn list_workloops<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<WorkloopListing, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§fn due_workloops<'life0, 'async_trait>(
&'life0 self,
as_of: DateTime<Utc>,
) -> Pin<Box<dyn Future<Output = Result<Vec<WorkloopRecord>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn due_workloops<'life0, 'async_trait>(
&'life0 self,
as_of: DateTime<Utc>,
) -> Pin<Box<dyn Future<Output = Result<Vec<WorkloopRecord>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
next_check_at is Some and at or before as_of — the
sweeper’s work set. A sleeping loop with a future (or absent) check
instant never appears, which is what makes a thousand sleeping loops
cost the sweeper nothing. Undecodable rows are excluded here (they
surface via WorkloopStore::list_workloops, never silently in the
hot path).Source§fn remove_workloop<'life0, 'life1, 'async_trait>(
&'life0 self,
loop_id: &'life1 WorkflowId,
) -> Pin<Box<dyn Future<Output = Result<bool, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn remove_workloop<'life0, 'life1, 'async_trait>(
&'life0 self,
loop_id: &'life1 WorkflowId,
) -> Pin<Box<dyn Future<Output = Result<bool, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn put_invariant_record<'life0, 'async_trait>(
&'life0 self,
record: InvariantStateRecord,
prune_before: DateTime<Utc>,
) -> Pin<Box<dyn Future<Output = Result<u64, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn put_invariant_record<'life0, 'async_trait>(
&'life0 self,
record: InvariantStateRecord,
prune_before: DateTime<Utc>,
) -> Pin<Box<dyn Future<Output = Result<u64, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
record as the invariant’s current record — rotating any prior
current into the generation list — and prune prior generations recorded
before prune_before, in ONE read-modify-write. Returns how many prior
generations the prune removed. The current record is never pruned; it
survives indefinitely by declaration (R8.1). Read moreSource§fn current_invariant_record<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
loop_id: &'life1 WorkflowId,
invariant: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<Option<InvariantStateRecord>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn current_invariant_record<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
loop_id: &'life1 WorkflowId,
invariant: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<Option<InvariantStateRecord>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Source§fn invariant_record_generations<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
loop_id: &'life1 WorkflowId,
invariant: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<Vec<InvariantStateRecord>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn invariant_record_generations<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
loop_id: &'life1 WorkflowId,
invariant: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<Vec<InvariantStateRecord>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Source§impl WritableEventStore for InMemoryStore
impl WritableEventStore for InMemoryStore
Source§fn append<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
_token: WriteToken,
workflow_id: &'life1 WorkflowId,
events: &'life2 [Event],
expected_seq: u64,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn append<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
_token: WriteToken,
workflow_id: &'life1 WorkflowId,
events: &'life2 [Event],
expected_seq: u64,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
events to workflow_id when the stored history head equals
expected_seq. Read moreSource§fn append_with_outbox<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
token: WriteToken,
workflow_id: &'life1 WorkflowId,
events: &'life2 [Event],
expected_seq: u64,
outbox_rows: &'life3 [OutboxRow],
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
fn append_with_outbox<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
token: WriteToken,
workflow_id: &'life1 WorkflowId,
events: &'life2 [Event],
expected_seq: u64,
outbox_rows: &'life3 [OutboxRow],
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
events and the durable-outbox outbox_rows for workflow_id under the same
expected-head sequence guard as Self::append, as one fan-out write. Read moreSource§fn rearm_outbox_pending<'life0, 'life1, 'async_trait>(
&'life0 self,
rows: &'life1 [OutboxRow],
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn rearm_outbox_pending<'life0, 'life1, 'async_trait>(
&'life0 self,
rows: &'life1 [OutboxRow],
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
rows’ dispatch_keys to Pending, re-staging them for the
out-of-band dispatcher. Read moreSource§fn settle_outbox_row_cancelled<'life0, 'life1, 'async_trait>(
&'life0 self,
dispatch_key: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn settle_outbox_row_cancelled<'life0, 'life1, 'async_trait>(
&'life0 self,
dispatch_key: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn settle_workflow_outbox_rows_cancelled<'life0, 'life1, 'async_trait>(
&'life0 self,
workflow_id: &'life1 WorkflowId,
) -> Pin<Box<dyn Future<Output = Result<Vec<String>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn settle_workflow_outbox_rows_cancelled<'life0, 'life1, 'async_trait>(
&'life0 self,
workflow_id: &'life1 WorkflowId,
) -> Pin<Box<dyn Future<Output = Result<Vec<String>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
crate::OutboxStatus::Pending or
crate::OutboxStatus::Claimed) outbox row of workflow_id to
crate::OutboxStatus::Cancelled, returning the settled dispatch_keys (#253). Read more