diff options
Diffstat (limited to 'src/garage/cli/repair.rs')
-rw-r--r-- | src/garage/cli/repair.rs | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/src/garage/cli/repair.rs b/src/garage/cli/repair.rs new file mode 100644 index 00000000..45024e71 --- /dev/null +++ b/src/garage/cli/repair.rs @@ -0,0 +1,47 @@ +use std::path::PathBuf; + +use garage_util::config::*; +use garage_util::error::*; + +use garage_model::garage::Garage; + +use crate::cli::structs::*; +use crate::secrets::{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(()) +} |