diff --git a/pageserver/src/bin/pageserver.rs b/pageserver/src/bin/pageserver.rs index 7607119dda..10b687f805 100644 --- a/pageserver/src/bin/pageserver.rs +++ b/pageserver/src/bin/pageserver.rs @@ -376,7 +376,7 @@ fn start_pageserver( // Set up deletion queue let (deletion_queue, deletion_workers) = DeletionQueue::new( remote_storage.clone(), - ControlPlaneClient::new(conf, &shutdown_pageserver), + ControlPlaneClient::new(conf, shutdown_pageserver.child_token()), conf, ); if let Some(deletion_workers) = deletion_workers { @@ -420,12 +420,12 @@ fn start_pageserver( deletion_queue_client, }, order, - shutdown_pageserver.clone(), + shutdown_pageserver.child_token(), ))?; let tenant_manager = Arc::new(tenant_manager); BACKGROUND_RUNTIME.spawn({ - let shutdown_pageserver = shutdown_pageserver.clone(); + let shutdown_pageserver = shutdown_pageserver.child_token(); let drive_init = async move { // NOTE: unlike many futures in pageserver, this one is cancellation-safe let guard = scopeguard::guard_on_success((), |_| { diff --git a/pageserver/src/control_plane_client.rs b/pageserver/src/control_plane_client.rs index 25ae3d1b01..a45e701004 100644 --- a/pageserver/src/control_plane_client.rs +++ b/pageserver/src/control_plane_client.rs @@ -40,7 +40,7 @@ pub trait ControlPlaneGenerationsApi { impl ControlPlaneClient { /// A None return value indicates that the input `conf` object does not have control /// plane API enabled. - pub fn new(conf: &'static PageServerConf, cancel: &CancellationToken) -> Option { + pub fn new(conf: &'static PageServerConf, cancel: CancellationToken) -> Option { let mut url = match conf.control_plane_api.as_ref() { Some(u) => u.clone(), None => return None, @@ -67,7 +67,7 @@ impl ControlPlaneClient { http_client: client.build().expect("Failed to construct HTTP client"), base_url: url, node_id: conf.id, - cancel: cancel.clone(), + cancel, }) } diff --git a/pageserver/src/tenant/mgr.rs b/pageserver/src/tenant/mgr.rs index 4d7bd4259f..4587a5159a 100644 --- a/pageserver/src/tenant/mgr.rs +++ b/pageserver/src/tenant/mgr.rs @@ -283,7 +283,7 @@ async fn init_load_generations( "Emergency mode! Tenants will be attached unsafely using their last known generation" ); emergency_generations(tenant_confs) - } else if let Some(client) = ControlPlaneClient::new(conf, cancel) { + } else if let Some(client) = ControlPlaneClient::new(conf, cancel.child_token()) { info!("Calling control plane API to re-attach tenants"); // If we are configured to use the control plane API, then it is the source of truth for what tenants to load. match client.re_attach().await {