# PR #35843 完整报告

- 仓库：`sgl-project/sglang`
- 标题：refactor(disagg): remove dead build_and_send_encode_request
- 合并时间：2026-08-21 17:58
- 原文链接：http://prhub.com.cn/sgl-project/sglang/pull/35843

---

# 执行摘要

- 一句话：删除无调用的 build_and_send_encode_request 死代码
- 推荐动作：该 PR 简单直接，仅做死代码清理，建议快速合入。对于开发者，可以借此例了解代码库中死代码清理的流程和验证方法。

# 功能与动机

该变更旨在清理无用的死代码。PR body 明确指出，`build_and_send_encode_request` 在整个仓库中没有调用者，且由于 `send_encode_request` 存在多个签名冲突的定义，该方法若被调用会失败。移除死代码可以减少维护负担，避免误导开发者。

# 实现拆解

1. **入口**：修改文件 `python/sglang/srt/disaggregation/encoder/receiver.py`，在 `MMReceiverGrpc` 类中删除整个 `build_and_send_encode_request` 方法。
2. **核心逻辑**：删除的代码块包括该方法定义以及其中对 `GenerateReqInput` 和 `ImageData` 的使用。删除后，这两个导入符号仍在文件其他地方被引用（`_extract_url_data` 和多模态处理部分），因此保留导入。
3. **配套**：该变更不涉及测试、配置或部署改动，因为被删除的代码无调用者，不改变任何执行路径。CI 通过，包括 EP D 分离测试。

关键文件：
- `python/sglang/srt/disaggregation/encoder/receiver.py`（模块 disagg 接收；类别 source；类型 core-logic；符号 build_and_send_encode_request）: 删除了 `MMReceiverGrpc.build_and_send_encode_request` 方法，该方法无调用者且签名不兼容。

关键符号：build_and_send_encode_request

## 关键源码片段

### `python/sglang/srt/disaggregation/encoder/receiver.py`

删除了 `MMReceiverGrpc.build_and_send_encode_request` 方法，该方法无调用者且签名不兼容。

```python
# receiver.py 中 MMReceiverGrpc 类内部（删除方法前后对比）

# 变更前：存在一个无调用者的死方法
# def build_and_send_encode_request(self, image_urls, rid):
# encode_req = GenerateReqInput(
# image_data=[ImageData(url=url) for url in image_urls],
# rid=rid,
# )
# # 这里调用 send_encode_request，但该方法在本模块存在两个签名：
# # 继承的 MMReceiverBase.send_encode_request(self, obj, time_stats_json=None)
# # 和同文件中三个无参数的 send_encode_request(self) 定义，
# # 因此如果被调用会导致 TypeError，实际上无法工作。
# self.send_encode_request(encode_req)
# return encode_req

# 变更后：该方法被删除，其他逻辑不受影响
# For zmq_to_scheduler
def process_waiting_requests(self, recv_reqs):
    return self._process_waiting_requests(recv_reqs, WaitingZmqRequestGrpc)

async def encode(
    self,
    req_id,
    mm_data,
    embedding_port,
    endpoint_encode,
    num_items_assigned=None,
    encode_urls=None,
):
    # ... 原有逻辑不变

```

# 评论区精华

该 PR 无 review 评论，但在 issue 评论中作者请求重新运行 `test_epd_disaggregation.py`，该测试最终通过。这说明作者通过 CI 验证了删除死代码没有破坏现有功能。

- CI 重跑 (other): CI 验证通过，证明删除死代码无副作用。

# 风险与影响

- 风险：该变更是纯删除死代码，无调用者，风险极低。唯一潜在风险是如果未来有人误以为该方法存在而调用，但通过代码搜索可以避免。由于 `GenerateReqInput` 和 `ImageData` 仍有其他用途，导入未受影响。
- 影响：影响范围极小，仅涉及 disaggregation 模块中 `receiver.py` 文件，不影响任何功能、性能或接口。对用户无感知，对团队降低了维护成本。
- 风险标记：纯死代码删除 , 无调用者

# 关联脉络

- PR #35838 refactor(disagg): remove dead get_embedding_port: 该 PR 是同一作者针对 disaggregation 模块死代码清理系列的一部分，PR body 明确提及关联。
- PR #35844 refactor(disagg): remove dead get_embedding_port: 同系列死代码清理 PR，处理同一模块的另一个无引用函数。