Repository navigation
Conversation
While a lease renewal retries, system.cas_mounts showed nothing: an aging last_renewed_at, lifecycle still Live, and the attempt counters moved only after the call ended. An operator could not tell a renewal retrying through an object-store outage from a renewal thread that had died. Add three columns updated as the renewal runs: renewal_in_progress, renewal_attempts (physical PUTs sent by the current call) and last_renewal_error (verb, key and error class of the last refused request; no credentials, no bodies). The request engine gets a RequestObserver with on_write_attempt and on_failure callbacks; the renewal thread keeps a RenewalProgress record under a leaf mutex and counts CASMountRenewalAttempts/Retries per attempt instead of from the result. A local failure of the resolve read is not published. Nothing changes on the store. Signed-off-by: Mikhail Filimonov <mfilimonov@altinity.com> Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
k-morozov
previously approved these changes
Oct 12, 2026
Signed-off-by: Mikhail Filimonov <mfilimonov@altinity.com> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Mikhail Filimonov <mfilimonov@altinity.com> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Member
Author
|
Stateless tests (amd_asan_ubsan, cas s3 storage, parallel, 1/2): |
k-morozov
approved these changes
Oct 15, 2026
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.
While a CAS mount lease renewal retries,
system.cas_mountsshowed nothing: an aginglast_renewed_at,lifecyclestillLive, and the attempt counters moved only after the call ended. An operator could not tell a renewal retrying through an object-store outage from a renewal thread that had died. Three columns now report the renewal as it runs.Why it matters for the lease
The next change of the series (#2431) makes the renewal retry until the store gives a definitive answer, so a live holder will spend tens of seconds — or longer — inside one renewal call. Without these columns that pause has no visible sign of life; with them,
SELECT lifecycle, renewal_in_progress, renewal_attempts, last_renewal_error FROM system.cas_mountsduring an outage readsLive / 1 / 7 / "put gc/server-roots/…/mount: Timeout …". The same fields were the missing evidence in the incident analysis of #2431.Changes
system.cas_mounts:renewal_in_progress(a renewal call is running),renewal_attempts(physicalPUTs sent by the current call),last_renewal_error(verb, key and error class of the last refused request; no credentials, no bodies). Appended at the end; existing queries are unaffected. Documented indocs/en/operations/system-tables/cas_mounts.md.RequestObserverwithon_write_attemptandon_failurecallbacks, called per sent attempt and per refused request.RenewalProgressrecord under a leaf mutex (renewal_progress_mutex, never held across I/O or allocation beyond one string move);in_progressis reset bySCOPE_EXITon every exit, exceptions included.CASMountRenewalAttempts/CASMountRenewalRetriesare counted per attempt instead of from the result.Risks / notes
cas_mount_renew_period_ms.LISTof the slots.Testing
renewalProgressfollows the call and resets on an exception; the local-failure filter (red on the base:gtest_cas_request_observer.cpp,gtest_cas_mount_renewal_progress.cpp).test_cas_mount_renewal_retrygains a scenario that reads the columns while RustFS is stopped.CAS*gate: 2614 (release), 2618 (ASan, no error).Related: #2431
Changelog category (leave one):
Changelog entry (a user-readable short description of the changes that goes to CHANGELOG.md):
system.cas_mountsgainsrenewal_in_progress,renewal_attemptsandlast_renewal_error, updated while a CAS mount lease renewal runs.Documentation entry for user-facing changes
Updated
docs/en/operations/system-tables/cas_mounts.mdanddocs/en/antalya/cas/architecture/mounts-and-leases.md.CI/CD Options
Exclude tests:
Regression jobs to run: