68 lines
2.3 KiB
Rust
68 lines
2.3 KiB
Rust
//! BackupGroup — multi-component consistency points.
|
|
|
|
use serde::{Deserialize, Serialize};
|
|
|
|
use super::component::{Destination, RetentionPolicy, ScheduleSpec, TagStrategy, VaultKeyRef,
|
|
VerifyPolicyRef};
|
|
|
|
/// Member of a [`BackupGroup`].
|
|
#[derive(Debug, Clone, Serialize, Deserialize)]
|
|
pub struct GroupMember {
|
|
/// Component name.
|
|
pub component: String,
|
|
/// Optional scope filter; omitted means all scopes of the component.
|
|
#[serde(default)]
|
|
pub scope: Option<String>,
|
|
}
|
|
|
|
/// Coordination strategy discriminator.
|
|
#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
|
|
#[serde(rename_all = "snake_case")]
|
|
pub enum CoordinationKind {
|
|
/// Snapshots fired in parallel; consistency is tag-based (group_id).
|
|
BestEffort,
|
|
/// Ordered pre-hooks pause writers, snapshot, unquiesce. Bounded downtime.
|
|
QuiesceWindow,
|
|
/// Atomic at CSI layer via Longhorn VolumeSnapshotGroup.
|
|
CsiConsistentGroup,
|
|
}
|
|
|
|
/// Coordination strategy applied during a group run.
|
|
#[derive(Debug, Clone, Serialize, Deserialize)]
|
|
pub struct CoordinationStrategy {
|
|
/// Variant.
|
|
pub kind: CoordinationKind,
|
|
/// Quiesce sequence (`QuiesceWindow`).
|
|
#[serde(default)]
|
|
pub quiesce_seq: Vec<String>,
|
|
/// Maximum downtime for `QuiesceWindow`.
|
|
#[serde(default)]
|
|
pub max_downtime: Option<String>,
|
|
/// CSI VolumeSnapshotClass for `CsiConsistentGroup`.
|
|
#[serde(default)]
|
|
pub snapshot_class: Option<String>,
|
|
}
|
|
|
|
/// A group of components/scopes captured atomically (à la Chandy-Lamport).
|
|
#[derive(Debug, Clone, Serialize, Deserialize)]
|
|
pub struct BackupGroup {
|
|
/// Group identifier (used in CLI: `--group <name>`).
|
|
pub name: String,
|
|
/// Members participating in the consistent cut.
|
|
pub members: Vec<GroupMember>,
|
|
/// Group schedule (independent of per-member policies).
|
|
pub schedule: ScheduleSpec,
|
|
/// Coordination strategy.
|
|
pub coordination: CoordinationStrategy,
|
|
/// Retention shared across all members for the group's snapshots.
|
|
pub retention: RetentionPolicy,
|
|
/// Destinations (same `MultiDestinationRequired` invariant).
|
|
pub destinations: Vec<Destination>,
|
|
/// Encryption key.
|
|
pub encryption: VaultKeyRef,
|
|
/// Tag strategy.
|
|
pub tag_strategy: TagStrategy,
|
|
/// Optional verify reference.
|
|
#[serde(default)]
|
|
pub verify: Option<VerifyPolicyRef>,
|
|
}
|