From c36cba28d62cfde3a68db6d8db0d9e63d53d3a67 Mon Sep 17 00:00:00 2001 From: John Spray Date: Thu, 17 Aug 2023 10:01:28 +0100 Subject: [PATCH] pageserver: generalize flush API --- pageserver/src/http/openapi_spec.yml | 10 +++++++++- pageserver/src/http/routes.rs | 17 +++++++++++++---- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/pageserver/src/http/openapi_spec.yml b/pageserver/src/http/openapi_spec.yml index b8e44e59c3..2845cf5e38 100644 --- a/pageserver/src/http/openapi_spec.yml +++ b/pageserver/src/http/openapi_spec.yml @@ -52,7 +52,15 @@ paths: schema: type: object - /v1/deletion_queue/flush_execute: + /v1/deletion_queue/flush: + parameters: + - name: execute + in: query + required: false + schema: + type: boolean + description: + If true, attempt to execute deletions. If false, just flush deletions to persistent deletion lists. put: description: Execute any deletions currently enqueued security: [] diff --git a/pageserver/src/http/routes.rs b/pageserver/src/http/routes.rs index cadb9f539e..d0e37b67f3 100644 --- a/pageserver/src/http/routes.rs +++ b/pageserver/src/http/routes.rs @@ -1132,7 +1132,7 @@ async fn always_panic_handler( json_response(StatusCode::NO_CONTENT, ()) } -async fn deletion_queue_flush_execute( +async fn deletion_queue_flush( r: Request, cancel: CancellationToken, ) -> Result, ApiError> { @@ -1143,9 +1143,18 @@ async fn deletion_queue_flush_execute( return json_response(StatusCode::OK, ()); } + let execute = parse_query_param(&r, "execute")?.unwrap_or(false); + let queue_client = state.deletion_queue.new_client(); + tokio::select! { - _ = queue_client.flush_execute()=> { + _ = async { + if execute { + queue_client.flush_execute().await; + } else { + queue_client.flush().await; + } + } => { json_response(StatusCode::OK, ()) }, _ = cancel.cancelled() => { @@ -1478,8 +1487,8 @@ pub fn make_router( .put("/v1/disk_usage_eviction/run", |r| { api_handler(r, disk_usage_eviction_run) }) - .put("/v1/deletion_queue/flush_execute", |r| { - api_handler(r, deletion_queue_flush_execute) + .put("/v1/deletion_queue/flush", |r| { + api_handler(r, deletion_queue_flush) }) .put("/v1/tenant/:tenant_id/break", |r| { testing_api_handler("set tenant state to broken", r, handle_tenant_break)