From 418bb25a2782a348b8a9d095eaed8814bdf266c0 Mon Sep 17 00:00:00 2001 From: Aaron Stannard Date: Thu, 26 Jan 2023 17:11:39 -0600 Subject: [PATCH 1/2] close #6295 - set default PoolRouter SupervisorStrategy to Restart (#6366) * close #6295 - set default PoolRouter SupervisorStrategy to Restart * use the `SupervisionStrategy.DefaultStrategy` * Fix unit test * Change unit test to use RoundRobinPool router (cherry-picked from ffd9a9e15e2841cabb7ac9e71db937c7ea320cbd) --- src/core/Akka.Tests/Routing/RoutingSpec.cs | 27 ++++++++-------------- src/core/Akka/Routing/RouterConfig.cs | 10 ++------ 2 files changed, 12 insertions(+), 25 deletions(-) diff --git a/src/core/Akka.Tests/Routing/RoutingSpec.cs b/src/core/Akka.Tests/Routing/RoutingSpec.cs index 7312b509ba3..5e37ed00f19 100644 --- a/src/core/Akka.Tests/Routing/RoutingSpec.cs +++ b/src/core/Akka.Tests/Routing/RoutingSpec.cs @@ -294,27 +294,20 @@ await EventFilter.Exception().ExpectOneAsync(async() => } [Fact] - public async Task Routers_in_general_must_default_to_all_for_one_always_escalate_strategy() + public void Routers_in_general_must_default_to_all_for_one_restart_strategy() { - var restarter = new OneForOneStrategy(e => - { - TestActor.Tell(e); - return Directive.Restart; - }); - - var supervisor = Sys.ActorOf(Props.Create(() => new Supervisor(restarter))); + var router = Sys.ActorOf(new RoundRobinPool(3).Props(Props.Create(() => new RestartActor(TestActor)))); + var restarted = new HashSet(); - supervisor.Tell(new RoundRobinPool(3).Props(Props.Create(() => new RestartActor(TestActor)))); - - var router = await ExpectMsgAsync(); - await EventFilter.Exception("die").ExpectOneAsync(async () => + for (var i = 0; i < 3; i++) { router.Tell("die"); - }); - (await ExpectMsgAsync()).Message.Should().Be("die"); - await ExpectMsgAsync("restarted"); - await ExpectMsgAsync("restarted"); - await ExpectMsgAsync("restarted"); + ExpectMsg("restarted"); + restarted.Add(LastSender.Path.Name); + } + + restarted.Count.Should().Be(3); + restarted.Should().BeEquivalentTo(((RoutedActorRef)router).Children.Select(c => c.Path.Name)); } [Fact] diff --git a/src/core/Akka/Routing/RouterConfig.cs b/src/core/Akka/Routing/RouterConfig.cs index 15bc5c26154..8e8d80c6a47 100644 --- a/src/core/Akka/Routing/RouterConfig.cs +++ b/src/core/Akka/Routing/RouterConfig.cs @@ -354,15 +354,9 @@ public override ActorBase CreateRouterActor() /// /// TBD /// - public static SupervisorStrategy DefaultSupervisorStrategy - { - get - { - return new OneForOneStrategy(Decider.From(Directive.Escalate)); - } - } + public static SupervisorStrategy DefaultSupervisorStrategy => SupervisorStrategy.DefaultStrategy; + - public bool Equals(Pool other) { if (ReferenceEquals(null, other)) return false; From 78082606d158a8863eca7cc8f66fed57a3cd4da6 Mon Sep 17 00:00:00 2001 From: Gregorius Soedharmo Date: Mon, 30 Jan 2023 23:56:02 +0700 Subject: [PATCH 2/2] Fix actor telemetry unit test --- src/core/Akka.Tests/Actor/ActorTelemetrySpecs.cs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/core/Akka.Tests/Actor/ActorTelemetrySpecs.cs b/src/core/Akka.Tests/Actor/ActorTelemetrySpecs.cs index 57f74a3e53f..357147d982f 100644 --- a/src/core/Akka.Tests/Actor/ActorTelemetrySpecs.cs +++ b/src/core/Akka.Tests/Actor/ActorTelemetrySpecs.cs @@ -283,8 +283,7 @@ await AwaitAssertAsync(async () => // assert that actor start count is still 10 Assert.Equal(12, telemetry.ActorCreated); - // bug due to https://github.com/akkadotnet/akka.net/issues/6295 - all routees and the router start each time - Assert.Equal(110, telemetry.ActorRestarted); + Assert.Equal(10, telemetry.ActorRestarted); // assert no stops recorded Assert.Equal(0, telemetry.ActorStopped); }, RemainingOrDefault); @@ -296,7 +295,7 @@ await AwaitAssertAsync(async () => var telemetry = await subscriber.Ask(TelemetrySubscriber.GetTelemetryRequest.Instance); // assert that actor start count is still 10 Assert.Equal(12, telemetry.ActorCreated); - Assert.Equal(110, telemetry.ActorRestarted); + Assert.Equal(10, telemetry.ActorRestarted); Assert.Equal(11, telemetry.ActorStopped); }, RemainingOrDefault); }