Conversation
A commit re-stages the image that just proved itself, so the slot the device stopped booting from stops holding the version before the update. Nothing activates afterwards: the payload lands in the inactive slot and stays there, which is what a fallback needs. Re-stages rather than copying between slots, because Updatable keeps slot identity on the device's side. The candidate is still in the staging region, which submit_update and discard_staged keep true by dropping the queued re-sync whenever the region changes hands. The cost is a second full transfer; copying between slots needs a seam that names them, which is a larger decision. The pump runs the pass, not the commit executor: a transfer takes minutes and an executor must return promptly. The SM is never told the result, because a verdict would start a second activation of an image the device already runs. A device that fails or stalls the pass is reported as SlotResyncFailed and the job ends there, with the running image committed either way. A re-sync occupies the job while it runs, so an update requested mid-pass is deferred: the candidate would overwrite the bytes being written. Assisted-by: Claude
This branch has not been deployed
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.
Rebased onto
ocp-global-demo-wipnow that #511 merged. One commit, no stack note. The only rebase fix wasEvent::UpdateVerified, which no longer carries a component id.This is SOW P7, "additional partitions up to date", in its cheaper shape.
A commit re-stages the image that just proved itself, so the slot the device stopped booting from stops holding the version from before the update. Nothing activates afterwards: the payload lands in the inactive slot and stays there.
It re-stages rather than copying between slots, because
Updatablekeeps slot identity on the device's side ("which slot is inactive is device state"). The candidate is still in the staging region: the machine runs one job at a time, so nothing has overwritten it since the activation. The cost is a second full transfer. Copying between slots instead needs a seam that names them, which is the larger decision, parked for the week of 2026-10-11.The pump runs the pass, not the commit executor: a transfer takes minutes and an executor must return promptly. The SM is never told the result, because a verdict would start a second activation of an image the device already runs. A device that fails the pass reports
SlotResyncFailedand the job ends there, with the running image committed either way.Rebase note: the merged pump parks at
Stagedand emits noUpdateVerifieduntil the crypto verify client (#490) is wired, and the candidate-verifier seam this branch was written against did not survive into #506. The tests here pump until the device holds the payload and then dispatch the verdict directly, so they exercise what follows activation rather than the pump reaching it. The verify session andUpdateVerifierboard seam the earlier revision carried are gone with it;abandon_jobonly tells the device to drop what it was staging.Two things this assumes, both worth a second opinion:
Staged bytes in the spare slot are what a fallback boots.
Updatablesays writes go to the inactive slot andactivateflips the metadata, but it does not say a slot written and never activated is bootable. That is the staging-is-inert slot question from the #431 follow-ups, still open with Anthony.An update that is submitted and then discarded between the activation and the confirmed boot cancels the re-sync for good: the region changed hands, so re-staging from it would write the wrong image. The spare slot then keeps pre-update firmware and nothing reports it, because by commit time the driver cannot tell that case from "no update to re-sync". Telling them apart needs a tombstone, which I have not added.