From 8425b6ab2140fee91869d4ff237cc6a8e34648e6 Mon Sep 17 00:00:00 2001 From: Christian Schwarz Date: Thu, 4 May 2023 17:08:02 +0200 Subject: [PATCH] clarifications around the QueueUninitialized error --- pageserver/src/tenant.rs | 11 ++++++++++- pageserver/src/tenant/remote_timeline_client.rs | 3 ++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/pageserver/src/tenant.rs b/pageserver/src/tenant.rs index abea1551dd..0061e4facc 100644 --- a/pageserver/src/tenant.rs +++ b/pageserver/src/tenant.rs @@ -1404,7 +1404,16 @@ impl Tenant { // Prevent new uploads from starting. if let Some(remote_client) = timeline.remote_client.as_ref() { - remote_client.stop()?; + let res = remote_client.stop(); + match &res { + Ok(()) => {} + Err(e) => match e { + remote_timeline_client::StopError::QueueUninitialized => { + // This could happen if the timeline is Broken, e.g., because it failed to fetch IndexPart when it was loaded. + } + }, + } + res?; } // Stop & wait for the remaining timeline tasks, including upload tasks. diff --git a/pageserver/src/tenant/remote_timeline_client.rs b/pageserver/src/tenant/remote_timeline_client.rs index 07f2ec1a3d..7b6e10148a 100644 --- a/pageserver/src/tenant/remote_timeline_client.rs +++ b/pageserver/src/tenant/remote_timeline_client.rs @@ -264,7 +264,8 @@ pub enum MaybeDeletedIndexPart { /// Errors that can arise when calling [`RemoteTimelineClient::stop`]. #[derive(Debug, thiserror::Error)] pub enum StopError { - /// Callers are responsible for checking this before calling `stop()`. + /// Returned if the upload queue was never initialized. + /// See [`RemoteTimelineClient::init_upload_queue`] and [`RemoteTimelineClient::init_upload_queue_for_empty_remote`]. #[error("queue is not initialized")] QueueUninitialized, }