diff --git a/pageserver/src/bin/pageserver.rs b/pageserver/src/bin/pageserver.rs
index 073655a598..26cab9338b 100644
--- a/pageserver/src/bin/pageserver.rs
+++ b/pageserver/src/bin/pageserver.rs
@@ -391,7 +391,7 @@ fn start_pageserver(
conf,
);
if let Some(deletion_workers) = deletion_workers {
- deletion_workers.spawn_with(*BACKGROUND_RUNTIME);
+ deletion_workers.spawn_with(BACKGROUND_RUNTIME.handle());
}
// Up to this point no significant I/O has been done: this should have been fast. Record
@@ -569,7 +569,7 @@ fn start_pageserver(
.with_graceful_shutdown(task_mgr::shutdown_watcher());
task_mgr::spawn(
- *MGMT_REQUEST_RUNTIME,
+ MGMT_REQUEST_RUNTIME.handle(),
TaskKind::HttpEndpointListener,
None,
None,
@@ -594,7 +594,7 @@ fn start_pageserver(
let local_disk_storage = conf.workdir.join("last_consumption_metrics.json");
task_mgr::spawn(
- *crate::BACKGROUND_RUNTIME,
+ crate::BACKGROUND_RUNTIME.handle(),
TaskKind::MetricsCollection,
None,
None,
@@ -647,7 +647,7 @@ fn start_pageserver(
DownloadBehavior::Error,
);
task_mgr::spawn(
- *COMPUTE_REQUEST_RUNTIME,
+ COMPUTE_REQUEST_RUNTIME.handle(),
TaskKind::LibpqEndpointListener,
None,
None,
@@ -682,6 +682,10 @@ fn start_pageserver(
.expect("forever() never returns None unless explicitly closed");
});
let signal = BACKGROUND_RUNTIME
+ // NB: in `NEON_PAGESERVER_USE_ONE_RUNTIME=current_thread`, this
+ // is where the executor is actually driven. In multi-threaded runtime
+ // modes, the executor threads are spawned internally, so, async execution
+ // is driven even before we reach here.
.block_on(signal_handler)
.expect("join error");
match signal {
diff --git a/pageserver/src/consumption_metrics.rs b/pageserver/src/consumption_metrics.rs
index a09da56ee4..f5540e896f 100644
--- a/pageserver/src/consumption_metrics.rs
+++ b/pageserver/src/consumption_metrics.rs
@@ -64,7 +64,7 @@ pub async fn collect_metrics(
let worker_ctx =
ctx.detached_child(TaskKind::CalculateSyntheticSize, DownloadBehavior::Download);
task_mgr::spawn(
- *BACKGROUND_RUNTIME,
+ BACKGROUND_RUNTIME.handle(),
TaskKind::CalculateSyntheticSize,
None,
None,
diff --git a/pageserver/src/disk_usage_eviction_task.rs b/pageserver/src/disk_usage_eviction_task.rs
index e44ae21a36..6248424cee 100644
--- a/pageserver/src/disk_usage_eviction_task.rs
+++ b/pageserver/src/disk_usage_eviction_task.rs
@@ -201,7 +201,7 @@ pub fn launch_disk_usage_global_eviction_task(
info!("launching disk usage based eviction task");
task_mgr::spawn(
- *BACKGROUND_RUNTIME,
+ BACKGROUND_RUNTIME.handle(),
TaskKind::DiskUsageEviction,
None,
None,
diff --git a/pageserver/src/task_mgr.rs b/pageserver/src/task_mgr.rs
index 6cabe9c190..1d1dc22ead 100644
--- a/pageserver/src/task_mgr.rs
+++ b/pageserver/src/task_mgr.rs
@@ -147,7 +147,7 @@ impl FromStr for TokioRuntimeMode {
}
static ONE_RUNTIME: Lazy