From fb95a8819fe1479e8be0ea8105ce26a34cc841e7 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Wed, 27 Aug 2025 23:53:25 +0200 Subject: [PATCH] fix server panic caused by `garage json-api Metrics` (fix #1132) --- src/api/admin/api.rs | 2 +- src/api/admin/macros.rs | 12 +++++++----- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/api/admin/api.rs b/src/api/admin/api.rs index fc2d9b76..357d8278 100644 --- a/src/api/admin/api.rs +++ b/src/api/admin/api.rs @@ -12,7 +12,7 @@ use garage_rpc::*; use garage_model::garage::Garage; -use garage_api_common::helpers::is_default; +use garage_api_common::{common_error::CommonError, helpers::is_default}; use crate::api_server::{find_matching_nodes, AdminRpc, AdminRpcResponse}; use crate::error::Error; diff --git a/src/api/admin/macros.rs b/src/api/admin/macros.rs index bf841295..f11a2a25 100644 --- a/src/api/admin/macros.rs +++ b/src/api/admin/macros.rs @@ -74,16 +74,18 @@ macro_rules! admin_endpoints { type Response = AdminApiResponse; async fn handle(self, garage: &Arc, admin: &Admin) -> Result { - Ok(match self { + match self { $( - AdminApiRequest::$special_endpoint(_) => panic!( - concat!(stringify!($special_endpoint), " needs to go through a special handler") + AdminApiRequest::$special_endpoint(_) => Err( + Error::Common(CommonError::BadRequest( + concat!(stringify!($special_endpoint), " cannot be used outside of the HTTP Admin API").into() + )) ), )* $( - AdminApiRequest::$endpoint(req) => AdminApiResponse::$endpoint(req.handle(garage, admin).await?), + AdminApiRequest::$endpoint(req) => Ok(AdminApiResponse::$endpoint(req.handle(garage, admin).await?)), )* - }) + } } } }