diff --git a/python/sglang/srt/disaggregation/common/conn.py b/python/sglang/srt/disaggregation/common/conn.py index 05f385f69..796563325 100644 --- a/python/sglang/srt/disaggregation/common/conn.py +++ b/python/sglang/srt/disaggregation/common/conn.py @@ -190,6 +190,12 @@ class CommonKVManager(BaseKVManager): ): self.req_to_decode_prefix_len.pop(bootstrap_room, None) if bootstrap_room not in self.request_status: + # Do not resurrect a cleared entry with Failed: once clear() has + # popped the room from request_status, any late update_status(Failed) + # (e.g. from abort()) must be a no-op. Otherwise a Failed entry could + # pollute a future request that reuses the same bootstrap_room. + if status == KVPoll.Failed: + return self.request_status[bootstrap_room] = status else: if status == KVPoll.Failed: