pub struct SegmentedVolume { /* private fields */ }Expand description
WAL namespace: the zonal replica factories for segment data (one per zone) plus one regional factory hosting the manifest control register.
Implementations§
Source§impl SegmentedVolume
impl SegmentedVolume
Sourcepub fn new(
factories: Vec<GrpcReplicaFactory>,
manifest_factory: GrpcReplicaFactory,
prefix: impl Into<String>,
client_config: ClientConfig,
) -> Result<Self, Error>
pub fn new( factories: Vec<GrpcReplicaFactory>, manifest_factory: GrpcReplicaFactory, prefix: impl Into<String>, client_config: ClientConfig, ) -> Result<Self, Error>
Bind 1, 3, or 5 GCS Rapid zonal buckets to one WAL object prefix.
Any other factory count returns crate::Error. Durability and
availability follow the strict-majority quorum: a single replica
tolerates no zone loss, three tolerate one, five tolerate two.
Each element must target a different zone. Keep both the list order and the factory’s diagnostic zone index stable across restarts; recovery treats list position as the replica identity. The prefix is dedicated to this WAL. The zonal data prefix contains opaque, creation-ordered segment ids; the same prefix in the regional bucket contains the manifest control object.
The client validates replica count and bucket-name consistency but
cannot verify physical placement. Operators must provision Rapid
buckets in distinct zones of one region. Pass full v2 bucket resource
names and use a gRPC-compatible endpoint such as
https://storage.googleapis.com; Cloud Storage regional JSON/XML
endpoints do not support gRPC.
Registers persist the ordered zonal bucket names in
chorus.buckets; its length is the replica count. A later wrong,
reordered, or duplicate set is rejected, and registers without the
binding fail closed.
Independent processes may recover the same prefix concurrently. GCS
append takeover and conditional segment creation elect one writer; the
loser receives a terminal fencing or conditional-create error. Rotation
policy is supplied later through crate::WalEngineConfig, not through
this storage description.
Sourcepub fn new_with_metrics_recorder(
factories: Vec<GrpcReplicaFactory>,
manifest_factory: GrpcReplicaFactory,
prefix: impl Into<String>,
client_config: ClientConfig,
metrics_recorder: Arc<dyn MetricsRecorder>,
) -> Result<Self, Error>
pub fn new_with_metrics_recorder( factories: Vec<GrpcReplicaFactory>, manifest_factory: GrpcReplicaFactory, prefix: impl Into<String>, client_config: ClientConfig, metrics_recorder: Arc<dyn MetricsRecorder>, ) -> Result<Self, Error>
Bind a WAL namespace and emit metrics through metrics_recorder.
Chorus registers all handles during construction and updates them directly on event paths. The recorder owns aggregation and export; the WAL does not retain a readable metrics registry.
Most handles have no labels. When one backend recorder serves several volumes, wrap it per volume and inject a stable volume label into every registration; otherwise those volumes share indistinguishable series.
Sourcepub fn new_with_manifest_store(
factories: Vec<GrpcReplicaFactory>,
manifest_store: Arc<dyn ManifestStore>,
prefix: impl Into<String>,
client_config: ClientConfig,
) -> Result<Self, Error>
pub fn new_with_manifest_store( factories: Vec<GrpcReplicaFactory>, manifest_store: Arc<dyn ManifestStore>, prefix: impl Into<String>, client_config: ClientConfig, ) -> Result<Self, Error>
Bind a WAL namespace whose manifest register lives in a caller-supplied
ManifestStore instead of the default regional GCS object.
The store must be scoped to exactly this WAL (one register per WAL prefix) and provide the linearizable compare-and-swap semantics the trait documents; Firestore, Spanner, or a SQL row with optimistic locking all qualify. Segment data still lives in the zonal factories. The required bucket binding covers the ordered zonal data factories; the caller remains responsible for scoping the custom store to this WAL.
Sourcepub fn new_with_manifest_store_and_metrics_recorder(
factories: Vec<GrpcReplicaFactory>,
manifest_store: Arc<dyn ManifestStore>,
prefix: impl Into<String>,
client_config: ClientConfig,
metrics_recorder: Arc<dyn MetricsRecorder>,
) -> Result<Self, Error>
pub fn new_with_manifest_store_and_metrics_recorder( factories: Vec<GrpcReplicaFactory>, manifest_store: Arc<dyn ManifestStore>, prefix: impl Into<String>, client_config: ClientConfig, metrics_recorder: Arc<dyn MetricsRecorder>, ) -> Result<Self, Error>
Self::new_with_manifest_store with a metrics recorder.
Sourcepub async fn recover(&self, checkpoint: WalSeqNo) -> Result<Recovery, Error>
pub async fn recover(&self, checkpoint: WalSeqNo) -> Result<Recovery, Error>
Fence and seal the prior writer, then prepare database startup replay.
checkpoint is the first record not represented by the database’s durable
state. The returned Recovery emits the fixed range
[checkpoint, Recovery::end) and does not create an appendable segment
yet. Apply every emitted record, consume the stream through None, then
call Recovery::start to conditionally create the manifest-selected
active segment and begin admission.
Sourcepub async fn recover_from_committed_floor(&self) -> Result<Recovery, Error>
pub async fn recover_from_committed_floor(&self) -> Result<Recovery, Error>
Recover from the truncation floor committed in the manifest.
This is intended for diagnostic and maintenance tools that do not own a
database checkpoint. Database integrations should use Self::recover
with their durable replay boundary.
Sourcepub async fn repair_sealed_segments(&self) -> Result<RepairReport, Error>
pub async fn repair_sealed_segments(&self) -> Result<RepairReport, Error>
Recover the committed chain and repair immutable sealed segment copies.
This volume-level primitive is intended for diagnostic and maintenance
tools that need a detailed RepairReport. Applications should run the
WAL engine, which performs the same repair automatically in the
background. The operation claims the WAL writer epoch and creates the
next active segment, just like normal recovery startup.
Trait Implementations§
Source§impl Clone for SegmentedVolume
impl Clone for SegmentedVolume
Source§fn clone(&self) -> SegmentedVolume
fn clone(&self) -> SegmentedVolume
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreAuto Trait Implementations§
impl !RefUnwindSafe for SegmentedVolume
impl !UnwindSafe for SegmentedVolume
impl Freeze for SegmentedVolume
impl Send for SegmentedVolume
impl Sync for SegmentedVolume
impl Unpin for SegmentedVolume
impl UnsafeUnpin for SegmentedVolume
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
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> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request