mod row;
pub use row::{
encode_label_set, estimated_shadow_value_bytes, node_table_key, relationship_table_key,
ResidualRowBlob,
};
pub const COLUMN_GROUP_SHADOW_DIR: &str = "column-groups";
#[derive(Debug, Clone, Default, PartialEq, Eq)]
pub enum ColumnarShadowCheckpointStatus {
#[default]
Published,
Failed { error: String },
}
#[derive(Debug, Clone, Default, PartialEq, Eq)]
pub struct ColumnarShadowCheckpointReport {
pub status: ColumnarShadowCheckpointStatus,
pub generation: u64,
pub source_commit_epoch: u64,
pub table_count: usize,
pub dirty_table_count: usize,
pub reused_table_count: usize,
pub group_bytes_written: u64,
pub metadata_bytes_written: u64,
pub peak_builder_bytes: u64,
pub admitted_budget_bytes: u64,
pub flushed_group_count: usize,
pub oversized_row_group_count: usize,
pub reclaimed_file_count: usize,
pub reclaim_failed_count: usize,
pub elapsed_micros: u64,
}
#[derive(Debug, Clone, Default, PartialEq, Eq)]
pub struct ColumnarShadowRecoveryStatus {
pub validated: bool,
pub discarded: bool,
pub error: Option<String>,
}
#[doc(hidden)]
pub const DEFAULT_SHADOW_BUFFER_BUDGET_BYTES: u64 = 64 * 1024 * 1024;
#[doc(hidden)]
#[derive(Debug, Clone)]
pub struct ColumnarShadowState {
pub enabled: bool,
pub all_dirty: bool,
pub dirty: std::collections::BTreeSet<crate::column_group::manifest::ColumnGroupTableKey>,
pub catalog: Option<crate::column_group::manifest::PublishedColumnGroupCatalog>,
pub buffer_budget_bytes: u64,
pub metadata_budget_bytes: u64,
pub recovery: ColumnarShadowRecoveryStatus,
pub report: Option<ColumnarShadowCheckpointReport>,
}
impl Default for ColumnarShadowState {
fn default() -> Self {
Self {
enabled: false,
all_dirty: false,
dirty: std::collections::BTreeSet::new(),
catalog: None,
buffer_budget_bytes: DEFAULT_SHADOW_BUFFER_BUDGET_BYTES,
metadata_budget_bytes:
crate::column_group::shadow_metadata::DEFAULT_SHADOW_METADATA_BUDGET_BYTES,
recovery: ColumnarShadowRecoveryStatus::default(),
report: None,
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn shadow_contract_defaults_to_an_empty_published_observation() {
assert_eq!(
ColumnarShadowCheckpointReport::default().status,
ColumnarShadowCheckpointStatus::Published
);
assert_eq!(
ColumnarShadowRecoveryStatus::default(),
ColumnarShadowRecoveryStatus {
validated: false,
discarded: false,
error: None,
}
);
}
}