aboutsummaryrefslogtreecommitdiff
path: root/src/api/admin
diff options
context:
space:
mode:
authorAlex Auvolat <lx@deuxfleurs.fr>2025-02-05 14:22:10 +0100
committerAlex Auvolat <lx@deuxfleurs.fr>2025-02-05 14:22:10 +0100
commit9f468b4439bdd5e2e67a6215f941556310877155 (patch)
tree7524ac5326e069d014fd25b624d794d52aa5e745 /src/api/admin
parent97be7b38fa3bd3172895f6ab44157e5236d65cd6 (diff)
downloadgarage-9f468b4439bdd5e2e67a6215f941556310877155.tar.gz
garage-9f468b4439bdd5e2e67a6215f941556310877155.zip
cli_v2: implement CreateMetadataSnapshot
Diffstat (limited to 'src/api/admin')
-rw-r--r--src/api/admin/api.rs17
-rw-r--r--src/api/admin/lib.rs1
-rw-r--r--src/api/admin/node.rs23
-rw-r--r--src/api/admin/router_v2.rs2
4 files changed, 43 insertions, 0 deletions
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,
@@ -624,6 +629,18 @@ pub struct RemoveBucketAliasRequest {
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<Garage>,
+ _admin: &Admin,
+ ) -> Result<LocalCreateMetadataSnapshotResponse, Error> {
+ 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),