From 768f6d42f53e371bc4f12205446b08989c7d3e5d Mon Sep 17 00:00:00 2001 From: Simon Sapin Date: Tue, 11 Feb 2025 15:43:03 +0100 Subject: [PATCH] Add $APOLLO_ROUTER_COMPUTE_THREADS environment variable (#6746) --- apollo-router/Cargo.toml | 1 + apollo-router/src/compute_job.rs | 16 ++++++++++++---- apollo-router/src/executable.rs | 6 +++++- ...phql_with_safelist_log_unknown_true@logs.snap | 1 - 4 files changed, 18 insertions(+), 6 deletions(-) diff --git a/apollo-router/Cargo.toml b/apollo-router/Cargo.toml index fa0a427ff1..0f75137286 100644 --- a/apollo-router/Cargo.toml +++ b/apollo-router/Cargo.toml @@ -11,6 +11,7 @@ license = "Elastic-2.0" rust-version = "1.83.0" edition = "2021" build = "build/main.rs" +default-run = "router" [[bin]] name = "router" diff --git a/apollo-router/src/compute_job.rs b/apollo-router/src/compute_job.rs index 64fe16b20d..a0bcab20a3 100644 --- a/apollo-router/src/compute_job.rs +++ b/apollo-router/src/compute_job.rs @@ -14,13 +14,21 @@ use crate::metrics::meter_provider; /// reaches `QUEUE_SOFT_CAPACITY_PER_THREAD * thread_pool_size()` const QUEUE_SOFT_CAPACITY_PER_THREAD: usize = 20; -/// Let this thread pool use all available resources if it can. +/// By default, let this thread pool use all available resources if it can. /// In the worst case, we’ll have moderate context switching cost /// as the kernel’s scheduler distributes time to it or Tokio or other threads. fn thread_pool_size() -> usize { - std::thread::available_parallelism() - .expect("available_parallelism() failed") - .get() + // This environment variable is intentionally undocumented. + if let Some(threads) = std::env::var("APOLLO_ROUTER_COMPUTE_THREADS") + .ok() + .and_then(|value| value.parse::().ok()) + { + threads + } else { + std::thread::available_parallelism() + .expect("available_parallelism() failed") + .get() + } } type Job = Box; diff --git a/apollo-router/src/executable.rs b/apollo-router/src/executable.rs index 84ffb393d6..b1445014f3 100644 --- a/apollo-router/src/executable.rs +++ b/apollo-router/src/executable.rs @@ -327,12 +327,16 @@ pub fn main() -> Result<()> { let mut builder = tokio::runtime::Builder::new_multi_thread(); builder.enable_all(); - if let Some(nb) = std::env::var("APOLLO_ROUTER_NUM_CORES") + + // This environment variable is intentionally undocumented. + // See also APOLLO_ROUTER_COMPUTE_THREADS in apollo-router/src/compute_job.rs + if let Some(nb) = std::env::var("APOLLO_ROUTER_IO_THREADS") .ok() .and_then(|value| value.parse::().ok()) { builder.worker_threads(nb); } + let runtime = builder.build()?; runtime.block_on(Executable::builder().start()) } diff --git a/apollo-router/src/services/layers/persisted_queries/snapshots/apollo_router__services__layers__persisted_queries__tests__pq_layer_freeform_graphql_with_safelist_log_unknown_true@logs.snap b/apollo-router/src/services/layers/persisted_queries/snapshots/apollo_router__services__layers__persisted_queries__tests__pq_layer_freeform_graphql_with_safelist_log_unknown_true@logs.snap index f9a850f1c8..d8c2c9b330 100644 --- a/apollo-router/src/services/layers/persisted_queries/snapshots/apollo_router__services__layers__persisted_queries__tests__pq_layer_freeform_graphql_with_safelist_log_unknown_true@logs.snap +++ b/apollo-router/src/services/layers/persisted_queries/snapshots/apollo_router__services__layers__persisted_queries__tests__pq_layer_freeform_graphql_with_safelist_log_unknown_true@logs.snap @@ -1,7 +1,6 @@ --- source: apollo-router/src/services/layers/persisted_queries/mod.rs expression: yaml -snapshot_kind: text --- - fields: operation_body: "query SomeQuery { me { id } }"