oxidecomputer / oxidecomputer/hubris

want SP restart IDs in MGS messages

Open
#2,462 4 comments 0 reactions 1 assignee View on GitHub

@jamesmunns is already working on this.

Since Jul 15, 2026.

control-plane-agent fault-management service processor
Dominant language
Rust
Stars
3.6k
Forks
239
Avg merge
1d 12h
Merged PRs (30d)
23

Description

I left a note about this in https://github.com/oxidecomputer/hubris/issues/2212#issuecomment-3287413613, but it deserves its own issue. The control plane's fault management uniquely identifies a restart of a service processor via a 128-bit restart ID, which is generated by the RNG driver and posted to packrat, here:
https://github.com/oxidecomputer/hubris/blob/3b9b40d840984e3cca6d40e73f020f96a40538c5/task/packrat/src/main.rs#L507-L514

The restart ID is then included in every ereport received by the SP.

I'd really like these same restart IDs to be included in messages sent through the control-plane-agent protocol; in particular, the messages that drive SP sensor metrics in Oximeter (collected by MGS) and the messages that drive SP inventory collection in Nexus. This way, we can associate that data with a restart ID that produced a particular ereport.

In an ideal world, we would just include the restart ID in every single response from the SP. But, this might be painful, both in terms of eating up >16 bytes of the UDP packet and also that it would be a MGS API breaking change, which are always unpleasant. We could also add a new MGS request to read the restart ID. This would require code in upstack software that makes multiple requests to the SP, such as the MGS metrics code, to read the restart ID both before and after reading other data (in this case, the sensor readings), to ensure that the SP did not restart at some point during the sequence of multiple requests for other data. If it has, it wouldn't be possible to determine at what point exactly it restarted, so the control plane would have to throw out everything and start over from the beginning.

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.