oxidecomputer / oxidecomputer/omicron

Include caboose NAME field in SP update skip criteria during mupdate.

Open
#11,278 0 comments 0 reactions 0 assignees View on GitHub

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

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.