From feb2e80b83c125c58f0c9c366126e51c87f71a02 Mon Sep 17 00:00:00 2001 From: Christian Schwarz Date: Tue, 23 May 2023 20:36:32 +0200 Subject: [PATCH 1/2] tests were failing because activate() was outside of a span with tenant_id --- pageserver/src/tenant.rs | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/pageserver/src/tenant.rs b/pageserver/src/tenant.rs index 2b787faf69..af59ad0044 100644 --- a/pageserver/src/tenant.rs +++ b/pageserver/src/tenant.rs @@ -624,7 +624,8 @@ impl Tenant { } } Ok(()) - }, + } + .instrument(tracing::info_span!("attach", tenant_id=%tenant_id)), ); Ok(tenant) } @@ -632,8 +633,9 @@ impl Tenant { /// /// Background task that downloads all data for a tenant and brings it to Active state. /// - #[instrument(skip_all, fields(tenant_id=%self.tenant_id))] async fn attach(self: &Arc, ctx: &RequestContext) -> anyhow::Result<()> { + debug_assert_current_span_has_tenant_id(); + let marker_file = self.conf.tenant_attaching_mark_file_path(&self.tenant_id); if !tokio::fs::try_exists(&marker_file) .await @@ -890,7 +892,8 @@ impl Tenant { } info!("initial load for tenant {tenant_id} finished!"); Ok(()) - }, + } + .instrument(info_span!("load", tenant_id=%tenant_id)), ); info!("spawned load into background"); @@ -902,8 +905,9 @@ impl Tenant { /// Background task to load in-memory data structures for this tenant, from /// files on disk. Used at pageserver startup. /// - #[instrument(skip(self, ctx), fields(tenant_id=%self.tenant_id))] async fn load(self: &Arc, ctx: &RequestContext) -> anyhow::Result<()> { + debug_assert_current_span_has_tenant_id(); + info!("loading tenant task"); utils::failpoint_sleep_millis_async!("before-loading-tenant"); @@ -3167,7 +3171,10 @@ pub mod harness { let timeline_metadata = load_metadata(self.conf, timeline_id, self.tenant_id)?; timelines_to_load.insert(timeline_id, timeline_metadata); } - tenant.load(ctx).await?; + tenant + .load(ctx) + .instrument(info_span!("try_load", tenant_id=%self.tenant_id)) + .await?; tenant.state.send_replace(TenantState::Active); for timeline in tenant.timelines.lock().unwrap().values() { timeline.set_state(TimelineState::Active); From a55d2249231044facaee36370ff2635827a5c314 Mon Sep 17 00:00:00 2001 From: Christian Schwarz Date: Tue, 23 May 2023 20:43:10 +0200 Subject: [PATCH 2/2] tests would fail because broker client needs to be launched on a tokio runtime thread --- pageserver/src/bin/pageserver.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pageserver/src/bin/pageserver.rs b/pageserver/src/bin/pageserver.rs index 26cebf8827..09378c2736 100644 --- a/pageserver/src/bin/pageserver.rs +++ b/pageserver/src/bin/pageserver.rs @@ -9,6 +9,7 @@ use clap::{Arg, ArgAction, Command}; use fail::FailScenario; use metrics::launch_timestamp::{set_launch_timestamp_metric, LaunchTimestamp}; use pageserver::disk_usage_eviction_task::{self, launch_disk_usage_global_eviction_task}; +use pageserver::task_mgr::WALRECEIVER_RUNTIME; use remote_storage::GenericRemoteStorage; use tracing::*; @@ -274,7 +275,8 @@ fn start_pageserver( let pageserver_listener = tcp_listener::bind(pg_addr)?; // Launch broker client - let broker_client = pageserver::broker_client::init_broker_client(conf)?; + let broker_client = WALRECEIVER_RUNTIME + .block_on(async { pageserver::broker_client::init_broker_client(conf) })?; // Initialize authentication for incoming connections let http_auth;