Bound AlwaysRun scheduler progress waits - #3872
Conversation
There was a problem hiding this comment.
Code review
Nice, tightly-scoped fix. Decoupling the AlwaysRun scheduler-progress watchdog from DefaultModuleTimeout into its own AlwaysRunProgressTimeout (default 30s) directly addresses #3794 — a disabled DefaultModuleTimeout no longer leaves deferred AlwaysRun modules waiting forever. Validation, XML docs, and the timeouts guide were all updated consistently with the existing DefaultModuleTimeout pattern.
One thing worth tightening:
Test no longer exercises what its name/setup claims — AlwaysRunHandlerTests.cs#L360-L365
WaitForAlwaysRunModulesAsync_TimesOutWhenModuleTimeoutsAreDisabled was renamed from ...WhenSchedulerCannotMakeProgress and now passes defaultModuleTimeout: TimeSpan.Zero via the CreateHandler helper (CreateHandler, L461-L482). But AlwaysRunHandler no longer reads DefaultModuleTimeout at all — it only reads AlwaysRunProgressTimeout (AlwaysRunHandler.cs line 24). So defaultModuleTimeout is dead weight here: the test would time out identically whether that value is Zero or TimeSpan.FromMinutes(30), since it's the default AlwaysRunProgressTimeout (30s, unset in this call) driving the timeout, not DefaultModuleTimeout.
The rename makes it read as "this verifies the watchdog still fires when module timeouts are disabled," but the code path being asserted has already been fully decoupled from that setting by this same PR. That's a bit self-contradicting and could mislead a future reader into thinking DefaultModuleTimeout still matters to AlwaysRunHandler.
Suggest either:
- Drop the now-unused
defaultModuleTimeoutparameter fromCreateHandlerand this call site (nothing else in the diff needs it), or - If you want a regression test that documents "disabling
DefaultModuleTimeoutno longer causes indefinite AlwaysRun waits," write it at a level that actually wires both options together (e.g. throughPipelineOptions/builder) so the assertion is coupled to real behavior rather than an inert constructor argument.
Everything else looks solid — thanks for the focused change and good test coverage on the new option's validation/default.
|
Review feedback addressed at e6b3cf9. The helper now accepts the complete PipelineOptions object, so the regression explicitly wires DefaultModuleTimeout = TimeSpan.Zero while leaving the dedicated 30-second AlwaysRunProgressTimeout at its real default. The focused regression passes. Please re-review current head. |
Code reviewRe-reviewed at No other references to the old No further issues found. Nice, focused fix. |
…-progress-timeout
|
Refreshed onto current main after the prior Ubuntu full-suite run ended without a failing-test summary (test host exit 2, workflow exit 134). Focused validation on 4e66447: AlwaysRunHandlerTests 8/8, ModuleTimeoutTests 13/13, ValidationTests 40/40, and ModularPipelines.slnx Release build succeeded with 0 warnings/errors. |
Code reviewRe-reviewed at Recap of the fix: The earlier round's feedback (test No further issues found — this is a small, well-scoped decoupling with matching test, validation, and doc coverage. |
…-progress-timeout
|
Refreshed onto current main in 68627a5 after required Ubuntu CI again hit the known core-test host failure (no failed-test summary; exit 2/134 after 15m51s). Local validation: AlwaysRunHandlerTests 8/8, ModuleTimeoutTests 13/13, ValidationTests 40/40; core Release build 0 warnings/errors. |
Code reviewNo new issues found. This PR has already been reviewed across three prior rounds (
The current head ( |
Closes #3794
Summary
Validation