docs(localdb): record deviations D-6 and D-7 in the phase-2 recon
D-6 (payload-hash migrator ids over mig-{node}-{legacyId}) and D-7 (the
plan's Host.Tests project does not exist) were captured only in commit
messages and the tasks file. They belong with the other deviations, where
the next reader looks.
Claude-Session: https://claude.ai/code/session_01GASWkNEi68FSCtvr6rLoEW
This commit is contained in:
@@ -263,6 +263,30 @@ One genuine change: the drain's `ORDER BY` moves from `RowId ASC` to `enqueued_a
|
|||||||
a hashed TEXT id carries no insertion order. Round-trip ("O") timestamps sort lexicographically in
|
a hashed TEXT id carries no insertion order. Round-trip ("O") timestamps sort lexicographically in
|
||||||
chronological order, and `id` makes the ordering total; the index covers both.
|
chronological order, and `id` makes the ordering total; the index covers both.
|
||||||
|
|
||||||
|
### D-6 — The migrator keys on the payload hash, not `mig-{node}-{legacyId}`
|
||||||
|
|
||||||
|
**The plan says** deterministic ids of the form `mig-{NodeName}-{legacyId}`, mirroring ScadaBridge.
|
||||||
|
|
||||||
|
**Why that is not enough here.** Node-prefixing does solve the collision the legacy AUTOINCREMENT
|
||||||
|
key would otherwise cause — node A's `RowId 7` and node B's `RowId 7` are different alarms — but it
|
||||||
|
*preserves* a duplication that ought to be collapsed. A warm pair's two legacy files **overlap**:
|
||||||
|
`HistorianAdapterActor` default-writes while its redundancy role is unknown, so both nodes accepted
|
||||||
|
the same fanned transitions during every boot window they ever had. Prefixed ids would carry every
|
||||||
|
one of those duplicates into the merged buffer permanently, for the eventual Primary to deliver
|
||||||
|
twice.
|
||||||
|
|
||||||
|
**The decision.** Reuse D-1's `AlarmSfSchema.DeriveId` (lifted out of the sink so both call sites
|
||||||
|
share one identity rule). Distinct events cannot collide; identical ones converge. It also removes
|
||||||
|
the migrator's only need for node identity from configuration, and makes a crash between commit and
|
||||||
|
rename harmless under `INSERT OR IGNORE` — which the plan's own idempotency requirement wanted
|
||||||
|
anyway.
|
||||||
|
|
||||||
|
### D-7 — The migrator's tests live in `Host.IntegrationTests`
|
||||||
|
|
||||||
|
The plan names `tests/Server/ZB.MOM.WW.OtOpcUa.Host.Tests`. **That project does not exist.** The
|
||||||
|
tests sit beside `LocalDbSetupTests` in `Host.IntegrationTests`, which is where every other
|
||||||
|
LocalDb-facing test already lives. They are offline — a temp file and no external services.
|
||||||
|
|
||||||
### D-4 — The live gate needs `MaxAttempts` raised on the rig
|
### D-4 — The live gate needs `MaxAttempts` raised on the rig
|
||||||
|
|
||||||
Not actionable until Task 8, recorded now so it is not rediscovered there. The rig has no
|
Not actionable until Task 8, recorded now so it is not rediscovered there. The rig has no
|
||||||
|
|||||||
Reference in New Issue
Block a user