Skip to content

CI: non-blocking Artery MNTR stage - #8373

Merged
Aaronontheweb merged 14 commits into
akkadotnet:devfrom
Aaronontheweb:ci/artery-mntr-stage
Aug 25, 2026
Merged

CI: non-blocking Artery MNTR stage#8373
Aaronontheweb merged 14 commits into
akkadotnet:devfrom
Aaronontheweb:ci/artery-mntr-stage

Conversation

@Aaronontheweb

Copy link
Copy Markdown
Member

Adds a second Windows multi-node job that runs the MNTR suite over the Artery transport (AKKA_MNTR_TRANSPORT=artery, the #8351 switch), parallel to the classic job with identical incrementalist scoping. The job is continueOnError: true so it never gates PR validation — it exists to establish an independent Artery green-rate before ever becoming required.

About 30 specs that use TestConductor throttle/blackhole failure injection fail fast on Artery today (RequireTestConductorTransport throws before any network activity) — they're listed in a comment in the pipeline YAML and are expected red in this job until the Artery test-mode port lands, absorbed by the non-blocking marking. The MNTR job template gains two optional parameters (continueOnError, env) whose defaults leave the classic job byte-identical.

This PR's own validation run doubles as the first live test of the new job — the things to confirm on it are in the comment below.

This adds a second Windows multi-node test job, net_mntr_windows_artery, that
runs alongside the existing classic MNTR job with the exact same incrementalist
scoping, but sets AKKA_MNTR_TRANSPORT=artery so the suite runs over Artery
instead of classic DotNetty. The goal is to start tracking Artery's own MNTR
green rate as a ship-confidence signal, without putting it in the way of PRs.

The job is marked continueOnError:true at the job level (a new parameter on
azure-pipeline.mntr-template.yaml, off by default so the classic MNTR job is
unaffected), so it still runs and reports its own pass/fail per PR, but can
never fail PR validation as a whole.

Artery has no failure-injection test-mode yet, so specs that call TestConductor
Throttle/Blackhole/PassThrough will fail fast on the RequireTestConductorTransport
check instead of exercising real behavior. There's no clean way to exclude just
those ~29 specs today (incrementalist filters by project, not by test class),
so that failure is accepted as known noise for now; the affected specs are
listed in a comment in pr-validation.yaml for when Artery gets a test-mode
transport.
@Aaronontheweb

Copy link
Copy Markdown
Member Author

First-run checklist for this PR's own validation run:

  1. net_mntr_windows_artery appears as a distinct job, separate from net_mntr_windows.
  2. A failure in the Artery job does NOT red the overall required PR-validation check (the load-bearing continueOnError assumption).
  3. AKKA_MNTR_TRANSPORT visibly reaches the test process — spot-check one spec log for the Artery canonical-address config / Artery startup banner.
  4. Incrementalist selects the same multi-node projects for both jobs.
  5. The Artery job's failures are dominated by the expected ConfigurationException from RequireTestConductorTransport on the ~30 listed failure-injection specs — anything else is a real finding.
  6. Artifact names don't collide between the two jobs.

MNTR has never had a Linux lane. This adds net_mntr_linux on ubuntu-latest with
the same incrementalist scoping and command as the classic Windows MNTR job,
non-blocking initially with the same promote-after-sustained-green path as the
Artery lane. The only template fix needed was the Copy Build Output match
pattern, which used a Windows-style glob; it now matches the generic template
that already runs on both platforms. Also reworded the Artery comment to point
at a dedicated incrementalist config as the sanctioned lever if that lane ever
needs a different project set.
Adds net_mntr_linux_artery, completing the classic/Artery x Windows/Linux
matrix with only classic Windows blocking. Also replaces two TBD doc comments
on RemoteSettings.TransportNames and RemoteSettings.Transports with real
descriptions of the classic transport-selection settings and how they relate
to Artery's separate enable switch. Touching Akka.Remote also serves to
trigger incrementalist selection of the remoting/cluster multi-node projects,
so this PR's validation run exercises all four MNTR lanes with real specs.
@Aaronontheweb

Copy link
Copy Markdown
Member Author

Four-lane first-run review (build 128977):

  • Windows classic: green.
  • Linux classic: non-blocking failure in DistributedPubSubRestartSpec; a 2s ActorIdentity expectation timed out. The other five selected MNTR projects completed successfully.
  • Linux Artery: red with 49 unique failed spec classes. Many are the expected failure-injection failures (RequireTestConductorTransport / blackhole-dependent specs), but the set also includes restart/rejoin, durable-data, routing, quarantine-piercing, ClusterClient, and remote restart specs. Those are not all covered by the documented noise allowance.
  • This run predates Artery: TestConductor blackhole and passThrough support (test-mode) #8378's test-mode and crypto-UID changes, so some non-injection failures may be cascades from duplicate process UIDs. A rerun after Artery: TestConductor blackhole and passThrough support (test-mode) #8378 is required before classifying them as transport defects.
  • Artifact names are distinct and Incrementalist selected the same six projects for the classic and Artery Linux jobs.
  • New lanes remained non-blocking; classic Windows remained the gate.

Verdict: the matrix wiring is doing its job, but the Artery lane has real triage signal beyond the known ~30-spec noise floor. Do not promote it. After #8378 lands, remove the obsolete failure-injection allowance and compare the residual failure set directly against this run.

@Aaronontheweb

Copy link
Copy Markdown
Member Author

Four-lane results from build 129105 — the first run with Artery test-mode active (post-#8378):

lane result detail
Linux, classic PASS 521/521 first-ever Linux MNTR run, fully green, 58m
Windows, classic (blocking) 222/224 StressSpec only — the known Windows timing race
Linux, Artery 191/224 + others 33 node-fails, 19 spec classes
Windows, Artery 208/224 + others 32 node-fails, 20 spec classes

The two Artery lanes share 17 failing spec classes across both platforms — deterministic findings, not environment noise. The dominant pattern is the restarted-node family (same address, new UID): all five Remote quarantine/gate-piercing specs (RemoteQuarantinePiercingSpec, PiercingShouldKeepQuarantineSpec, RemoteGatePiercingSpec, RemoteNodeRestartGateSpec, RemoteRestartedQuarantinedSpec), the cluster restart specs (QuickRestartSpec, RestartNodeSpec, RestartNode3Spec, RestartFirstSeedNodeSpec), all four DurableData*Specs (which restart nodes to verify store reload), DistributedPubSubRestartSpec, and UnreachableNodeJoinsAgainSpec — pointing at Artery's handling of a new incarnation of a known peer (association replacement / quarantine piercing) as the primary functional gap. Second cluster: router specs (RemoteRoundRobinSpec, ClusterRoundRobinSpec, plus consistent-hashing/adaptive-load-balancing variants). The per-platform singles (PersistentClusterShardingSpec Linux-only; ClusterClientDiscoverySpec, LeaderElectionWithFailureDetectorPuppet Windows-only) look flake-class rather than deterministic.

Also validated mechanically by this run: AKKA_MNTR_TRANSPORT=artery reached the test processes on both OSes, incrementalist selected the full six-project MNTR set in every lane, and failure artifacts published from all four lanes.

Linux unit tests failed on one spec, Akka.Streams.Tests.IO.TcpSpec.Outgoing_TCP_stream_must_correctly_coalesce_many_rapid_small_writes_into_ordered_output — timing-sensitive, flake-suspect, watching for recurrence on the next run.

@Aaronontheweb

Copy link
Copy Markdown
Member Author

Rerun (build 129110, after the comment-fix push): PR Validation is green — both prior blocking failures were one-off flakes (StressSpec on Windows MNTR, an Akka.Streams TcpSpec timing case on Linux unit tests) and did not recur. The continueOnError design works end-to-end: both Artery lanes report their own red check while the umbrella passes, so this PR is mergeable with the Artery green-rate tracked visibly per PR.

The Artery failure set is stable across both runs and platforms — the restart/quarantine-piercing core (5 piercing specs, 4 cluster restart specs, 4 DurableData specs, DistributedPubSubRestartSpec, UnreachableNodeJoinsAgainSpec) and the router family reproduced identically; only a small tail rotated (PersistentClusterSharding variants, ClusterSingletonManagerLeaveSpec, LeaderElection puppet — flake-class over Artery). The deterministic core is tracked as the restarted-peer/new-incarnation association gap.

@Aaronontheweb

Copy link
Copy Markdown
Member Author

Force merging this so we can start working on turning the failing MNTR specs green - we know they have issues, by design.

@Aaronontheweb
Aaronontheweb merged commit cb3147b into akkadotnet:dev Aug 25, 2026
13 of 15 checks passed
@Aaronontheweb Aaronontheweb added multi node spec artery Akka.Remote Artery Protocol labels Aug 25, 2026
@Aaronontheweb Aaronontheweb added this to the 1.6.0 milestone Aug 25, 2026
@Aaronontheweb
Aaronontheweb deleted the ci/artery-mntr-stage branch August 25, 2026 22:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

artery Akka.Remote Artery Protocol multi node spec

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant