oxidecomputer / oxidecomputer/omicron
Blueprint planner is overly conservative with respect to NTP zones and timesync
Nobody has claimed this yet.
- Dominant language
- Rust
- Stars
- 572
- Forks
- 97
- Avg merge
- 2d 12h
- Merged PRs (30d)
- 96
Description
The planner is very careful to avoid doing anything with a sled on which it has just placed an NTP zone, which is well-commented inside of do_plan_add():
The final comment gets at the driving reason: avoiding sled-agent rejecting requests to provision zones because time isn't synchronized yet.
With zone startup now going through the config reconciler, sled-agent no longer behaves this way: it's fine to send a sled config that includes both a new NTP zone and a set of zones that depend on time being synchronized. sled-agent will start the NTP zone, and wait to start any zones that depend on timesync until after that new NTP zone is sync'd with its upstream. We could probably simplify do_plan_add() a fair bit based on this, although I think we would have to make some explicit policy decisions that today are implicit in "do nothing until time is sync'd" (e.g., are we willing to place discretionary services on a sled before it syncs time?).
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 nexus/reconfigurator/planning/src/planner.rs at do_plan_add(), especially the comments and logic linked in the issue. Read how the config reconciler and sled-agent now handle new NTP zones alongside time-dependent zones. Define the policy for discretionary services before simplifying the planner, and consider the work complete when the planner no longer applies unnecessary synchronization restrictions while preserving the intended startup behavior.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rust
- Domain
- backend
- Issue type
- Refactor
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100