[PD] Centralize per-room cleanup in common backend (#24601)

Signed-off-by: Shangming Cai <csmthu@gmail.com>
This commit is contained in:
Shangming Cai
2026-05-07 18:47:55 +08:00
committed by GitHub
parent 3b2c730320
commit e264b5785d
4 changed files with 13 additions and 30 deletions
@@ -183,12 +183,6 @@ class CommonKVManager(BaseKVManager):
return self.request_status[bootstrap_room]
def update_status(self, bootstrap_room: int, status: KVPoll):
if (
status == KVPoll.Failed
and self.disaggregation_mode == DisaggregationMode.PREFILL
and hasattr(self, "req_to_decode_prefix_len")
):
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)
@@ -545,6 +539,13 @@ class CommonKVSender(BaseKVSender):
def failure_exception(self):
raise Exception("Fake KVReceiver Exception")
def clear(self) -> None:
self.kv_mgr.request_status.pop(self.bootstrap_room, None)
if hasattr(self.kv_mgr, "req_to_decode_prefix_len"):
self.kv_mgr.req_to_decode_prefix_len.pop(self.bootstrap_room, None)
if hasattr(self.kv_mgr, "transfer_infos"):
self.kv_mgr.transfer_infos.pop(self.bootstrap_room, None)
def abort(self):
self.kv_mgr.record_failure(
self.bootstrap_room,
@@ -740,6 +741,11 @@ class CommonKVReceiver(BaseKVReceiver):
def failure_exception(self):
raise Exception("Fake KVReceiver Exception")
def clear(self) -> None:
self.kv_mgr.request_status.pop(self.bootstrap_room, None)
self.kv_mgr.required_prefill_response_num_table.pop(self.bootstrap_room, None)
self.kv_mgr.prefill_response_tracker.pop(self.bootstrap_room, None)
def abort(self):
self.kv_mgr.record_failure(
self.bootstrap_room,
@@ -1736,10 +1736,6 @@ class MooncakeKVSender(CommonKVSender):
else:
return self.conclude_state
def clear(self) -> None:
if self.bootstrap_room in self.kv_mgr.request_status:
self.kv_mgr.request_status.pop(self.bootstrap_room)
def failure_exception(self):
# Explicitly set the status to failure since this request has failed in another rank
if self.conclude_state is None:
@@ -1911,16 +1907,6 @@ class MooncakeKVReceiver(CommonKVReceiver):
else:
return self.conclude_state
def clear(self) -> None:
if self.bootstrap_room in self.kv_mgr.request_status:
self.kv_mgr.request_status.pop(self.bootstrap_room)
if self.bootstrap_room in self.kv_mgr.required_prefill_response_num_table:
self.kv_mgr.required_prefill_response_num_table.pop(self.bootstrap_room)
if self.bootstrap_room in self.kv_mgr.prefill_response_tracker:
self.kv_mgr.prefill_response_tracker.pop(self.bootstrap_room)
def failure_exception(self):
# Explicitly set the status to failure since this request has failed in another rank
if self.conclude_state is None:
@@ -959,9 +959,6 @@ class MoriKVSender(CommonKVSender):
self._notify_decode(KVPoll.Failed, failure_reason)
self.conclude_state = KVPoll.Failed
def clear(self) -> None:
self.kv_mgr.request_status.pop(self.bootstrap_room, None)
def failure_exception(self):
if self.conclude_state is None:
self._finalize_failure()
@@ -1087,9 +1084,7 @@ class MoriKVReceiver(CommonKVReceiver):
def clear(self) -> None:
if self.bootstrap_room is None:
return
self.kv_mgr.request_status.pop(self.bootstrap_room, None)
self.kv_mgr.required_prefill_response_num_table.pop(self.bootstrap_room, None)
self.kv_mgr.prefill_response_tracker.pop(self.bootstrap_room, None)
super().clear()
self.kv_mgr._cleanup_room_tracking(self.bootstrap_room)
def failure_exception(self):
@@ -1009,9 +1009,6 @@ class NixlKVManager(CommonKVManager):
aux_notif,
)
handles.append(aux_xfer_handle)
if is_last:
del self.transfer_infos[bootstrap_room]
self.req_to_decode_prefix_len.pop(bootstrap_room, None)
return handles
def update_transfer_status(self):
@@ -1185,7 +1182,6 @@ class NixlKVSender(CommonKVSender):
self.chunk_id += 1
if is_last:
self.has_sent = True
del self.kv_mgr.request_status[self.bootstrap_room]
def poll(self) -> KVPoll:
if self._send_failed: