From 9f468b4439bdd5e2e67a6215f941556310877155 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Wed, 5 Feb 2025 14:22:10 +0100 Subject: cli_v2: implement CreateMetadataSnapshot --- src/api/admin/api.rs | 17 +++++++++++++++++ src/api/admin/lib.rs | 1 + src/api/admin/node.rs | 23 +++++++++++++++++++++++ src/api/admin/router_v2.rs | 2 ++ 4 files changed, 43 insertions(+) create mode 100644 src/api/admin/node.rs (limited to 'src/api/admin') diff --git a/src/api/admin/api.rs b/src/api/admin/api.rs index cde11bac..3f041208 100644 --- a/src/api/admin/api.rs +++ b/src/api/admin/api.rs @@ -77,6 +77,9 @@ admin_endpoints![ AddBucketAlias, RemoveBucketAlias, + // Node operations + CreateMetadataSnapshot, + // Worker operations ListWorkers, GetWorkerInfo, @@ -91,6 +94,8 @@ admin_endpoints![ ]; local_admin_endpoints![ + // Node operations + CreateMetadataSnapshot, // Background workers ListWorkers, GetWorkerInfo, @@ -623,6 +628,18 @@ pub struct RemoveBucketAliasRequest { #[derive(Debug, Clone, Serialize, Deserialize)] pub struct RemoveBucketAliasResponse(pub GetBucketInfoResponse); +// ********************************************** +// Node operations +// ********************************************** + +// ---- CreateMetadataSnapshot ---- + +#[derive(Debug, Clone, Serialize, Deserialize, Default)] +pub struct LocalCreateMetadataSnapshotRequest; + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct LocalCreateMetadataSnapshotResponse; + // ********************************************** // Worker operations // ********************************************** diff --git a/src/api/admin/lib.rs b/src/api/admin/lib.rs index e7ee37af..cc673eef 100644 --- a/src/api/admin/lib.rs +++ b/src/api/admin/lib.rs @@ -16,6 +16,7 @@ mod key; mod special; mod block; +mod node; mod worker; use std::sync::Arc; diff --git a/src/api/admin/node.rs b/src/api/admin/node.rs new file mode 100644 index 00000000..8c79acfd --- /dev/null +++ b/src/api/admin/node.rs @@ -0,0 +1,23 @@ +use std::sync::Arc; + +use async_trait::async_trait; + +use garage_model::garage::Garage; + +use crate::api::*; +use crate::error::Error; +use crate::{Admin, RequestHandler}; + +#[async_trait] +impl RequestHandler for LocalCreateMetadataSnapshotRequest { + type Response = LocalCreateMetadataSnapshotResponse; + + async fn handle( + self, + garage: &Arc, + _admin: &Admin, + ) -> Result { + garage_model::snapshot::async_snapshot_metadata(garage).await?; + Ok(LocalCreateMetadataSnapshotResponse) + } +} diff --git a/src/api/admin/router_v2.rs b/src/api/admin/router_v2.rs index 74822007..dac6c5f9 100644 --- a/src/api/admin/router_v2.rs +++ b/src/api/admin/router_v2.rs @@ -59,6 +59,8 @@ impl AdminApiRequest { // Bucket aliases POST AddBucketAlias (body), POST RemoveBucketAlias (body), + // Node APIs + POST CreateMetadataSnapshot (default::body, query::node), // Worker APIs POST ListWorkers (body_field, query::node), POST GetWorkerInfo (body_field, query::node), -- cgit v1.2.3