From c60b91369aef527f63aebc99d1e6e148dbece506 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arpad=20M=C3=BCller?= Date: Wed, 22 Jan 2025 19:52:16 +0100 Subject: [PATCH] Expose safekeeper APIs for creation and deletion (#10478) Add APIs for timeline creation and deletion to the safekeeper client crate. Going to be used later in #10440. Split off from #10440. Part of https://github.com/neondatabase/neon/issues/9011 --- safekeeper/client/src/mgmt_api.rs | 32 ++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/safekeeper/client/src/mgmt_api.rs b/safekeeper/client/src/mgmt_api.rs index 5727f32509f7..f65bfaa6d5da 100644 --- a/safekeeper/client/src/mgmt_api.rs +++ b/safekeeper/client/src/mgmt_api.rs @@ -4,7 +4,7 @@ //! united. use reqwest::{IntoUrl, Method, StatusCode}; -use safekeeper_api::models::TimelineStatus; +use safekeeper_api::models::{TimelineCreateRequest, TimelineStatus}; use std::error::Error as _; use utils::{ http::error::HttpErrorBody, @@ -76,6 +76,28 @@ impl Client { } } + pub async fn create_timeline(&self, req: &TimelineCreateRequest) -> Result { + let uri = format!( + "{}/v1/tenant/{}/timeline/{}", + self.mgmt_api_endpoint, req.tenant_id, req.timeline_id + ); + let resp = self.post(&uri, req).await?; + resp.json().await.map_err(Error::ReceiveBody) + } + + pub async fn delete_timeline( + &self, + tenant_id: TenantId, + timeline_id: TimelineId, + ) -> Result { + let uri = format!( + "{}/v1/tenant/{}/timeline/{}", + self.mgmt_api_endpoint, tenant_id, timeline_id + ); + let resp = self.request(Method::DELETE, &uri, ()).await?; + resp.json().await.map_err(Error::ReceiveBody) + } + pub async fn timeline_status( &self, tenant_id: TenantId, @@ -107,6 +129,14 @@ impl Client { self.get(&uri).await } + async fn post( + &self, + uri: U, + body: B, + ) -> Result { + self.request(Method::POST, uri, body).await + } + async fn get(&self, uri: U) -> Result { self.request(Method::GET, uri, ()).await }