[HiCache] Heal the storage existence cache on a hybrid prefetch discard (#36386)

This commit is contained in:
Zhiqiang Xie
2026-08-28 01:33:40 -07:00
committed by GitHub
parent 989e51ba9c
commit 3f1031d697
@@ -1963,6 +1963,21 @@ class UnifiedRadixCache(BasePrefixCache):
for transfer, count in zip(pool_transfers, pool_hit_pages)
)
if pool_transfers and not all_succeeded:
# Drop the KV beliefs from the first page any pool failed to serve;
# the next insert then re-writes that span through one FULL check,
# restoring the missing aux pages.
keep_pages = completed_tokens // self.page_size
for transfer, count in zip(pool_transfers, pool_hit_pages):
if transfer.keys is None:
keep_pages = 0
elif count < len(transfer.keys):
# Aux transfers key the chain's trailing pages.
keep_pages = min(
keep_pages, max(0, len(hash_value) - len(transfer.keys))
)
self.storage_existence_cache.invalidate_beyond(
PoolName.KV, hash_value, keep_pages=keep_pages
)
# The controller's prefetch IO thread already releases the untransferred
# tail (host_indices[completed_tokens:])
self.cache_controller.append_host_mem_release(
@@ -1980,10 +1995,12 @@ class UnifiedRadixCache(BasePrefixCache):
)
self.prefetch_loaded_tokens_by_reqid[req_id] = 0
logger.warning(
"HiCache hybrid prefetch discarded req=%s completed=%d requested=%d",
"HiCache hybrid prefetch discarded req=%s completed=%d requested=%d "
"kv_beliefs_kept_pages=%d",
req_id,
completed_tokens,
expected_tokens,
keep_pages,
)
return False
return True