diff --git a/vllm/distributed/kv_transfer/kv_connector/v1/offloading/scheduler.py b/vllm/distributed/kv_transfer/kv_connector/v1/offloading/scheduler.py index 5e98c1266e20..3ae65dc523e9 100644 --- a/vllm/distributed/kv_transfer/kv_connector/v1/offloading/scheduler.py +++ b/vllm/distributed/kv_transfer/kv_connector/v1/offloading/scheduler.py @@ -438,7 +438,10 @@ def _generate_job_id(self) -> int: return job_id def _remove_pending_job(self, job_id: int, block_ids: list[int] | None) -> None: - for bid in block_ids or (): + # Lockstep MLA groups share physical block IDs, so a transfer job may + # contain the same ID once per logical group. The pending-job index is + # set-backed and therefore registers each (block, job) pair only once. + for bid in set(block_ids or ()): pending = self._block_id_to_pending_jobs[bid] pending.remove(job_id) if not pending: