From e5e054187e27d34ed44c19863d5e577745a35cb5 Mon Sep 17 00:00:00 2001 From: Baptiste Jonglez Date: Wed, 22 Jan 2025 13:31:05 +0100 Subject: [PATCH] db-snapshot: Add error handling to metadata snapshot creation Fix #920 --- src/model/snapshot.rs | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/src/model/snapshot.rs b/src/model/snapshot.rs index 87756f60..2f54725e 100644 --- a/src/model/snapshot.rs +++ b/src/model/snapshot.rs @@ -43,13 +43,32 @@ pub fn snapshot_metadata(garage: &Garage) -> Result<(), Error> { let mut snapshots_dir = garage.config.metadata_dir.clone(); snapshots_dir.push("snapshots"); - fs::create_dir_all(&snapshots_dir)?; + if let Err(e) = fs::create_dir_all(&snapshots_dir) { + drop(lock); + error!( + "Failed to create snapshots directory '{}': {}", + snapshots_dir.display(), + e + ); + return Err(Error::Message(format!( + "Failed to create snapshots directory '{}': {}", + snapshots_dir.display(), + e + ))); + } let mut new_path = snapshots_dir.clone(); new_path.push(chrono::Utc::now().to_rfc3339_opts(chrono::SecondsFormat::Secs, true)); info!("Snapshotting metadata db to {}", new_path.display()); - garage.db.snapshot(&new_path)?; + if let Err(e) = garage.db.snapshot(&new_path) { + drop(lock); + error!("Failed to snapshot metadata db: {}", e); + return Err(Error::Message(format!( + "Failed to snapshot metadata db: {}", + e + ))); + } info!("Metadata db snapshot finished"); if let Err(e) = cleanup_snapshots(&snapshots_dir) {