aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBaptiste Jonglez <git@bitsofnetworks.org>2025-01-24 19:21:08 +0100
committerBaptiste Jonglez <git@bitsofnetworks.org>2025-02-07 00:29:43 +0100
commita2e134f036a5bdeca55ae0ce6d731d1ec37a454c (patch)
tree762e913d0e6450e7aa40aa2c8cbf27fe42ab4d8a /src
parent06aa4b604fe0a9b5230bc0626d883e5b37953dec (diff)
downloadgarage-a2e134f036a5bdeca55ae0ce6d731d1ec37a454c.tar.gz
garage-a2e134f036a5bdeca55ae0ce6d731d1ec37a454c.zip
db-snapshot: propagate any node snapshot error through RPC callhandle_snapshot_errors
In particular, it means that "garage meta snapshot --all" will get an exit code of 1 if any node fails to snapshot. This makes sure that any external tool trying to snapshot nodes (e.g. from cron) will be aware of the failure. Fix #920
Diffstat (limited to 'src')
-rw-r--r--src/garage/admin/mod.rs6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/garage/admin/mod.rs b/src/garage/admin/mod.rs
index 176911fb..1a4ff853 100644
--- a/src/garage/admin/mod.rs
+++ b/src/garage/admin/mod.rs
@@ -497,7 +497,11 @@ impl AdminRpcHandler {
ret.push(format!("{:?}\t{}", to, res_str));
}
- Ok(AdminRpc::Ok(format_table_to_string(ret)))
+ if resps.iter().any(Result::is_err) {
+ Err(GarageError::Message(format_table_to_string(ret)).into())
+ } else {
+ Ok(AdminRpc::Ok(format_table_to_string(ret)))
+ }
}
MetaOperation::Snapshot { all: false } => {
garage_model::snapshot::async_snapshot_metadata(&self.garage).await?;