Repository navigation
[Bugfix] Keep Ping responsive when remount admission is busy - #7
Merged
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
When expiry cleanup or a snapshot writer holds the remount barrier, the synchronous
ReMountSegmenthandler waits on an RPC io thread. Other connections assigned to that thread can then stop processing Ping. Usestd::try_lockfor client/snapshot admission and return the existingUNAVAILABLE_IN_CURRENT_STATUSbefore changing state; the current heartbeat loop retries after the barrier clears.This main integration preserves its existing expired-owner cleanup and lifecycle pinning. The pinned maintenance release also backports targeted expiry cleanup to its older deployed base; that implementation is already present on main and is not duplicated here. Upstream #4183 depends on the broader session/lock redesign in #4180; this PR is the smaller admission repair and does not add a heartbeat server.
Module
mooncake-store)Type of Change
How Has This Been Tested?
The maintenance implementation at
c680059fb7b288bc6548fdad94ec1cade9ea6096passed two real single-io-thread TCP RPC regressions and all 89 HA cases on an isolated CPU builder. Its six new regressions fail on the unmodified deployed base. This integration keeps the five tests corresponding to busy remount admission; main already has the separate expiry repair.Test commands:
Test results:
c75b0635f04333218053e8b35e6259f657b9deb6: host TCP/SSD Release configure/build passed; real RPC 2/2 and related HA 18/18 passed without skips, in 2.219s and 18.997s. The isolated 4 CPU / 32 GiB builder uses a separate source/build cache; the published maintenance image is unchanged.The Windows C++ hook was verified with the same native formatter. The CMake hook rewrites a pre-existing promotion target block identically on baseline and candidate; that unrelated edit is excluded.
Checklist
AI Assistance Disclosure
The full metadata scan and other synchronous handlers remain unchanged. Sustained lock contention can still delay remount admission; this change does not establish an initiating expiry cause or a universal heartbeat deadline.