oxidecomputer / oxidecomputer/omicron
Include caboose NAME field in SP update skip criteria during mupdate.
Nobody has claimed this yet.
- Dominant language
- Rust
- Stars
- 572
- Forks
- 97
- Avg merge
- 2d 12h
- Merged PRs (30d)
- 96
Description
Currently, mudpate skips an SP update if the incoming artifact's version matches what's deployed.
See the existing logic here: https://github.com/oxidecomputer/omicron/blob/66610577f5522430b2747e48f68ea844464a9484/nexus/reconfigurator/planning/src/mgs_updates/sp.rs#L108
// If the artifact's version matches what's deployed, then no update is
// needed.
if artifact.version == expected_active_version {
debug!(log, "no SP update needed for board"; baseboard_id);
return Ok(MgsUpdateOutcome::NoUpdateNeeded);
}
It seems likely we want to skip SP update only if both VERS and NAME caboose fields match the incoming artifact. The NAME field includes image variants like -dev, -lab, or -reverso which are commonly used in lab & manufacturing environments.
In production manufacturing software, we always use the --force-update-rot-bootloader, --force-update-rot, & --force-update-sp flags during mupdate to ensure all components are updated. However, for ad-hoc cases, it would be convenient and (possibly!) less surprising to update in the non-matching NAME case.
There have been a few development scenarios where a mupdate is run on a rack using an official release (e.g. R20, R21, etc) but the Sidecar is still running -reverso post-update due to omission of a --force-* option.
There may be a good reason for the logic as-is. Sorry if I am missing something here!
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
The relevant logic is in nexus/reconfigurator/planning/src/mgs_updates/sp.rs around line 108. Start by reading the surrounding MGS update planning code and tracing how the artifact's VERS and NAME caboose fields are represented. Done means the skip decision accounts for the NAME variant as well as the deployed version, with behavior verified by the relevant tests if they can be located.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rust
- Domain
- backend, infrastructure
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 48/100