Repository navigation
review: follow-ups - #554
Merged
Merged
Conversation
- deploy.md Upgrading: from v0.1.31 a config with a balloon block fails to load; claims v0.1.30 inflated stay inflated (deflate running ones with a v0.1.30 reload that removes the block, hibernated ones with a POST after the wake); POST /balloon now needs a target body. - A move aborted after it consumed the claim's row marks the claim due, so the next replica sweep puts the row back instead of leaving the claim without failover for up to an interval. - A never-replicated claim claimed within the last interval anchors its first round on its claim time, as before v0.1.31; only older claims without replica_at get the id offset, the restart case. - settleReplicaIntent stamps replica_at when it promotes a landed round. - The balloon verb check caches only a pass, so a failed or timed-out first check no longer refuses every later call until a restart. - Docs: an adoption carries the round before the last; the idle clock across a clean restart and a crash; a warm VM retires an old one only once the warm set is back at target. - Tests: a move and an adoption carrying replica_at, a downtime abort replicating at the next sweep, a new claim's first round, the settle stamp, the verb check retried, and an outgoing move refused a balloon.
balloonReady takes the request's context, so a cancelled POST stops its verb check. The abort-after-unrow move test now ends on a replicate sweep instead of a direct round, which is the path the due mark fixes, so the separate downtime-abort test goes; a no-op wait goes too.
…pgrade note says which claims to restore The due mark came from mv.replica, which the journal does not keep, so an abort resumed after a restart never set it. It now reads the state unrowForMove leaves: no replica checkpoint and a replica_at kept. The upgrade note restores every claim whose inspected balloon target is above its default, including running claims the reload did not deflate.
…eplica, keeps the claim due for failover An abort after the guest paused marks the claim due whatever the row writes answered, so a consume whose reply was lost (the row a tombstone, ReplicaCk kept) is repaired at the next sweep instead of the hourly one. A restart that promotes a landed pending round stamps replica_at, so a later unrowed abort of that claim still reads as due.
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.
Follow-ups from the reviewer's v0.1.31 whole-range round on 02ec252..93fc22b (ledger in the round notes). No P1 was found.
Changes
Upgrading from v0.1.31 (P2, docs). deploy.md gets a "From v0.1.31" note:
balloonblock fails to load, so remove it on every node before the roll;POST /v1/sandboxes/{id}/balloonwith the boot target after the wake;targetbody, and an empty one answers 400 where v0.1.30 answered 202.No balloon logic comes back into sandboxd.
A downtime abort leaves no failover gap (P3, pool: a live move aborts a paused final round that overruns max_downtime_ms, and reports its phases #553 × pool: a restart keeps each claim's replica interval from its last round, and first rounds spread over an interval #551). A move aborted after
unrowForMoveconsumed the claim's row marks the claimReplicaDue. The next replica sweep makes it due at once and puts the row back. Before, the old anchor inm.replicasleft the claim without failover for up to one interval.New claims replicate as in v0.1.30 (P3, pool: a restart keeps each claim's replica interval from its last round, and first rounds spread over an interval #551). A never-replicated claim claimed within the last interval anchors its first round on
ClaimedAt, one interval after the claim. Only claims older than that and withoutreplica_atget the id offset; that is the restart case CMGS asked for.settleReplicaIntentstampsreplica_atwhen it promotes a landed pending round.The balloon verb check caches only a pass. A failed or timed-out first
cocoon vm balloon --helpno longer refuses every later call until a restart.Docs.
Kept, per the reviewer:
LastSeen/SeenAtShutdownnaming;BalloonRequestwithout a comment.Cost.
POST /balloonreads an atomic once the check has passed, and checks again only after a failure.Tests.
TestANewClaimFirstReplicatesOneIntervalAfterItsClaimTestReplicaAdoptionCarriesTheRoundBeforeItsLastTestReplicaSettledLostPutReplyStampsItsRoundTestSetBalloonChecksTheVerbAgainAfterAFailedCheckreplica_atinTestMoveOfAReplicatedClaimDropsItsRowBeforeTheFinalRound.TestMoveAbortedAfterDroppingTheRowPutsItBackOnTheNextRoundnow ends on a replicate sweep. Its old directreplicatecall bypassed the due check, which is how it missed the gap.TestSetBalloonRefusesWhatItCannotReach.ClaimedAtanchor; no stamp on settle; the originalsync.OnceValue./simplify (four lenses):
balloonReadytakes the request context;waitForis dropped.replica_atas it was, so that test cannot see the stamp;Gates (fail-fast script):
0 issues.on darwin and linux; fmt clean; asl clean.go test -race ./...green on darwin; linux/arm64 green except the container-onlyutilstest that also fails on main.