From a164259efd8945c606b0600121a2ddb67e75e961 Mon Sep 17 00:00:00 2001 From: Siyuan Chen <41201609+SYChen123@users.noreply.github.com> Date: Tue, 25 Nov 2025 10:51:41 +0800 Subject: [PATCH] [Router bugfix] Fix router_manager selecting the wrong router when enable-igw. (#13572) --- sgl-router/src/routers/router_manager.rs | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/sgl-router/src/routers/router_manager.rs b/sgl-router/src/routers/router_manager.rs index 7c9756b03..c3738b04c 100644 --- a/sgl-router/src/routers/router_manager.rs +++ b/sgl-router/src/routers/router_manager.rs @@ -269,6 +269,14 @@ impl RouterManager { let mut best_router = None; let mut best_score = 0.0; + let num_regular_workers = self + .worker_registry + .get_all() + .iter() + .filter(|w| matches!(w.worker_type(), WorkerType::Regular)) + .count(); + let num_pd_workers = self.worker_registry.get_all().len() - num_regular_workers; + for router in candidate_routers { let mut score = 1.0; @@ -284,7 +292,9 @@ impl RouterManager { // - Average worker cost vs max_cost // - Current load and health status - if score > best_score { + let valid_router = (router.is_pd_mode() && num_pd_workers > 0) + || (!router.is_pd_mode() && num_regular_workers > 0); + if score > best_score && valid_router { best_score = score; best_router = Some(router); }