From 6f34f97573cf9a649535bee766e951f19d7fe94a Mon Sep 17 00:00:00 2001 From: Christian Schwarz Date: Thu, 24 Oct 2024 10:00:22 +0200 Subject: [PATCH] refactor(pageserver(load_remote_timeline)) remove dead code handling absence of IndexPart (#9408) The code is dead at runtime since we're nowadays always running with remote storage and treat it as the source of truth during attach. Clean it up as a preliminary to https://github.com/neondatabase/neon/pull/9218. Related: https://github.com/neondatabase/neon/pull/9366 --- pageserver/src/tenant.rs | 23 +++-------------------- pageserver/src/tenant/timeline.rs | 5 ++--- pageserver/src/tenant/timeline/init.rs | 12 +----------- 3 files changed, 6 insertions(+), 34 deletions(-) diff --git a/pageserver/src/tenant.rs b/pageserver/src/tenant.rs index 7a3305797c..d503b299c1 100644 --- a/pageserver/src/tenant.rs +++ b/pageserver/src/tenant.rs @@ -869,7 +869,7 @@ impl Tenant { &self, timeline_id: TimelineId, resources: TimelineResources, - index_part: Option, + index_part: IndexPart, metadata: TimelineMetadata, ancestor: Option>, _ctx: &RequestContext, @@ -894,24 +894,7 @@ impl Tenant { "these are used interchangeably" ); - if let Some(index_part) = index_part.as_ref() { - timeline.remote_client.init_upload_queue(index_part)?; - } else { - // No data on the remote storage, but we have local metadata file. We can end up - // here with timeline_create being interrupted before finishing index part upload. - // By doing what we do here, the index part upload is retried. - // If control plane retries timeline creation in the meantime, the mgmt API handler - // for timeline creation will coalesce on the upload we queue here. - - // FIXME: this branch should be dead code as we no longer write local metadata. - - timeline - .remote_client - .init_upload_queue_for_empty_remote(&metadata)?; - timeline - .remote_client - .schedule_index_upload_for_full_metadata_update(&metadata)?; - } + timeline.remote_client.init_upload_queue(&index_part)?; timeline .load_layer_map(disk_consistent_lsn, index_part) @@ -1541,7 +1524,7 @@ impl Tenant { self.timeline_init_and_sync( timeline_id, resources, - Some(index_part), + index_part, remote_metadata, ancestor, ctx, diff --git a/pageserver/src/tenant/timeline.rs b/pageserver/src/tenant/timeline.rs index d5ceec663b..7b40a24c54 100644 --- a/pageserver/src/tenant/timeline.rs +++ b/pageserver/src/tenant/timeline.rs @@ -2404,7 +2404,7 @@ impl Timeline { pub(super) async fn load_layer_map( &self, disk_consistent_lsn: Lsn, - index_part: Option, + index_part: IndexPart, ) -> anyhow::Result<()> { use init::{Decision::*, Discovered, DismissedLayer}; use LayerName::*; @@ -2468,8 +2468,7 @@ impl Timeline { ); } - let decided = - init::reconcile(discovered_layers, index_part.as_ref(), disk_consistent_lsn); + let decided = init::reconcile(discovered_layers, &index_part, disk_consistent_lsn); let mut loaded_layers = Vec::new(); let mut needs_cleanup = Vec::new(); diff --git a/pageserver/src/tenant/timeline/init.rs b/pageserver/src/tenant/timeline/init.rs index 5bc67c7133..6634d07a0d 100644 --- a/pageserver/src/tenant/timeline/init.rs +++ b/pageserver/src/tenant/timeline/init.rs @@ -125,19 +125,9 @@ pub(super) enum DismissedLayer { /// Merges local discoveries and remote [`IndexPart`] to a collection of decisions. pub(super) fn reconcile( local_layers: Vec<(LayerName, LocalLayerFileMetadata)>, - index_part: Option<&IndexPart>, + index_part: &IndexPart, disk_consistent_lsn: Lsn, ) -> Vec<(LayerName, Result)> { - let Some(index_part) = index_part else { - // If we have no remote metadata, no local layer files are considered valid to load - return local_layers - .into_iter() - .map(|(layer_name, local_metadata)| { - (layer_name, Err(DismissedLayer::LocalOnly(local_metadata))) - }) - .collect(); - }; - let mut result = Vec::new(); let mut remote_layers = HashMap::new();