Currently Nexus is not very smart at all about when it tells Sled Agent to apply updates.
|
// demo-grade update logic: tell all sleds to apply all artifacts |
|
for sled in self |
|
.db_datastore |
|
.sled_list(&DataPageParams { |
|
marker: None, |
|
direction: PaginationOrder::Ascending, |
|
limit: NonZeroU32::new(100).unwrap(), |
|
}) |
|
.await? |
|
{ |
|
let client = self.sled_client(&sled.id()).await?; |
|
for artifact in &artifacts { |
|
info!( |
|
self.log, |
|
"telling sled {} to apply {}", |
|
sled.id(), |
|
artifact.target_name |
|
); |
Nexus needs to know:
- Versions of software and firmware across the rack, so it can determine what needs updates
- Update constraints (e.g. "this is an OS ramdisk; the sled must be evacuated of workloads so we can reboot", but also "the customer wants to hold back this component to this version because of Reasons")
With this information, Nexus needs to create an update plan that is a list of ordered steps for any running Nexus to execute. Nexus will periodically re-evaluate its plan to match the current state of the system and what new updates are available.
(From #717)
Currently Nexus is not very smart at all about when it tells Sled Agent to apply updates.
omicron/nexus/src/nexus.rs
Lines 2873 to 2890 in 6f6aba6
Nexus needs to know:
With this information, Nexus needs to create an update plan that is a list of ordered steps for any running Nexus to execute. Nexus will periodically re-evaluate its plan to match the current state of the system and what new updates are available.
(From #717)