docs(code-reviews): re-triage ClusterInfrastructure-001 — bootstrap lives in Host, needs design decision
This commit is contained in:
@@ -83,7 +83,49 @@ should clearly state it is unimplemented so callers do not assume otherwise.
|
|||||||
|
|
||||||
**Resolution**
|
**Resolution**
|
||||||
|
|
||||||
_Unresolved._
|
_Re-triaged 2026-05-16 — remains Open, needs a design decision from the user._
|
||||||
|
|
||||||
|
Verified against the source at the reviewed commit: the finding's factual claims hold.
|
||||||
|
`src/ScadaLink.ClusterInfrastructure` still contains only `ClusterOptions.cs` and a
|
||||||
|
no-op `ServiceCollectionExtensions.cs`, and the `.csproj` references no Akka packages.
|
||||||
|
|
||||||
|
However, the documented cluster behaviour is **not actually absent from the system** —
|
||||||
|
it has been implemented in the **Host** project rather than in this module:
|
||||||
|
|
||||||
|
- `src/ScadaLink.Host/Actors/AkkaHostedService.cs` bootstraps the `ActorSystem`,
|
||||||
|
generates the HOCON from `ClusterOptions` (it imports `ScadaLink.ClusterInfrastructure`
|
||||||
|
and injects `IOptions<ClusterOptions>`), and configures the `keep-oldest` split-brain
|
||||||
|
resolver with `down-if-alone = on` (see `AkkaHostedService.cs:95-96`).
|
||||||
|
- `src/ScadaLink.Host/Health/AkkaClusterHealthCheck.cs`, `AkkaClusterNodeProvider.cs`,
|
||||||
|
and `Health/ActiveNodeHealthCheck.cs` cover cluster membership / active-node detection.
|
||||||
|
- Akka cluster/remote package references live in `ScadaLink.Host.csproj` and the
|
||||||
|
per-component projects (`SiteRuntime`, `Communication`, etc.).
|
||||||
|
|
||||||
|
So the real situation is an **ownership / design-doc drift**, not missing behaviour:
|
||||||
|
`Component-ClusterInfrastructure.md` assigns the Akka bootstrap, HOCON generation,
|
||||||
|
split-brain config and `CoordinatedShutdown` wiring to this module, but the
|
||||||
|
implementation deliberately lives in the Host. `ClusterOptions` is the one piece this
|
||||||
|
module legitimately owns and it is consumed correctly by the Host.
|
||||||
|
|
||||||
|
Resolving CI-001 as literally written is **not a small, well-scoped fix** — it is one
|
||||||
|
of two substantial decisions, both requiring the user:
|
||||||
|
|
||||||
|
1. **Move the bootstrap into this module** — relocate the HOCON generation, split-brain
|
||||||
|
config, cluster-singleton helpers and `CoordinatedShutdown` wiring out of
|
||||||
|
`ScadaLink.Host` into `ScadaLink.ClusterInfrastructure`, add the Akka package
|
||||||
|
references, and re-wire the Host to call into it. This is a cross-module refactor
|
||||||
|
touching `src/ScadaLink.Host/*` and several other projects — outside the edit scope
|
||||||
|
permitted for this finding (only `src/ScadaLink.ClusterInfrastructure/`,
|
||||||
|
`tests/ScadaLink.ClusterInfrastructure.Tests/`, and this file may be edited).
|
||||||
|
2. **Accept the current placement** — keep the bootstrap in the Host and update
|
||||||
|
`Component-ClusterInfrastructure.md` (and the README component table) to record that
|
||||||
|
the Host owns the actor-system/cluster bootstrap and that this module's role is the
|
||||||
|
shared `ClusterOptions` contract. That fix is a design-doc edit, also outside this
|
||||||
|
module's permitted edit scope.
|
||||||
|
|
||||||
|
Either path is a deliberate architecture decision, not a bug fix, so per
|
||||||
|
REVIEW-PROCESS.md §2 this finding is left **Open** and surfaced for the user to decide.
|
||||||
|
No code change was made. Module test suite verified green (3 passed) at re-triage time.
|
||||||
|
|
||||||
### ClusterInfrastructure-002 — No-op DI extension methods report success while doing nothing
|
### ClusterInfrastructure-002 — No-op DI extension methods report success while doing nothing
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user