fix(runtime): pin the Primary-verdict member-event subscription with a test; document the pre-join allow window (review R6 MINOR-2/3)
MINOR-3: new DriverHostActorPrimaryRoleSourceTests case drives the deny flip with a real ClusterEvent.MemberUp on the EventStream (how the cluster's domain-event publisher reaches a Cluster.Subscribe subscriber) instead of a direct RepublishPrimaryVerdict tell; it fails when the Cluster.Subscribe(IMemberEvent) call is deleted. MINOR-2: the published verdict MIRRORS the live gate; before this node has joined its member count is 0 and both allow (seconds; up to the bootstrap guard's 25 s probe), so the Sparkplug primary-host claim can be held on both nodes in that window (native ack is unaffected - view and route agree). Behaviour deliberately unchanged: denying until self is Up would change the live gate too and delay writes/acks on a single-node cluster's own join. Comments + AlarmTracking.md / Redundancy.md / Mqtt.md corrected. Claude-Session: https://claude.ai/code/session_01Ef2ozxS7QPanGT8uoATbTe
This commit is contained in:
@@ -357,6 +357,11 @@ is client-visible.
|
||||
> pair (role still unknown, a driver peer Up) the gate already denies, exactly
|
||||
> as the route does (review R1 m2 — previously the view sat on its single-node
|
||||
> "allow" seed until the first snapshot, reopening the flap for that window).
|
||||
> It mirrors, it does not deny from start: until this node has **joined** and
|
||||
> sees its peer Up, its member count is 0 and both the published verdict and the
|
||||
> live route **allow** (seconds normally; up to the bootstrap guard's 25 s
|
||||
> partner probe). The two agree there, so the flap cannot occur, but a native
|
||||
> ack in that pre-join window is serviced (review R6 MINOR-2).
|
||||
|
||||
> **Best-effort during reconnect.** If a native ack arrives while the owning
|
||||
> driver is `Connecting`/`Reconnecting`, it is dropped with a debug log and **not**
|
||||
|
||||
Reference in New Issue
Block a user