{"record":{"id":"856b8cb770670eba","repo":"vllm-project/vllm","slug":"connected-engine-range-engine-start-index-eng","errorCode":null,"errorMessage":"connected engine range [{engine_start_index}, {engine_end_index}) exceeds data parallel size {}","messagePattern":"connected engine range \\[(.+?), (.+?)\\) exceeds data parallel size (.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"rust/src/server/src/config.rs","lineNumber":275,"sourceCode":"                    );\n                }\n            }\n            TransportMode::Bootstrapped {\n                engine_start_index,\n                engine_count,\n                ..\n            } => {\n                if *engine_count == 0 {\n                    bail!(\"engine count must be at least 1\");\n                }\n                let engine_start_index = usize::try_from(*engine_start_index)\n                    .map_err(|_| anyhow::anyhow!(\"engine start index does not fit usize\"))?;\n                let engine_end_index =\n                    engine_start_index.checked_add(*engine_count).ok_or_else(|| {\n                        anyhow::anyhow!(\"engine start index + engine count overflows\")\n                    })?;\n                if engine_end_index > self.data_parallel_size {\n                    bail!(\n                        \"connected engine range [{engine_start_index}, {engine_end_index}) exceeds data parallel size {}\",\n                        self.data_parallel_size\n                    );\n                }\n            }\n        }\n\n        Ok(())\n    }\n\n    /// Return the number of engines implied by the configured transport mode.\n    pub fn engine_count(&self) -> usize {\n        match &self.transport_mode {\n            TransportMode::HandshakeOwner { engine_count, .. }\n            | TransportMode::Bootstrapped { engine_count, .. } => *engine_count,\n        }\n    }\n","sourceCodeStart":257,"sourceCodeEnd":293,"githubUrl":"https://github.com/vllm-project/vllm/blob/c794754062d49a8fdb63ab3c5215b488b865030c/rust/src/server/src/config.rs#L257-L293","documentation":"Thrown by Config::validate() in Bootstrapped mode when engine_start_index + engine_count exceeds --data-parallel-size. The frontend would be asked to serve engines that do not exist in the data-parallel pool. Both range endpoints and the DP size appear in the message.","triggerScenarios":"e.g. --data-parallel-size 4 with a bootstrapped frontend assigned engines [4, 8): end index 8 > 4. Happens when the number of engines actually started is smaller than the slice assignment assumes.","commonSituations":"Scaling down the engine pool without regenerating frontend assignments; a scheduler counting frontends*engines_per_frontend instead of total engines; mismatch between the pool size the supervisor started and the one it advertised when assigning slices.","solutions":["Make the assigned slice [start, start+count) fit inside [0, data_parallel_size).","Recompute frontend assignments after changing --data-parallel-size.","Cross-check the three numbers in the error message against what your supervisor actually started."],"exampleFix":"# before\n--data-parallel-size 4 with engine_start_index=4, engine_count=4\n\n# after\n--data-parallel-size 8 with engine_start_index=4, engine_count=4","handlingStrategy":"validation","validationCode":"let end = start + count;\nassert!(end <= data_parallel_size,\n    \"slice [{start},{end}) must fit in {data_parallel_size} engines\");","typeGuard":"fn engine_slice_within_pool(start: usize, count: usize, dp: usize) -> bool {\n    start.checked_add(count).map_or(false, |end| end <= dp)\n}","tryCatchPattern":null,"preventionTips":["Regenerate all frontend assignments whenever DP size changes.","Compute slices from the actual running engine count, not a planned one.","Smoke-test the smallest and largest frontend assignment in CI."],"tags":["configuration","transport","bootstrap","data-parallel","rust","vllm","startup"],"backgroundTag":null,"analyzedSha":"c794754062d49a8fdb63ab3c5215b488b865030c","analyzedAt":"2026-08-14T21:17:39.825Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}