perf(runtime): split trigger evals from the blocking pool; bounded, deadline-aware execution

This commit is contained in:
Joseph Doherty
2026-08-14 22:36:15 -04:00
parent 312216ff2b
commit c4fc1f8ecd
42 changed files with 3673 additions and 1251 deletions
@@ -74,6 +74,25 @@ public record SiteHealthReport(
/// </summary>
public double? ScriptOldestBusyAgeSeconds { get; init; }
/// <summary>
/// WP3.1: script-execution worker threads the stuck-script watchdog has DETACHED and
/// replaced — a script wedged past its deadline plus grace in uninterruptible blocking
/// I/O, so the pool started a fresh thread and the wedged one will exit only when its
/// body finally returns. Point-in-time, refreshed by <c>ScriptSchedulerStatsReporter</c>.
/// Zero is the healthy state; a value that climbs and never drains means script bodies
/// are permanently consuming threads and the pool is being repeatedly rebuilt around them.
/// </summary>
public int DetachedScriptThreads { get; init; }
/// <summary>
/// WP3.1: per-interval count of script and alarm on-trigger runs SHED because
/// <c>MaxConcurrentRunsPerScript</c> runs were already in flight for that script. Raw
/// per-interval count (drained on collect) like <see cref="ScriptErrorCount"/>. A
/// sustained non-zero value means a trigger is firing faster than its script completes;
/// the shed itself is the designed back-pressure, not an error.
/// </summary>
public int ScriptRunShedCount { get; init; }
// LocalDb 2-node replication of the consolidated site database (Phase 1).
// Additive init properties for the same reason as the scheduler gauges above:
// the positional constructor stays untouched. Refreshed on the site by