Small follow-ups from the #667-#673 batch (retention cancel path, #672 tests, FOCAS flake, cosmetics, rig cert) #678

Closed
opened 2026-10-11 10:18:15 -04:00 by dohertj2 · 1 comment
Owner

Small follow-ups from the #667–#673 batch.

  1. #667: the release-after-cancel-between-batches path is not independently proven (a SqlClient cancel likely dooms the session; the pool-clear fallback should cover it — add a test).
  2. #672: add a test for a host that starts while its peer is already unreachable (InitialStateAsEvents path); strengthen Self_unreachable_is_ignored's final assertion; optional Debug log for a stale-unreachable exclusion; the write-refusal control was not run in the live gate (no data-plane key at the time).
  3. FOCAS flake: WireBackendTests.Spindle_load_and_motor_speed_populate_via_wire_backend failed once under full-suite load with a concurrent docker build; 3/3 green isolated, green in the final suite. Watch.
  4. QuestDB: QuestDbSchemaBootstrapper.cs:140 logs "Applied TTL null day(s)" when clearing TTL — cosmetic wording.
  5. Rig: Client.CLI against central-2 (:4841) fails with a certificate error (an SDK client connects fine) — fix the rig cert trust.
  6. Client SDK 1.5.378 defaults IsReadModified=true on some raw-read paths; confirm Client.CLI / Client.UI always set it false explicitly.
Small follow-ups from the #667–#673 batch. 1. **#667:** the release-after-cancel-between-batches path is not independently proven (a SqlClient cancel likely dooms the session; the pool-clear fallback should cover it — add a test). 2. **#672:** add a test for a host that starts while its peer is already unreachable (`InitialStateAsEvents` path); strengthen `Self_unreachable_is_ignored`'s final assertion; optional Debug log for a stale-unreachable exclusion; the write-refusal control was not run in the live gate (no data-plane key at the time). 3. **FOCAS flake:** `WireBackendTests.Spindle_load_and_motor_speed_populate_via_wire_backend` failed once under full-suite load with a concurrent docker build; 3/3 green isolated, green in the final suite. Watch. 4. **QuestDB:** `QuestDbSchemaBootstrapper.cs:140` logs "Applied TTL null day(s)" when clearing TTL — cosmetic wording. 5. **Rig:** Client.CLI against central-2 (`:4841`) fails with a certificate error (an SDK client connects fine) — fix the rig cert trust. 6. **Client SDK 1.5.378** defaults `IsReadModified=true` on some raw-read paths; confirm Client.CLI / Client.UI always set it false explicitly.
Author
Owner

Done — merged to master (1375f934 + 69190b14; client items in 3067146b/045a21da).

  1. Retention cancel path: new tests — a real mid-command SqlClient cancel while the purge's DELETE is blocked behind a table lock (cancelled only once sys.dm_exec_requests shows the DELETE blocked) still frees the applock; a failing release falls back to ClearPool (with a falsification control: a no-op ClearPool leaves the lock held).
  2. #672 tests: unreachable-before-first-snapshot (initial-state replay) path; Self_unreachable_is_ignored strengthened to [false, true, false] (the old tail proved nothing). The existing Information logs are already edge-triggered, so no extra Debug log.
  3. FOCAS flake — a real race: the test waited for spindle loads only while motor speeds are cached after a second round-trip; it now waits for both, and WaitFor fails loudly on timeout (it returned silently).
  4. QuestDB TTL log: "Cleared TTL on {Table}" vs "Applied TTL {Days} day(s)".
  5. Rig :4841 certificate error — a client bug: Client.CLI/UI rewrote only the host of the advertised endpoint, so :4841 opened the session on central-1. Now host and port are rewritten (port kept when the URL has none; IPv6 OK). Live: :4840–:4845 all connect.
  6. IsReadModified=false confirmed on every client raw read; a node-manager test that relied on the SDK default fixed.

Also fixed (found while investigating): per-role appsettings overlays never loaded on nodes with a cluster role (the suffix included cluster-*). Now built from plain roles. Audited: the driver overlay's Opc.Ua Debug override was lowered to Information. ⚠️ Release note: cluster-role nodes now get Security.Ldap.Transport=Ldaps from the overlay like non-cluster nodes already do — set Security__Ldap__Transport explicitly on any central node using plaintext LDAP. Added docker-dev/docker-compose.debug.yml (Debug per category; live-verified to reach actor logs). Live gate confirmed the overlay is loaded.

Done — merged to master (`1375f934` + `69190b14`; client items in `3067146b`/`045a21da`). 1. **Retention cancel path:** new tests — a real mid-command SqlClient cancel while the purge's DELETE is blocked behind a table lock (cancelled only once `sys.dm_exec_requests` shows the DELETE blocked) still frees the applock; a failing release falls back to `ClearPool` (with a falsification control: a no-op `ClearPool` leaves the lock held). 2. **#672 tests:** unreachable-before-first-snapshot (initial-state replay) path; `Self_unreachable_is_ignored` strengthened to `[false, true, false]` (the old tail proved nothing). The existing Information logs are already edge-triggered, so no extra Debug log. 3. **FOCAS flake — a real race:** the test waited for spindle loads only while motor speeds are cached after a second round-trip; it now waits for both, and `WaitFor` fails loudly on timeout (it returned silently). 4. QuestDB TTL log: "Cleared TTL on {Table}" vs "Applied TTL {Days} day(s)". 5. **Rig :4841 certificate error — a client bug:** Client.CLI/UI rewrote only the host of the advertised endpoint, so `:4841` opened the session on central-1. Now host **and** port are rewritten (port kept when the URL has none; IPv6 OK). Live: `:4840`–`:4845` all connect. 6. `IsReadModified=false` confirmed on every client raw read; a node-manager test that relied on the SDK default fixed. **Also fixed (found while investigating):** per-role appsettings overlays never loaded on nodes with a cluster role (the suffix included `cluster-*`). Now built from plain roles. Audited: the driver overlay's `Opc.Ua` Debug override was lowered to Information. ⚠️ **Release note:** cluster-role nodes now get `Security.Ldap.Transport=Ldaps` from the overlay like non-cluster nodes already do — set `Security__Ldap__Transport` explicitly on any central node using plaintext LDAP. Added `docker-dev/docker-compose.debug.yml` (Debug per category; live-verified to reach actor logs). Live gate confirmed the overlay is loaded.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: dohertj2/lmxopcua#678