Repository navigation
fix(commitrequest): keep the creating fact past a no-op write, and order the 0.54 upgrade - #460
Conversation
|
Warning Review limit reachedYou've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Next included review available in 59 minutes. View limit details
Finishing Touches
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Codecov Report❌ Patch coverage is 📢 Thoughts on this report? Let us know! |
|
Lab check for finding 4: |
…der the 0.54 upgrade - The fact index files a creating fact in its own uid-keyed slot. A no-op patch returns the object at the resourceVersion the create stamped, so in the exact tier its fact replaced the creator's, and a request reapplied before its author resolved settled AuthorUnresolved. - The attribution guide and the tuned policy require RequestResponse capture of commitrequests create and patch: the author is matched by the uid and resourceVersion in responseObject, which Metadata level leaves out, and server-side apply creates with a patch. - UPGRADING gains an ordered "Upgrading from 0.54.0" checklist: stop new saves, drain open requests, upgrade, remove the admission webhook's leftovers (Helm keeps cert-manager's Secret; install.yaml removes nothing), and delete and recreate a request still open afterwards. The chart's upgrade section links to it before helm upgrade. - The mutation-lab normalizer writes a list's own resourceVersion as <list-rv>, outside the <rv-N> numbering: on k3s v1.37.1 the deletecollection list returned the last item's revision in some runs and a newer one in others, which made the nightly capture report drift. - configuration.md and the design text say a competing save of the same author is refused with SaveInProgress, not queued; architecture.md drops the Redis records for request authorship. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…he source streams once A request followed its apply until the worker's record aged out, which only happened when another save on the same worker resolved: an apply running past 15 minutes was then reported Lost, with a message blaming a restart, and one on a quiet worker was followed for ever. The follow now has an explicit deadline, git.SaveApplyTimeout (10 minutes from Ready): past it Applied settles Unknown, reason TimedOut, naming the commit and where the apply last stood. The worker keeps an unsettled record until past that deadline, so Lost again means only a restart. The CommitRequestServer rewrote its fact-stream set under its own mutex on every step while concurrent steps read it without one; it is now set once, as the reconciler already does. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Every limit a request runs into was documented apart, and the safety window before the attach not at all. One table now lists each stage, what ends it, and what the status says then; and it says why the push alone has no limit. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
1c5a425 to
3b9628f
Compare
Stacked on #459 (which is on #458 → #456 → #455). Addresses the five release-gate findings from the combined review of the stack at
e806a931.Changes
Created: a create, or a patch answered 201) in its own uid-keyed slot (factKindCreation), swept by the TTL like the ordinary tiers.lookupCreationreads only that slot. The exact tier could not serve it: a no-op patch returns the object at the resourceVersion the create stamped, so its fact landed on the same(uid, rv)and replaced the creator's.TestFactIndex_CreationSurvivesANoOpWriteAtItsVersionreproduces it.RequestResponsecapture ofcommitrequestscreateandpatch. The author is matched by the uid and resourceVersion inresponseObject, whichMetadatalevel leaves out, and server-side apply creates with apatch. The UPGRADING admission entry says the same.CommitRequests first": stop new saves, list and wait out open requests, adjust the policy and values, applycrds.yamland upgrade, remove the admission webhook's leftovers, then delete and recreate any request still open. That last step matters most for a control-cluster request for a mirroringGitTarget, which the new ownership check never refuses once 0.54 wrote conditions into it. Helm removes theValidatingWebhookConfigurationandCertificatebut not cert-manager's Secret;install.yaml(kubectl apply) removes nothing, so all three are deleted by name. It says none of the 0.53.0 recreation applies. The chart README's Upgrading section links to it beforehelm upgrade.metadata.resourceVersionas<list-rv>, outside the numbered<rv-N>space. That revision is when the API server read the list: on v1.37.1 it is the last item's revision in some runs and a newer one in others, which shifted every later placeholder and made the nightly capture report drift. CLUSTER.md's provenance note says so. Onlyaudit.deletecollection.yamlcarries a list.configuration.md,commitrequest-design.mdandcommit-timing-surface.mdsay a later save of the same author on the sameGitTargetis refused withSaveInProgresswhile the earlier one waits or collects, and that aNextsave closes a collecting window under the earlier message.architecture.mdno longer says Redis holds records for request authorship; a stalekey_prefix.gocomment goes too.Validation
task lintandtask testpass locally.task lab-capturerepeated on the lab cluster (v1.37.1+k3s1) to check the corpus no longer alternates; result in a comment below.🤖 Generated with Claude Code
Summary by CodeRabbit
Behavior Changes
Documentation