oxidecomputer / oxidecomputer/hubris

compute-sled sequencer: Provide a "reset the host" operation

Open
#2,190 11 comments 0 reactions 1 assignee View on GitHub

@hawkw is already working on this.

Since Aug 11, 2025.

cosmo gimlet
Dominant language
Rust
Stars
3.6k
Forks
239
Avg merge
1d 12h
Merged PRs (30d)
23

Description

(This is one of the issues from #2178, and is the most urgent of that list w.r.t. shipping Reconfigurator-driven updates.)

Today if the host wants to reboot itself, it sends a single RequestReboot message to the host-sp-comms task. Internally, host-sp-comms handles this by asking the sequencer to go to A2, waiting for that transition, then once it sees it, setting a timer to put the host back in A0.

As a part of Reconfigurator-driven host OS updates, Nexus also wants to be able to issue host OS reboots to target sleds. control-plane-agent does not expose a single "reboot the host" operation akin to the one host-sp-comms provides, so there are a couple options to implement this:

  1. Send a "go to A2" message, sleep briefly, then send a "go to A0" message. (This is what pilot sp cycle does.)
  2. Reset the SP.

Both of these have downsides: 1 means a Nexus can't reboot its own sled's host OS, because it will not be alive to send the "go to A0" message. 2 means we're unnecessarily resetting the SP just for the side effect of rebooting the host. 1 is significantly more disruptive to Reconfigurator updates, so currently we're doing 2.

Reimplementing host-sp-comms's logic in control-plane-agent doesn't seem great: in addition to the duplication, now we have the opportunity for dueling controllers (what if Nexus tries to reboot a host while it's already rebooting from an IPCC request?). Instead, can the sequencer provide a "reboot the host" operation that both host-sp-comms and control-plane-agent can use?

In terms of urgency: Reconfigurator is not blocked on this because it's using "reset the SP" in its place. But it'd be nice to swap that out for this in the R17/R18 timeframe.

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.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.