use serde::{Deserialize, Serialize};
use crate::grid::hardening::{ReplicatedValueRecord, ReplicatedValueStore, ValueStoreError};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum DurableInspectChecksumStatus {
Verified,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct DurableInspectRecord {
pub key: String,
pub partition: u32,
pub version: u64,
pub epoch: u64,
pub tombstone: bool,
pub approx_bytes: u64,
pub checksum_status: DurableInspectChecksumStatus,
}
impl DurableInspectRecord {
fn from_record(key: String, record: ReplicatedValueRecord) -> Self {
Self {
key,
partition: record.partition.value(),
version: record.version,
epoch: record.epoch.value(),
tombstone: record.is_tombstone(),
approx_bytes: record.approx_bytes(),
checksum_status: DurableInspectChecksumStatus::Verified,
}
}
}
pub fn inspect_replicated_store<S>(store: &S) -> Result<Vec<DurableInspectRecord>, ValueStoreError>
where
S: ReplicatedValueStore,
{
let mut records = store.scan_all()?;
records.sort_by(|left, right| left.0.cmp(&right.0));
Ok(records
.into_iter()
.map(|(key, record)| DurableInspectRecord::from_record(key, record))
.collect())
}