refactor(mesh): step 4 — drop the receptionist extension and akka.cluster.client from akka.conf
akka.extensions loses ClusterClientReceptionistExtensionProvider and the whole akka.cluster.client block (buffer-size / reconnect-timeout / receptionist.role) goes with it. The DistributedPubSub extension and the maximum-frame-size / log-frame-size-exceeding canary both stay — DPS is the pair-local transport and the frame canary guards every remoting message, neither of which the cross-mesh deletion touches. MeshTransportHoconTests drops its three ClusterClientSettings/ClusterReceptionistSettings asserts and keeps the frame-size pin and the DPS-extension pin, renamed since it no longer has a receptionist to survive alongside.
This commit is contained in:
@@ -1,5 +1,4 @@
|
||||
using Akka.Actor;
|
||||
using Akka.Cluster.Tools.Client;
|
||||
using Akka.Configuration;
|
||||
using Shouldly;
|
||||
using Xunit;
|
||||
@@ -7,8 +6,8 @@ using Xunit;
|
||||
namespace ZB.MOM.WW.OtOpcUa.Cluster.Tests;
|
||||
|
||||
/// <summary>
|
||||
/// Asserts the ClusterClient / receptionist / frame-size settings that are actually <b>in
|
||||
/// force</b> on a real <see cref="ActorSystem"/> built from the shipped base config.
|
||||
/// Asserts the remoting frame-size canary and the DistributedPubSub extension that are actually
|
||||
/// <b>in force</b> on a real <see cref="ActorSystem"/> built from the shipped base config.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Asserting the <c>akka.conf</c> text instead would pass while a competing HOCON fragment
|
||||
@@ -29,38 +28,6 @@ public class MeshTransportHoconTests : IDisposable
|
||||
_sys = ActorSystem.Create("mesh-hocon-probe", config);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Cluster_client_buffering_is_disabled()
|
||||
{
|
||||
// Asserted through ClusterClientSettings — the object the client is actually built from —
|
||||
// NOT through Config.GetInt. GetInt returns 0 for a MISSING key, so a config assertion here
|
||||
// passes identically whether the setting is explicitly 0 or absent with Akka's default of
|
||||
// 1000 in force. It was green before this feature existed; that is the whole defect class.
|
||||
//
|
||||
// buffer-size = 0 means "drop now if the receptionist is unknown". Buffering would replay a
|
||||
// DispatchDeployment on reconnect and apply a deployment the coordinator already sealed as
|
||||
// TimedOut, leaving the node running a configuration the database says failed. This is a
|
||||
// behaviour decision, not a tuning knob.
|
||||
ClusterClientSettings.Create(_sys).BufferSize.ShouldBe(0);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Cluster_client_retries_forever_rather_than_self_stopping()
|
||||
{
|
||||
// reconnect-timeout = off surfaces as a null TimeSpan on the settings object. A central node
|
||||
// down for an hour must not require a driver-node restart to become reachable again.
|
||||
ClusterClientSettings.Create(_sys).ReconnectTimeout.ShouldBeNull();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Receptionist_serves_every_member_regardless_of_role()
|
||||
{
|
||||
// An empty role is what makes "registered per node, not as a singleton" work: every member
|
||||
// hosts a receptionist, so ClusterClient contact rotation reaches whichever node answers.
|
||||
// Scoping this to a role would make the boundary reachable through one node only.
|
||||
ClusterReceptionistSettings.Create(_sys).Role.ShouldBeNull();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Oversized_frames_are_logged_rather_than_dropped_silently()
|
||||
{
|
||||
@@ -73,21 +40,11 @@ public class MeshTransportHoconTests : IDisposable
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Receptionist_extension_is_registered_at_startup()
|
||||
public void Distributed_pub_sub_extension_is_registered_at_startup()
|
||||
{
|
||||
// Not auto-started. Without this entry the receptionist materialises only if some code path
|
||||
// happens to call ClusterClientReceptionist.Get(system) first, which makes "is the boundary
|
||||
// listening?" depend on startup ordering rather than on configuration.
|
||||
_sys.Settings.Config.GetStringList("akka.extensions")
|
||||
.ShouldContain(s => s.Contains("ClusterClientReceptionistExtensionProvider"));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Distributed_pub_sub_extension_survives_alongside_the_receptionist()
|
||||
{
|
||||
// The dark switch keeps both transports live for one phase, and DPS additionally carries
|
||||
// traffic Phase 2 does not touch at all — node-local alarm-command publishes and the
|
||||
// node<->node redundancy-state probe leg. Losing it here would break far more than deploys.
|
||||
// DPS is PAIR-LOCAL and survives the cross-mesh transport's deletion: it carries
|
||||
// MeshTransport:Mode = Dps (the single-mesh default), the node-local alarm-command publishes
|
||||
// and the node<->node redundancy-state probe leg. Losing it would break far more than deploys.
|
||||
_sys.Settings.Config.GetStringList("akka.extensions")
|
||||
.ShouldContain(s => s.Contains("DistributedPubSubExtensionProvider"));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user