Fix scheduler crash on prefill-unreachable decode abort (#29834)

This commit is contained in:
amote-i
2026-07-08 14:06:37 +08:00
committed by GitHub
parent 7709a1f358
commit c9303a08da
2 changed files with 75 additions and 1 deletions
+11 -1
View File
@@ -725,7 +725,9 @@ class DecodePreallocQueue(DecodeHiCachePreallocMixin):
error_msg = f"Could not fetch prefill parallel info from {bootstrap_addr} after {count} attempts"
logger.error(error_msg)
for decode_req in reqs:
decode_req.kv_receiver.abort()
# kv_receiver may be None from a prior self.queue cleanup
if decode_req.kv_receiver is not None:
decode_req.kv_receiver.abort()
del self._ensure_retry_count[bootstrap_addr]
del self._ensure_last_attempt_time[bootstrap_addr]
else:
@@ -837,6 +839,14 @@ class DecodePreallocQueue(DecodeHiCachePreallocMixin):
failed_reqs.append(decode_req)
indices_to_remove.add(i)
# DecodeRequest is shared between self.queue and self.pending_reqs;
# drop failed reqs from both
if failed_reqs:
failed_ids = {id(r) for r in failed_reqs}
self.pending_reqs = [
r for r in self.pending_reqs if id(r) not in failed_ids
]
# HiSparse physical constraint: max requests by device buffer capacity.
# Each admitted req needs padded_buffer_size from hisparse device pool.
# waiting_queue reqs already have device buffers (allocated in admit_request_direct),