48 lines
1.0 KiB
Rust
48 lines
1.0 KiB
Rust
use std::path::PathBuf;
|
|
|
|
use garage_util::config::*;
|
|
use garage_util::error::*;
|
|
|
|
use garage_model::garage::Garage;
|
|
|
|
use crate::cli::structs::*;
|
|
use crate::{fill_secrets, Secrets};
|
|
|
|
pub async fn offline_repair(
|
|
config_file: PathBuf,
|
|
secrets: Secrets,
|
|
opt: OfflineRepairOpt,
|
|
) -> Result<(), Error> {
|
|
if !opt.yes {
|
|
return Err(Error::Message(
|
|
"Please add the --yes flag to launch repair operation".into(),
|
|
));
|
|
}
|
|
|
|
info!("Loading configuration...");
|
|
let config = fill_secrets(read_config(config_file)?, secrets);
|
|
|
|
info!("Initializing Garage main data store...");
|
|
let garage = Garage::new(config)?;
|
|
|
|
info!("Launching repair operation...");
|
|
match opt.what {
|
|
#[cfg(feature = "k2v")]
|
|
OfflineRepairWhat::K2VItemCounters => {
|
|
garage
|
|
.k2v
|
|
.counter_table
|
|
.offline_recount_all(&garage.k2v.item_table)?;
|
|
}
|
|
OfflineRepairWhat::ObjectCounters => {
|
|
garage
|
|
.object_counter_table
|
|
.offline_recount_all(&garage.object_table)?;
|
|
}
|
|
}
|
|
|
|
info!("Repair operation finished, shutting down...");
|
|
|
|
Ok(())
|
|
}
|