From 5cf284e94faf0d1a93b09b919dac5cabbdaf923b Mon Sep 17 00:00:00 2001 From: karencfv Date: Wed, 22 Jul 2026 13:30:08 +1200 Subject: [PATCH 1/2] [update-status] enable stuck saga reporting --- nexus/src/app/update.rs | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/nexus/src/app/update.rs b/nexus/src/app/update.rs index a54aa909de8..1b1d7c94874 100644 --- a/nexus/src/app/update.rs +++ b/nexus/src/app/update.rs @@ -60,8 +60,6 @@ use uuid::Uuid; /// and 19m23s). Since sagas running longer than 15 minutes are so rare in /// practice, we use that as the threshold. Anything older is much more likely /// stuck than legitimately still in progress. -// TODO-K: Remove in https://github.com/oxidecomputer/omicron/issues/10538 -#[cfg(test)] const STUCK_SAGA_THRESHOLD: TimeDelta = TimeDelta::minutes(15); /// Threshold at which we consider an inventory collection too old for the @@ -629,16 +627,17 @@ impl super::Nexus { UpdateActivityState::Idle | UpdateActivityState::Stuck => {} }; + let stuck_sagas = self + .datastore() + .saga_list_running_or_unwinding_older_than( + opctx, + Utc::now() - STUCK_SAGA_THRESHOLD, + ) + .await; + let checks = UpdateContactSupportChecksInput { inventory, - // TODO-K: Temporarily disabling the retrieval of stuck sagas. - // In https://github.com/oxidecomputer/omicron/issues/10531 we found - // some old unwinding sagas that didn't really affect the update - // process in any way. The actual new retrieval method will be in - // https://github.com/oxidecomputer/omicron/issues/10538, but to - // make sure we don't block the upcoming release, we are disabling - // saga reporting for now. - stuck_sagas: Ok(vec![]), + stuck_sagas, blueprint, current_target_version: current_target_version.cloned(), internal_update_status, @@ -1313,11 +1312,10 @@ mod test { let version = fake_target_version(); let blueprint = fake_blueprint(&cptestctx.logctx.log, &version, Utc::now(), false); - // There is a stuck active saga, but no update has ever been run. This - // should prompt the user to contact support, but we disabled stuck - // staga retrieval temporarily. Contact support should be false + // There is a stuck active saga no update has ever been run, contact + // support should be true assert!( - !nexus + nexus .contact_support( &opctx, inventory, From 57ef99967933e0498b78d41dc5bf87f9a1d8c269 Mon Sep 17 00:00:00 2001 From: karencfv Date: Wed, 22 Jul 2026 13:35:02 +1200 Subject: [PATCH 2/2] fix comment --- nexus/src/app/update.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nexus/src/app/update.rs b/nexus/src/app/update.rs index 1b1d7c94874..a6058aa5fdf 100644 --- a/nexus/src/app/update.rs +++ b/nexus/src/app/update.rs @@ -1312,8 +1312,8 @@ mod test { let version = fake_target_version(); let blueprint = fake_blueprint(&cptestctx.logctx.log, &version, Utc::now(), false); - // There is a stuck active saga no update has ever been run, contact - // support should be true + // There is a stuck active saga, and no update has ever been run. + // contact_support should be true. assert!( nexus .contact_support(