Skip to content

The PostgreSQL engine absorbs what waves 4–5 reported back: get_pg_database_stats surfaces numbackends, get_pg_cpu_utilization carries the host's memory, the spill leads to the memory composition check, ANOMALY_PG_CPU_BURN is the load family's stock second confirmer, autovacuum_enabled = off reads as off, the replication e2e is anchored, and four stale docs say what is true now (partial #3691, between waves) - #3832

Merged
erikdarlingdata merged 1 commit into
devfrom
feat/3691-between-waves-3
Sep 20, 2026

Conversation

@erikdarlingdata

Copy link
Copy Markdown
Owner

What does this PR do?

Headline mechanism. The third between-waves shared-file batch of #3691 — what #3688 and #3737 were for the earlier waves. Waves 4–5 (lanes 25–36) each reported items they could not make inside their file-disjoint boundary, and lane 36's real-stock measurement (16/17 stock families reachable, four stories past 1.5, the load-anomaly pair capped at 1.30 exactly with ANOMALY_PG_CPU_BURN firing at 25σ beside them, unread) turned two of them into decisions. This PR decides and makes all nine as one change. PARTIAL for #3691 — do not close. The checklist lines it completes, verbatim: the two PgTargetToolRecommendations / get_pg_database_stats residue lines (numbackends surfaced on the database read; the memory rows now point at a read that carries memory) and the replication-flake line; item 7's line (the stock second confirmer) is enabled — the coordinator sent GO on lane 36's number.

The lies it stops telling

Censuses that fired, and how each was satisfied

DarlingPgReadSqlParsesLiveTests (caught the CTE omission — fixed, not exempted); PgNumbackendsAndSampledMsRungTests.NoReaderSelectsEitherColumnYet… → re-shaped as the consumers-landed pin (MAX, no LAG, no SUM; the reader doc's new sentences); PgDatabaseSizeStatsAndHostMemoryRungTests (two-member roster, above); ViewerPostgresTabsTests.EveryFieldTheSharedReadersReturn… (a column, not a fold); PgTargetTempTests / PgTargetMemoryTests / PgTargetKernelTests / PgTargetV3PlumbingTests / PgTargetSharedSwitchRoutingTests / PgTargetAnomalyTests / PgTargetSampledWaitTests pins moved with the fold and the arm counts, each saying why. Green with no edit: DocCommentHygiene, RepoFileAdoption (single-line anchors, ReadRepoFile), AuroraOnlySqlIsGated, StoreSqlClockDiscipline, LiveCleanupConversionRatchet + LivePostgresCollectionHygiene (the new live class rolls back — no finally, no store write survives), BaselineSupply, LocalClockBucketKey, FleetIdentifierScrub, CommentFilterAdoption, McpPageContract, FactSourceRegistry, MeasurementContractCensus, AsOfWindowAnchor, McpReadCommandTimeout, ServerPageTabs, ViewerCollectorCoverage.

Blast radius

SQL Server pass: byte-identical — no shared switch changed; the routing pins pass unchanged. PostgreSQL pass: an extreme load anomaly beside a fired burn anomaly pages where it read 1.30; a spilling Aurora host whose pressure is quiet may now tell spill → sum (previously spill → work_mem or alone); the burn anomaly folds onto the decomposition incident; autovacuum_disabled is TRUE for the docs' spelling from the next collection (the fact and the advice were already written for it). Alert path untouched (LatestCpuSql, SamplesSinceSql byte-identical; the gate constructs Memory: null). No schema, no rung, no StorageVersion bump (V137 is dev's).

What it does NOT do

No Lite twin (no pg_* table in DuckDB). No backfill of autovacuum_disabled on stored rows (the next collection rewrites it). No per-queryid plan anomaly (lane 27's follow-up, now correctly described). No Viewer rendering of the memory columns (the memory family's tool rows point at the MCP read; the Viewer's CPU tab is unchanged). Does not arm auto-merge (review-dark window); landing order is the coordinator's.

Test plan

New: Darling/Darling.Tests/PgTargetBetweenWavesV3Tests.cs (8 tests: memory shape + description + payload keys; the edge, its gate, its file and the two story shapes; the four docs; the e2e's as_of; the rename; the 1.6 / 1.3 / quiet-burn / symmetry pins; item 9), PgAutovacuumDisabledSpellingLiveTests.cs (live, rolled back), DarlingPgDatabaseReaderTests.NumbackendsIsProjectedAsAPeakLevel…, Lite.Tests…DetectsAutovacuumDisabledPerTable_ThroughTheBooleanCast_NotAStringCompare. Executed here, not only compiled — a net10.0 harness (AssemblyName=Darling.Tests, the whole Darling.Tests tree minus the WPF-only classes, Viewer dll referenced) against a throwaway timescale/timescaledb:2.28.1-pg18 on Docker context desktop-linux, migrated by the fixture: 1148 / 1148 green across every PgTarget*Tests class, the censuses above and every touched reader/tool test, live e2es included (memory Aurora + stock, replication ×6, vacuum, the new spelling class); the Lite pin executed in a Collectors-only net10.0 harness (17 / 17). Builds, zero warnings: PerformanceMonitor.Analysis, PerformanceMonitor.Collectors, PerformanceMonitor.Darling.Service, PerformanceMonitor.Darling.Viewer (EnableWindowsTargeting), Darling.Tests, Lite.Tests. CI's Windows job is the first execution of the Viewer XAML column and the Lite test as shipped.

Which component(s) does this affect?

  • Lite
  • Darling
  • Lite Tests
  • Darling Tests
  • SQL collection scripts (the PostgreSQL autovacuum collector's statement)
  • Documentation
  • Full Dashboard (deprecated)
  • CLI Installer (deprecated)

How was this tested?

Above. No production store or fleet server was read; the rig was a local container, torn down.

Checklist

  • I have read the contributing guide
  • My code builds with zero warnings (dotnet build -c Debug)
  • I have tested my changes against at least one SQL Server version (not applicable — every changed arm is PostgreSQL-only; the SQL Server pass is unreachable by all of them and the routing pins re-prove it)
  • I have not introduced any hardcoded credentials or server names

Partial for #3691 (between waves, batch 3). CHANGELOG deliberately untouched — the coordinator splices this wave's entries.

…tabase_stats surfaces numbackends, get_pg_cpu_utilization carries the host's memory, the spill leads to the memory composition check, ANOMALY_PG_CPU_BURN is the load family's stock second confirmer, the autovacuum collector reads autovacuum_enabled = off as off, the replication e2e is anchored on as_of, and four stale docs say what is true now (partial #3691, between waves)
@erikdarlingdata
erikdarlingdata merged commit f19a97d into dev Sep 20, 2026
6 of 7 checks passed
@erikdarlingdata
erikdarlingdata deleted the feat/3691-between-waves-3 branch September 20, 2026 19:00
erikdarlingdata added a commit that referenced this pull request Sep 21, 2026
…d fail: #3826's two informational store self-alerts were never named in the constant an operator reads, and the pin that would have said so ran on a cancelled check

AlertReadFailureCounter.FleetScopedReads is the prose every collection-health surface concatenates — it tells an operator which reads can put a number in the instance total and in no server's count. #3826 added the plan dimension's TOAST slack read and the store checkpointer pressure read, both RecordReadFailure(null, ...) sites, and named neither. An operator reading a nonzero instance total against that list would have gone looking for a cause the list does not contain.

The constant now names both. TheFleetScopedInventory_MatchesWhatTheCounterActuallyRecords derives its set from source rather than from a hand-maintained list, so it saw eleven against an asserted nine; the count is eleven, each new site is asserted present in the recorded set AND in the constant, and the Darling-only tally in the mute-rule comment is recounted from the source rather than carried forward - it said four when the answer was nine.

This is not new breakage. dev has been red on `build` since #3832; #3826 introduced it and merged while its own `build` check was cancelled rather than red, so nothing ever reported it.
erikdarlingdata added a commit that referenced this pull request Sep 21, 2026
…tgreSQL anomaly-key census counted thirteen where fourteen keys are declared, and the fleet-scoped read inventory promised nine reads where eleven can fail (#3837)

* The PostgreSQL anomaly-key census asserted thirteen while its own comment enumerated fourteen: lane 34 and lane 38 each bumped the same count to 13 for their own key, and git merged the two identical lines without a conflict (#3831 residue)

The census reflects over PgTargetFactKeys' ANOMALY_PG_ literals, excludes AnomalyPrefix and counts what is left. Fourteen keys are declared; the comment above the assertion names all fourteen (five v1, three v2, blocking, the stock sampled wait profile, the two v3, lane 34's own-normal share, lane 38's database growth). The number said thirteen.

Neither lane was wrong on its own: each added one key to a base of twelve and wrote 13. The lines were textually identical, so the three-way merge took them as one change rather than two, and the conflict that would have surfaced the arithmetic never appeared.

* The fleet-scoped read inventory promised nine reads while eleven could fail: #3826's two informational store self-alerts were never named in the constant an operator reads, and the pin that would have said so ran on a cancelled check

AlertReadFailureCounter.FleetScopedReads is the prose every collection-health surface concatenates — it tells an operator which reads can put a number in the instance total and in no server's count. #3826 added the plan dimension's TOAST slack read and the store checkpointer pressure read, both RecordReadFailure(null, ...) sites, and named neither. An operator reading a nonzero instance total against that list would have gone looking for a cause the list does not contain.

The constant now names both. TheFleetScopedInventory_MatchesWhatTheCounterActuallyRecords derives its set from source rather than from a hand-maintained list, so it saw eleven against an asserted nine; the count is eleven, each new site is asserted present in the recorded set AND in the constant, and the Darling-only tally in the mute-rule comment is recounted from the source rather than carried forward - it said four when the answer was nine.

This is not new breakage. dev has been red on `build` since #3832; #3826 introduced it and merged while its own `build` check was cancelled rather than red, so nothing ever reported it.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant