use crate::edge::edge_table::checkpoint::snapshot::{snapshot_path_for, write_snapshot_file};
use crate::edge::CsrVariant;
use linkrs_core::StorageResult;
use std::path::Path;
pub(crate) fn sync_snapshot_file(base_path: &Path, variant: &CsrVariant) -> StorageResult<()> {
let snapshot = snapshot_path_for(base_path);
match variant {
CsrVariant::Frozen(csr) => write_snapshot_file(csr, &snapshot),
CsrVariant::Multiple(_)
| CsrVariant::Single(_)
| CsrVariant::Pure(_)
| CsrVariant::Bundled(_)
| CsrVariant::None { .. } => {
let _ = std::fs::remove_file(&snapshot);
Ok(())
}
}
}
pub(crate) fn backfill_snapshot_file(base_path: &Path, variant: &CsrVariant) -> StorageResult<()> {
match variant {
CsrVariant::Frozen(_) => {
if snapshot_path_for(base_path).exists() {
return Ok(());
}
sync_snapshot_file(base_path, variant)
}
CsrVariant::Multiple(_)
| CsrVariant::Single(_)
| CsrVariant::Pure(_)
| CsrVariant::Bundled(_)
| CsrVariant::None { .. } => Ok(()),
}
}