You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Enumerated collectors that yield zero items log SUCCESS indistinguishable from healthy #1837
Spun out of #1833's triage. The reason both empty-grid defects (#1833, and the Query Store issue filed alongside this one) went unreported for so long is that they are invisible in Collection Health: the zero-item path returns SUCCESS with rows_collected = 0 and no message, so "collected nothing for weeks" reads as healthy.
The per-database (RunsPerDatabase) branch already has an "every item failed, so rethrow as an error" guard (RemoteCollectorService.DefinitionRunner.cs:187-192). The enumerated branch has no equivalent: an enumeration that returns zero items — because the login can't enter any database, because every probe failed into an empty CATCH, or because a filter excluded everything — early-returns 0 as SUCCESS (DefinitionRunner.cs:218-222).
Sketch: when an enumerating collector's enumeration yields zero items on a target where that is surprising (e.g., the server has user databases), log a distinguishable status or at least a message on the SUCCESS row, so Collection Health can band it. Needs a little design care to avoid crying wolf on legitimately-empty servers.
Applies to both Lite and Darling (shared runner shape in DarlingCollectorRunner).
Scope addition from #1836's implementation: surfacing the on-prem Query Store enumeration's per-database PROBE failures (the empty CATCH) turns out to need a driver contract change - the enumeration's result set IS the item list both runners consume as database names, so failures cannot ride it. The natural home is the _lastCollectionNote / EmptyEnumerationMessage mechanism this issue's minimal fix introduced: the SQL needs a way to hand the runner a note alongside the item list. Fold that into this issue's design rather than a separate one.
Shipped across #1843 (minimal note), #1854 (probe-failure contract + health visibility), #1864 (newest-first note ranking), and #1868 (the has-user-databases qualifier). Remaining adjacent items live in #1865 and #1867.
Activity
erikdarlingdata commentedon Jul 30, 2026
Scope addition from #1836's implementation: surfacing the on-prem Query Store enumeration's per-database PROBE failures (the empty CATCH) turns out to need a driver contract change - the enumeration's result set IS the item list both runners consume as database names, so failures cannot ride it. The natural home is the _lastCollectionNote / EmptyEnumerationMessage mechanism this issue's minimal fix introduced: the SQL needs a way to hand the runner a note alongside the item list. Fold that into this issue's design rather than a separate one.
Merge pull request #1854 from erikdarlingdata/feature/1837-empty-enum…
Collection Health: qualify a persistently-empty enumeration against t…
erikdarlingdata commentedon Jul 31, 2026
Shipped across #1843 (minimal note), #1854 (probe-failure contract + health visibility), #1864 (newest-first note ranking), and #1868 (the has-user-databases qualifier). Remaining adjacent items live in #1865 and #1867.
procedure_stats runs per database on Azure SQL Database (erikdarlingd…
Two alert/collection-log polish fixes, both SKUs
Make an empty enumeration visible in Collection Health, and let it sa…
Collection Health: show the newest note and error, not the greatest s…
database_size_stats: give the payload path a probe-failure channel (e…
Fix three reds, and the middle one was my description being wrong
Give a wall-clock-budget-abandoned cycle its own collection_log status (