Skip to content

WS5: probe each server-health column independently (true version-skew resilience)#1081

Merged
erikdarlingdata merged 1 commit into
devfrom
feature/ws5-server-props-per-column
Jun 8, 2026
Merged

WS5: probe each server-health column independently (true version-skew resilience)#1081
erikdarlingdata merged 1 commit into
devfrom
feature/ws5-server-props-per-column

Conversation

@erikdarlingdata

Copy link
Copy Markdown
Owner

Why (follow-up to #1079)

#1079 made the server_properties read skip the WS5 columns when absent, but it probed a single column (memory_dump_count) and treated the three as all-or-nothing — correct only because upgrades/04 adds them in that order. That's a hidden coupling to the migration's column order: a partial / repaired / out-of-order schema where the probed column exists but an earlier one doesn't would reference an absent column → the exact bind error the resilience was meant to prevent.

Change

  • Probe each column independently (three COL_LENGTH calls).
  • Build the SELECT from only the present columns (hardcoded literal names — no injection) and read each by GetOrdinal so the shifting ordinals don't matter.
  • Any subset — none, all, or partial — reads without a bind error.

Verified the probe live: present columns return a length, an absent one returns NULL.

Tests

Dashboard.Tests 457 — adds a partial-subset [Theory] (lpim+dumps, ifi-only, lpim-only, dumps-only) that the prior all-or-nothing form couldn't represent.

🤖 Generated with Claude Code

…w-resilient)

The previous resilience check (#1079) probed a single column (memory_dump_count) and
included/read all three server-health columns together -- correct ONLY because upgrades/04 happens
to add them in that order. That couples runtime behavior to the migration's column order: a
partial, repaired, or out-of-order schema where the probed column exists but an earlier one does
not would make the SELECT reference an absent column and bind-error -- the exact failure the
resilience was meant to prevent.

Now probe each column independently (three COL_LENGTH calls) and include only the present ones in
the SELECT (hardcoded names -- no injection), reading each by GetOrdinal so the shifting positions
do not matter. Any subset -- none, all, or partial -- reads without a bind error.

Dashboard.Tests 457 (+ a partial-subset theory the old all-or-nothing form could not cover).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@erikdarlingdata erikdarlingdata merged commit 8a0f157 into dev Jun 8, 2026
2 checks passed
@erikdarlingdata erikdarlingdata deleted the feature/ws5-server-props-per-column branch June 8, 2026 16:20
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