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`] envelope around the
8//!   canonical [`ursula_stream::StreamCommand`], plus `From` conversions from
9//!   request values into that command.
10//! - [`error`]: runtime-level error type [`RuntimeError`].
11//! - [`engine`]: the `GroupEngine` trait, factory, metrics, and the boxed-future
12//!   type aliases that form the replaceable per-group engine boundary, plus the
13//!   in-memory implementation under [`engine::in_memory`].
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//! - [`ops`]: declarative manifest of the uniform runtime operations; expands
18//!   into the per-operation actor and client plumbing.
19//! - [`metrics`]: runtime metrics shared across cores; lock-free counters.
20
21mod admission;
22pub mod cold_index;
23mod cold_store;
24pub mod cold_worker;
25mod command;
26mod core_worker;
27mod engine;
28
29mod error;
30mod group_actor;
31pub mod journal;
32mod metrics;
33mod ops;
34mod request;
35mod rt;
36mod runtime;
37mod snapshot_store;
38mod trace;
39
40pub use admission::RaftUncommittedAdmission;
41pub use cold_index::ColdIndexPage;
42pub use cold_index::ColdIndexPageCache;
43pub use cold_index::ColdIndexPageKey;
44pub use cold_index::ColdIndexPageStore;
45pub use cold_index::ColdStoreColdIndexPageStore;
46pub use cold_index::InMemoryColdIndexPageStore;
47pub use cold_index::cold_index_prefix;
48pub use cold_index::load_cold_chunks_from_pages;
49pub use cold_index::replace_cold_chunk_index_pages;
50pub use cold_index::replace_cold_chunk_index_pages_with_rollback;
51pub use cold_index::rollback_cold_index_pages;
52pub use cold_index::select_cold_chunk_compaction;
53pub use cold_index::write_cold_chunk_index_pages;
54pub use cold_index::write_external_segment_index_pages;
55pub use cold_store::ColdReadCacheParams;
56pub use cold_store::ColdStore;
57pub use cold_store::ColdStoreEvent;
58pub use cold_store::ColdStoreFault;
59pub use cold_store::ColdStoreFaultContext;
60pub use cold_store::ColdStoreFaultEffect;
61pub use cold_store::ColdStoreHandle;
62pub use cold_store::ColdStoreInfo;
63pub use cold_store::ColdStoreOperation;
64pub use cold_store::new_cold_chunk_path;
65pub use cold_store::new_external_payload_path;
66pub use cold_worker::spawn_cold_compaction_worker_if_configured;
67pub use cold_worker::spawn_cold_flush_worker_if_configured;
68pub use cold_worker::spawn_cold_gc_worker_if_configured;
69pub use command::GroupSnapshot;
70pub use command::GroupWriteCommand;
71pub use engine::GroupAckColdGcFuture;
72pub use engine::GroupAdvanceRetentionFuture;
73pub use engine::GroupAppendBatchFuture;
74pub use engine::GroupAppendBatchResponse;
75pub use engine::GroupAppendFuture;
76pub use engine::GroupAppendTransactionFuture;
77pub use engine::GroupBootstrapStreamFuture;
78pub use engine::GroupBucketUsageFuture;
79pub use engine::GroupCloseStreamFuture;
80pub use engine::GroupColdHotBacklogFuture;
81pub use engine::GroupCompactColdFuture;
82pub use engine::GroupCreateStreamFuture;
83pub use engine::GroupDeleteSnapshotFuture;
84pub use engine::GroupDeleteStreamFuture;
85pub use engine::GroupEngine;
86pub use engine::GroupEngineCreateFuture;
87pub use engine::GroupEngineError;
88pub use engine::GroupEngineFactory;
89pub use engine::GroupEngineMetrics;
90pub use engine::GroupFlushColdFuture;
91pub use engine::GroupGetStreamAttrsFuture;
92pub use engine::GroupHeadStreamFuture;
93pub use engine::GroupImportGroupStateFuture;
94pub use engine::GroupInfraError;
95pub use engine::GroupInstallSnapshotFuture;
96pub use engine::GroupLeaderHint;
97pub use engine::GroupPlanColdFlushFuture;
98pub use engine::GroupPlanColdGcFuture;
99pub use engine::GroupPlanNextColdFlushBatchFuture;
100pub use engine::GroupPublishSnapshotFuture;
101pub use engine::GroupPurgeBucketFuture;
102pub use engine::GroupReadSnapshotFuture;
103pub use engine::GroupReadStreamFuture;
104pub use engine::GroupReadStreamPartsFuture;
105pub use engine::GroupRequireLiveReadOwnerFuture;
106pub use engine::GroupSetBucketQuotaFuture;
107pub use engine::GroupShutdownFuture;
108pub use engine::GroupSnapshotFuture;
109pub use engine::GroupTouchStreamAccessFuture;
110pub use engine::GroupUpdateStreamAttrsFuture;
111pub use engine::GroupWriteBatchFuture;
112pub use engine::GroupWriteFuture;
113pub use engine::GroupWriteResponse;
114pub use engine::in_memory::InMemoryGroupEngine;
115pub use engine::in_memory::InMemoryGroupEngineFactory;
116pub use error::ErrorStatus;
117pub use error::RuntimeError;
118pub use metrics::RuntimeMailboxSnapshot;
119pub use metrics::RuntimeMetrics;
120pub use metrics::RuntimeMetricsSnapshot;
121pub use request::AckColdGcResponse;
122pub use request::AdvanceRetentionRequest;
123pub use request::AdvanceRetentionResponse;
124pub use request::AppendBatchRequest;
125pub use request::AppendBatchResponse;
126pub use request::AppendExternalRequest;
127pub use request::AppendRequest;
128pub use request::AppendResponse;
129pub use request::AppendTransactionRequest;
130pub use request::AppendTransactionResponse;
131pub use request::BootstrapStreamRequest;
132pub use request::BootstrapStreamResponse;
133pub use request::BootstrapUpdate;
134pub use request::CloseStreamRequest;
135pub use request::CloseStreamResponse;
136pub use request::ColdHotBacklog;
137pub use request::ColdWriteAdmission;
138pub use request::CompactColdRequest;
139pub use request::CompactColdResponse;
140pub use request::CreateStreamExternalRequest;
141pub use request::CreateStreamRequest;
142pub use request::CreateStreamResponse;
143pub use request::DeleteSnapshotRequest;
144pub use request::DeleteStreamRequest;
145pub use request::DeleteStreamResponse;
146pub use request::FlushColdRequest;
147pub use request::FlushColdResponse;
148pub use request::GetStreamAttrsRequest;
149pub use request::GetStreamAttrsResponse;
150pub use request::GroupReadStreamBody;
151pub use request::GroupReadStreamParts;
152pub use request::HeadStreamRequest;
153pub use request::HeadStreamResponse;
154pub use request::ImportGroupStateRequest;
155pub use request::ImportGroupStateResponse;
156pub use request::PlanColdFlushRequest;
157pub use request::PlanGroupColdFlushRequest;
158pub use request::PublishSnapshotRequest;
159pub use request::PublishSnapshotResponse;
160pub use request::PurgeBucketResponse;
161pub use request::ReadSnapshotRequest;
162pub use request::ReadSnapshotResponse;
163pub use request::ReadStreamRequest;
164pub use request::ReadStreamResponse;
165pub use request::SetBucketQuotaRequest;
166pub use request::SetBucketQuotaResponse;
167pub use request::StreamAppendCount;
168pub use request::TouchStreamAccessResponse;
169pub use request::UpdateStreamAttrsRequest;
170pub use request::UpdateStreamAttrsResponse;
171pub use runtime::PurgeBucketReport;
172pub use runtime::RuntimeConfig;
173pub use runtime::RuntimeThreading;
174pub use runtime::ShardRuntime;
175pub use snapshot_store::InlineSnapshotStore;
176#[cfg(not(madsim))]
177pub use snapshot_store::S3SnapshotStore;
178pub use snapshot_store::SharedSnapshotStore;
179pub use snapshot_store::SnapshotBytesIterator;
180pub use snapshot_store::SnapshotCompression;
181pub use snapshot_store::SnapshotKey;
182pub use snapshot_store::SnapshotLocation;
183pub use snapshot_store::SnapshotPointer;
184pub use snapshot_store::SnapshotReferenceConfig;
185pub use snapshot_store::SnapshotStore;
186pub use snapshot_store::SnapshotStoreError;
187pub use snapshot_store::SnapshotStoreFuture;
188pub use snapshot_store::default_snapshot_store;
189pub use snapshot_store::snapshot_store_from_config;
190pub use ursula_config::config::ColdConfig;
191pub use ursula_stream::COMMITTED_WRITE_UNIT_BYTES;
192pub use ursula_stream::ColdChunkRef;
193pub use ursula_stream::ColdFlushCandidate;
194pub use ursula_stream::ColdGcEntry;
195pub use ursula_stream::ColdGcTarget;
196pub use ursula_stream::ExternalPayloadRef;
197pub use ursula_stream::ProducerRequest;
198pub use ursula_stream::StreamAttrs;
199pub use ursula_stream::StreamErrorCode;
200pub use ursula_stream::StreamErrorContext;
201pub use ursula_stream::StreamIntegritySnapshot;
202pub use ursula_stream::StreamRecordRange;
203pub use ursula_stream::StreamSnapshot;
204
205#[cfg(test)]
206mod tests;