Skip to main content

ursula_runtime/
lib.rs

1//! Per-core actor runtime for Ursula.
2//!
3//! Module map:
4//!
5//! - [`cold_store`]: opendal-backed cold tier handle and object path helpers.
6//! - [`request`]: HTTP/gRPC request and response value types for each engine op.
7//! - [`command`]: the replicated [`GroupWriteCommand`] and `From` conversions from
8//!   request values into the wire command consumed by `GroupEngine`.
9//! - [`error`]: runtime-level error type [`RuntimeError`].
10//! - [`engine`]: the `GroupEngine` trait, factory, metrics, and the boxed-future
11//!   type aliases that form the replaceable per-group engine boundary, plus the
12//!   in-memory and WAL implementations under [`engine::in_memory`] and
13//!   [`engine::wal`].
14//! - [`runtime`]: `ShardRuntime`, `RuntimeConfig`, and per-core worker spawn.
15//! - [`core_worker`]: single-thread actor that owns groups for one core.
16//! - [`group_actor`]: per-group mailbox actor running inside a core worker.
17//! - [`metrics`]: runtime metrics shared across cores; lock-free counters.
18
19mod admission;
20pub mod cold_index;
21mod cold_store;
22pub mod cold_worker;
23mod command;
24mod core_worker;
25mod engine;
26
27mod error;
28mod group_actor;
29pub mod journal;
30mod metrics;
31mod request;
32mod rt;
33mod runtime;
34mod snapshot_store;
35mod trace;
36
37pub use admission::RaftUncommittedAdmission;
38pub use cold_index::ColdIndexPage;
39pub use cold_index::ColdIndexPageCache;
40pub use cold_index::ColdIndexPageKey;
41pub use cold_index::ColdIndexPageStore;
42pub use cold_index::ColdStoreColdIndexPageStore;
43pub use cold_index::InMemoryColdIndexPageStore;
44pub use cold_index::cold_index_prefix;
45pub use cold_index::write_cold_chunk_index_pages;
46pub use cold_index::write_external_segment_index_pages;
47pub use cold_store::ColdReadCacheParams;
48pub use cold_store::ColdStore;
49pub use cold_store::ColdStoreEvent;
50pub use cold_store::ColdStoreFault;
51pub use cold_store::ColdStoreFaultContext;
52pub use cold_store::ColdStoreFaultEffect;
53pub use cold_store::ColdStoreHandle;
54pub use cold_store::ColdStoreInfo;
55pub use cold_store::ColdStoreOperation;
56pub use cold_store::new_cold_chunk_path;
57pub use cold_store::new_external_payload_path;
58pub use cold_worker::spawn_cold_flush_worker_if_configured;
59pub use cold_worker::spawn_cold_gc_worker_if_configured;
60pub use command::GroupSnapshot;
61pub use command::GroupWriteCommand;
62pub use engine::GroupAckColdGcFuture;
63pub use engine::GroupAppendBatchFuture;
64pub use engine::GroupAppendBatchResponse;
65pub use engine::GroupAppendFuture;
66pub use engine::GroupBootstrapStreamFuture;
67pub use engine::GroupCloseStreamFuture;
68pub use engine::GroupColdHotBacklogFuture;
69pub use engine::GroupCreateStreamFuture;
70pub use engine::GroupDeleteSnapshotFuture;
71pub use engine::GroupDeleteStreamFuture;
72pub use engine::GroupEngine;
73pub use engine::GroupEngineCreateFuture;
74pub use engine::GroupEngineError;
75pub use engine::GroupEngineFactory;
76pub use engine::GroupEngineMetrics;
77pub use engine::GroupFlushColdFuture;
78pub use engine::GroupForkRefFuture;
79pub use engine::GroupGetStreamAttrsFuture;
80pub use engine::GroupHeadStreamFuture;
81pub use engine::GroupInfraError;
82pub use engine::GroupInstallSnapshotFuture;
83pub use engine::GroupLeaderHint;
84pub use engine::GroupPlanColdFlushFuture;
85pub use engine::GroupPlanColdGcFuture;
86pub use engine::GroupPlanNextColdFlushBatchFuture;
87pub use engine::GroupPlanNextColdFlushFuture;
88pub use engine::GroupPublishSnapshotFuture;
89pub use engine::GroupReadSnapshotFuture;
90pub use engine::GroupReadStreamFuture;
91pub use engine::GroupReadStreamPartsFuture;
92pub use engine::GroupRequireLiveReadOwnerFuture;
93pub use engine::GroupShutdownFuture;
94pub use engine::GroupSnapshotFuture;
95pub use engine::GroupTouchStreamAccessFuture;
96pub use engine::GroupUpdateStreamAttrsFuture;
97pub use engine::GroupWriteBatchFuture;
98pub use engine::GroupWriteResponse;
99pub use engine::in_memory::InMemoryGroupEngine;
100pub use engine::in_memory::InMemoryGroupEngineFactory;
101pub use engine::wal::WalGroupEngine;
102pub use engine::wal::WalGroupEngineFactory;
103pub use error::ErrorStatus;
104pub use error::RuntimeError;
105pub use metrics::RuntimeMailboxSnapshot;
106pub use metrics::RuntimeMetrics;
107pub use metrics::RuntimeMetricsSnapshot;
108pub use request::AckColdGcResponse;
109pub use request::AppendBatchRequest;
110pub use request::AppendBatchResponse;
111pub use request::AppendExternalRequest;
112pub use request::AppendRequest;
113pub use request::AppendResponse;
114pub use request::BootstrapStreamRequest;
115pub use request::BootstrapStreamResponse;
116pub use request::BootstrapUpdate;
117pub use request::CloseStreamRequest;
118pub use request::CloseStreamResponse;
119pub use request::ColdHotBacklog;
120pub use request::ColdWriteAdmission;
121pub use request::CreateStreamExternalRequest;
122pub use request::CreateStreamRequest;
123pub use request::CreateStreamResponse;
124pub use request::DeleteSnapshotRequest;
125pub use request::DeleteStreamRequest;
126pub use request::DeleteStreamResponse;
127pub use request::FlushColdRequest;
128pub use request::FlushColdResponse;
129pub use request::ForkRefResponse;
130pub use request::GetStreamAttrsRequest;
131pub use request::GetStreamAttrsResponse;
132pub use request::GroupReadStreamBody;
133pub use request::GroupReadStreamParts;
134pub use request::HeadStreamRequest;
135pub use request::HeadStreamResponse;
136pub use request::PlanColdFlushRequest;
137pub use request::PlanGroupColdFlushRequest;
138pub use request::PublishSnapshotRequest;
139pub use request::PublishSnapshotResponse;
140pub use request::ReadSnapshotRequest;
141pub use request::ReadSnapshotResponse;
142pub use request::ReadStreamRequest;
143pub use request::ReadStreamResponse;
144pub use request::StreamAppendCount;
145pub use request::TouchStreamAccessResponse;
146pub use request::UpdateStreamAttrsRequest;
147pub use request::UpdateStreamAttrsResponse;
148pub use runtime::RuntimeConfig;
149pub use runtime::RuntimeThreading;
150pub use runtime::ShardRuntime;
151pub use snapshot_store::InlineSnapshotStore;
152#[cfg(not(madsim))]
153pub use snapshot_store::LocalSnapshotStore;
154#[cfg(not(madsim))]
155pub use snapshot_store::S3SnapshotStore;
156pub use snapshot_store::SharedSnapshotStore;
157pub use snapshot_store::SnapshotBytesIterator;
158pub use snapshot_store::SnapshotCompression;
159pub use snapshot_store::SnapshotKey;
160pub use snapshot_store::SnapshotLocation;
161pub use snapshot_store::SnapshotPointer;
162pub use snapshot_store::SnapshotStore;
163pub use snapshot_store::SnapshotStoreError;
164pub use snapshot_store::SnapshotStoreFuture;
165pub use snapshot_store::default_snapshot_store;
166pub use snapshot_store::snapshot_store_from_config;
167pub use ursula_config::config::ColdConfig;
168pub use ursula_stream::ColdChunkRef;
169pub use ursula_stream::ColdFlushCandidate;
170pub use ursula_stream::ColdGcEntry;
171pub use ursula_stream::ColdGcTarget;
172pub use ursula_stream::ExternalPayloadRef;
173pub use ursula_stream::ProducerRequest;
174pub use ursula_stream::StreamAttrs;
175pub use ursula_stream::StreamErrorCode;
176pub use ursula_stream::StreamErrorContext;
177pub use ursula_stream::StreamIntegritySnapshot;
178
179#[cfg(test)]
180mod tests;