执行摘要
- 一句话:删除无调用的 build_and_send_encode_request 死代码
- 推荐动作:该 PR 简单直接,仅做死代码清理,建议快速合入。对于开发者,可以借此例了解代码库中死代码清理的流程和验证方法。
功能与动机
该变更旨在清理无用的死代码。PR body 明确指出,build_and_send_encode_request 在整个仓库中没有调用者,且由于 send_encode_request 存在多个签名冲突的定义,该方法若被调用会失败。移除死代码可以减少维护负担,避免误导开发者。
实现拆解
- 入口:修改文件
python/sglang/srt/disaggregation/encoder/receiver.py,在 MMReceiverGrpc 类中删除整个 build_and_send_encode_request 方法。
- 核心逻辑:删除的代码块包括该方法定义以及其中对
GenerateReqInput 和 ImageData 的使用。删除后,这两个导入符号仍在文件其他地方被引用(_extract_url_data 和多模态处理部分),因此保留导入。
- 配套:该变更不涉及测试、配置或部署改动,因为被删除的代码无调用者,不改变任何执行路径。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 方法,该方法无调用者且签名不兼容。
# 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,处理同一模块的另一个无引用函数。
参与讨论