{"record":{"id":"b3af754bffb3762d","repo":"vllm-project/vllm","slug":"request-request-request-id-r-request-id-has-no","errorCode":null,"errorMessage":"request {request.request_id!r}: request_id has no embedded peer zmq_address and kv_transfer_params is missing remote_host / remote_notify_port (got remote_host={remote_host!r}, remote_notify_port={remote_notify_port!r})","messagePattern":"request (.+?): request_id has no embedded peer zmq_address and kv_transfer_params is missing remote_host / remote_notify_port \\(got remote_host=(.+?), remote_notify_port=(.+?)\\)","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"vllm/distributed/kv_transfer/kv_connector/v1/moriio/moriio_connector.py","lineNumber":755,"sourceCode":"                    peer_zmq = get_peer_zmq_from_request_id(\n                        request.request_id, is_producer=False\n                    )\n                    if peer_zmq is not None:\n                        remote_host, _, remote_notify_port = parse_moriio_zmq_address(\n                            peer_zmq\n                        )\n                    else:\n                        # Sidecar fallback: use explicit params fields.\n                        params = request.kv_transfer_params or {}\n                        remote_host = params.get(\"remote_host\") or \"\"\n                        try:\n                            remote_notify_port = int(\n                                params.get(\"remote_notify_port\") or 0\n                            )\n                        except (TypeError, ValueError):\n                            remote_notify_port = 0\n                        if not remote_host or not remote_notify_port:\n                            raise ValueError(\n                                f\"request {request.request_id!r}: \"\n                                f\"request_id has no embedded peer \"\n                                f\"zmq_address and kv_transfer_params is \"\n                                f\"missing remote_host / remote_notify_port \"\n                                f\"(got remote_host={remote_host!r}, \"\n                                f\"remote_notify_port={remote_notify_port!r})\"\n                            )\n\n                    # num_external_tokens == 0: nothing to push, so don't tell\n                    # the producer to write into these blocks.\n                    block_notify_list = (\n                        blocks.get_block_ids()[0] if num_external_tokens > 0 else []\n                    )\n\n                    # Wide-EP multi-pod: a pod binds notify sockets only for\n                    # its LOCAL ranks, so the port offset must use the per-pod\n                    # local rank (% dp_local), not the global rank. Single-pod\n                    # is bit-identical (modulus is a no-op).","sourceCodeStart":737,"sourceCodeEnd":773,"githubUrl":"https://github.com/vllm-project/vllm/blob/c794754062d49a8fdb63ab3c5215b488b865030c/vllm/distributed/kv_transfer/kv_connector/v1/moriio/moriio_connector.py#L737-L773","documentation":"Worker-side peer resolution during block notification: the request_id embeds no peer zmq_address and the sidecar fallback in kv_transfer_params yields a falsy remote_host or a remote_notify_port that converts to 0 (missing, None, or non-numeric). The error echoes both offending values so the bad field is identifiable.","triggerScenarios":"MoRIIOConnectorWorker processing a request whose router did not embed routing, where params.get('remote_host') is empty or int(params.get('remote_notify_port') or 0) evaluates to 0 (key absent, None, '', or non-numeric string caught by the TypeError/ValueError handler).","commonSituations":"Sidecar injects only handshake-port fields and forgets the notify port; env-var-driven config where remote_notify_port is unset; router upgrade changed request_id embedding so requests fall into the fallback path unprepared.","solutions":["Populate both remote_host and remote_notify_port in kv_transfer_params for every MoRI-IO request","Read the echoed values in the message to see which field is '' or 0 and fix that side of the sidecar config","Restore/verify router-side zmq_address embedding in the request_id","Reject requests at admission when neither routing channel is complete"],"exampleFix":"// before\nparams = {\"remote_host\": \"10.0.0.5\", \"remote_notify_port\": None}\n\n// after\nparams = {\"remote_host\": \"10.0.0.5\", \"remote_notify_port\": 5556}","handlingStrategy":"validation","validationCode":"def can_route_request(request_id: str, params: dict | None) -> bool:\n    if get_peer_zmq_from_request_id(request_id, is_producer=True) is not None:\n        return True\n    p = params or {}\n    host = p.get(\"remote_host\")\n    port = p.get(\"remote_notify_port\")\n    return bool(host) and str(port or \"\").strip().isdigit() and int(port) > 0","typeGuard":"def has_worker_sidecar_routing(params) -> bool:\n    return (\n        isinstance(params, dict)\n        and isinstance(params.get(\"remote_host\"), str)\n        and params[\"remote_host\"].strip() != \"\"\n        and str(params.get(\"remote_notify_port\") or \"\").isdigit()\n    )","tryCatchPattern":"try:\n    notify_peer(...)\nexcept ValueError as e:\n    if \"remote_notify_port\" in str(e):\n        drop_or_requeue_request(request_id, reason=str(e))  # routing incomplete, do not crash the worker\n    else:\n        raise","preventionTips":["Make the sidecar inject remote_host and remote_notify_port atomically with request submission","Prefer router-embedded zmq_address routing so the fallback rarely triggers","Alert on fallback-path usage: it usually signals router misconfiguration"],"tags":["kv-transfer","config","routing","worker","disaggregated-prefill"],"backgroundTag":null,"analyzedSha":"c794754062d49a8fdb63ab3c5215b488b865030c","analyzedAt":"2026-08-14T21:17:39.825Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}