mirror of
https://github.com/kvcache-ai/Mooncake.git
synced 2026-11-05 01:17:55 +00:00
[GH-ISSUE #4120] [Store] Make non-conflict standby-restore rejections durable #1043
Labels
No labels
ascend
auto-closed
bug
bug
CI/Build
Common
documentation
enhancement
feature request
good first issue
help wanted
high priority
MetaX
nightly-failure
pull-request
PyTorch Backend
question
RFC
Roadmap
stale
Store
Tests
Transfer Engine
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
kvcache-ai/Mooncake#1043
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @he-yufeng on GitHub (Sep 14, 2026).
Original GitHub issue: https://github.com/kvcache-ai/Mooncake/issues/4120
[Store] Follow-up: make non-conflict standby-restore rejections durable
Split out from the #3806 review discussion with @Icedcoco.
#3806 makes conflict-derived discards durable: when the tolerant standby restore drops ambiguous overlapping descriptors, it writes a fenced OpLog record per affected key (REMOVE for full drops, PUT_END with only the surviving descriptors for partial ones) and fails the restore unless the batch goes durable.
The other rejection kinds still only produce a log line and a metric:
unknown_endpoint,invalid_memory_descriptor,capacity_overflow,invalid_tenant_id. A later promotion that replays the same snapshot re-rejects the same entries every round. That is safe and idempotent, but it is repeated work, and for permanently-invalid entries (bad descriptor shape) a durable tombstone would be the cleaner end state.The subtlety that kept this out of #3806: some rejection reasons are transient.
capacity_overflowin particular reflects this promotion's capacity view, not the entry's validity, so a durable REMOVE could suppress an entry that a later, roomier promotion should accept.object_already_exists/duplicate_objectmust never tombstone either, since the key legitimately exists in the index.Proposed shape when someone picks this up: a per-reason allowlist on the rejection funnel (
NoteLegacyStandbyRejection) for the permanently-invalid kinds only, reusing the existingrepair_remove_keysdurable write path, with the transient kinds explicitly excluded.Not blocking #3806; conflict-derived discards are already durable there.
@github-actions[bot] commented on GitHub (Sep 14, 2026):
Thanks for opening this issue, @he-yufeng!
40085740A maintainer will triage this when possible. To help us respond faster, please include:
Useful links: Documentation · Contributing guide