docs(localdb): README + scadaproj index row + design-doc deltas; pack-verified 3 nupkgs @ 0.1.0
Claude-Session: https://claude.ai/code/session_01BL2Vu1ESDQ9SCN4gVKkdts
This commit is contained in:
@@ -86,3 +86,16 @@ dead-letter counters. `ZB.MOM.WW.Configuration` validators on all options.
|
||||
- More than two nodes / mesh topologies
|
||||
- Per-table pluggable conflict resolvers (LWW only)
|
||||
- TTL/eviction (consumer concern via their own SQL)
|
||||
|
||||
## Implemented — deltas from this design
|
||||
|
||||
Shipped deviations from the design above (all built + tested; see `ZB.MOM.WW.LocalDb/README.md`):
|
||||
|
||||
- **Engine:** Microsoft.Data.Sqlite is the default behind an engine seam; libSQL deferred (already noted above).
|
||||
- **PK-column updates:** fully supported as OLD-pk tombstone + new-row insert (delete+insert), an upgrade from the original per-design limitation.
|
||||
- **Clock drift:** an over-drift entry is **per-entry dead-lettered** (when `FailClosedOnDrift`) rather than faulting the session — the session never dies from drift.
|
||||
- **Snapshot trigger:** each node computes its **own** `needs_snapshot` (pruned-horizon / flag); `HandshakeAck.snapshot_required` is now informational, not the decision authority.
|
||||
- **`onReady` API shape:** `AddZbLocalDb(..., Action<ILocalDb> onReady)` for table creation + `RegisterReplicated`, instead of a registration-builder object.
|
||||
- **Outbound path:** a single-writer, two-lane design (unbounded control lane preempts a bounded data lane) rather than an undifferentiated write path.
|
||||
- **Maintenance:** a dedicated `MaintenanceBackgroundService` (both roles) enforces oplog caps + tombstone retention on an interval.
|
||||
- **Snapshot sender** returns the **as-of oplog seq** it covers, so the pump skips already-covered tail deltas.
|
||||
|
||||
Reference in New Issue
Block a user