Skip to main content

a3s_runtime/state/
mod.rs

1mod file;
2mod record;
3
4use crate::contract::{
5    RuntimeActionRequest, RuntimeApplyRequest, RuntimeExecRequest, RuntimeExecResult,
6    RuntimeObservation, RuntimeRemoval,
7};
8use crate::RuntimeResult;
9use async_trait::async_trait;
10
11pub use file::FileRuntimeStateStore;
12pub use record::{
13    RuntimeActionKind, RuntimeRequestKind, RuntimeRequestReceipt, RuntimeRequestState,
14    RuntimeStateReservation, RuntimeUnitRecord,
15};
16
17#[cfg(test)]
18mod transition_tests;
19
20/// Owned guard for one unit's cross-process operation lease. Implementations
21/// release the lease when the guard is dropped.
22pub trait RuntimeOperationLease: Send {}
23
24#[async_trait]
25pub trait RuntimeStateStore: Send + Sync {
26    async fn acquire_operation_lease(
27        &self,
28        unit_id: &str,
29    ) -> RuntimeResult<Box<dyn RuntimeOperationLease>>;
30
31    async fn reserve_apply(
32        &self,
33        request: &RuntimeApplyRequest,
34        now_ms: u64,
35    ) -> RuntimeResult<RuntimeStateReservation>;
36
37    async fn reserve_action(
38        &self,
39        kind: RuntimeActionKind,
40        request: &RuntimeActionRequest,
41        now_ms: u64,
42    ) -> RuntimeResult<RuntimeStateReservation>;
43
44    async fn reserve_exec(
45        &self,
46        request: &RuntimeExecRequest,
47        now_ms: u64,
48    ) -> RuntimeResult<RuntimeStateReservation>;
49
50    async fn load(&self, unit_id: &str) -> RuntimeResult<RuntimeUnitRecord>;
51
52    async fn load_request(
53        &self,
54        unit_id: &str,
55        request_id: &str,
56    ) -> RuntimeResult<RuntimeRequestReceipt>;
57
58    async fn update_observation(
59        &self,
60        request_id: Option<&str>,
61        observation: &RuntimeObservation,
62    ) -> RuntimeResult<RuntimeUnitRecord>;
63
64    async fn complete_removal(&self, removal: &RuntimeRemoval) -> RuntimeResult<RuntimeUnitRecord>;
65
66    async fn complete_exec(&self, result: &RuntimeExecResult) -> RuntimeResult<RuntimeUnitRecord>;
67}