oxidecomputer / oxidecomputer/omicron
MGS does not fail over metrics if the first Nexus returned by DNS is unreachable
Nobody has claimed this yet.
- Dominant language
- Rust
- Stars
- 572
- Forks
- 97
- Avg merge
- 2d 12h
- Merged PRs (30d)
- 96
Description
During a recent customer incident, one of the three sleds hosting a Nexus zone became unresponsive for an extended period. During this time, no SP metrics from either MGS were captured. Looking at the MGS logs, we observe:
2026-08-24 05:25:13.693Z WARN 51b308da-7500-4aed-beff-ce5035f0ba0e/1905 (producer-server) on oxz_switch: failed to register with Nexus, will retry
count = 209
delay = 38215.528565151s
error = Communication Error: error sending request for url (http://[fd00:1122:3344:10f::24]:12221/metrics/producers): error sending request for url (http://[fd00:1122:3344:10f::24]:12221/metrics/producers): operation timed out
file = oximeter/producer/src/lib.rs:376
The other two Nexus instances were up and healthy during this time, so MGS would have been able to register with one of them as a producer, had it tried.
Looking at how the Oximeter producer library resolves Nexus, it:
- Calls resolve_nexus_and_register
- This in turn calls out to lookup_socket_v6
lookup_socket_v6uses the first entry returned
Using something like lookup_all_socket_v6 and iterating until a healthy Nexus is found would be preferable.
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
Start in internal-dns/resolver/src/resolver.rs with lookup_socket_v6 and lookup_all_socket_v6, then trace their use from oximeter/producer/src/lib.rs in resolve_nexus_and_register. Verify the producer registration path when the first resolved Nexus is unreachable. Done means MGS can try another returned Nexus and register with a healthy instance.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rust
- Domain
- backend, networking
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Active
- Clarity
- Clearly specified
- Newbie friendliness
- 78/100