cli_v2: implement CreateMetadataSnapshot

This commit is contained in:
Alex Auvolat
2025-02-05 14:22:10 +01:00
parent 97be7b38fa
commit 9f468b4439
9 changed files with 94 additions and 68 deletions
+17
View File
@@ -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
// **********************************************
+1
View File
@@ -16,6 +16,7 @@ mod key;
mod special;
mod block;
mod node;
mod worker;
use std::sync::Arc;
+23
View File
@@ -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<Garage>,
_admin: &Admin,
) -> Result<LocalCreateMetadataSnapshotResponse, Error> {
garage_model::snapshot::async_snapshot_metadata(garage).await?;
Ok(LocalCreateMetadataSnapshotResponse)
}
}
+2
View File
@@ -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),