fix(health): active tier returns 503 on a role-member-but-not-leader node (0.2.1)
The shared spec states the active tier "Fails (503) on a standby or role-member-but-not-leader node", and the same spec maps Degraded to HTTP 200. ActiveNodeDecision.Evaluate returned Degraded for exactly that case, so the tier answered 200 on every node and could not distinguish an active node from a standby over HTTP at all - only the response body differed. The consequence was live, not theoretical: OtOpcUa's Traefik routes the admin UI by this probe (docker-dev/traefik-dynamic.yml, scripts/install/traefik-dynamic.yml), so both central nodes always passed and the leader-pinning the design called for has silently never worked. Found while running the overview dashboard's live acceptance, which reads the same tier and showed all six rig nodes as Active. Filed as lmxopcua#494. Role-member-but-not-leader now returns Unhealthy. The other two branches are unchanged: a node that lacks the role stays Healthy (the probe is irrelevant to it), and the startup-safety path still returns Degraded when the ActorSystem or cluster is not yet available. Blast radius is one consumer. OtOpcUa is the only user of the role-filtered mode; ScadaBridge deliberately uses its own OldestNodeActiveHealthCheck (leadership is address-ordered and diverges from the singleton host), and MxGateway and HistorianGateway have no Akka cluster. Version 0.2.1, three packages published to the Gitea feed and restore-verified. 70 tests pass.
This commit is contained in:
@@ -5,7 +5,7 @@
|
||||
<Nullable>enable</Nullable>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<LangVersion>latest</LangVersion>
|
||||
<Version>0.2.0</Version>
|
||||
<Version>0.2.1</Version>
|
||||
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
|
||||
<!-- Emit XML docs so the public API summaries ship inside the packed nupkgs (IntelliSense for
|
||||
consumers). CS1591 (missing doc on a public member) is suppressed so undocumented test /
|
||||
|
||||
Reference in New Issue
Block a user