Skip to content

Commit

Permalink
Implemented graceful shutdown
Browse files Browse the repository at this point in the history
  • Loading branch information
andresgutierrez committed Jul 25, 2024
1 parent 80976ee commit 541bab1
Show file tree
Hide file tree
Showing 19 changed files with 703 additions and 73 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,4 @@ Nixie.Tests/bin
Nixie.Tests/obj
.vs/
.DS_Store
.idea
7 changes: 2 additions & 5 deletions Nixie.Tests/Actors/PeriodicTimerActor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,10 @@ public PeriodicTimerActor(IActorContext<PeriodicTimerActor, string> context)

public int GetMessages(string id)
{
if (receivedMessages.TryGetValue(id, out int number))
return number;

return 0;
return receivedMessages.GetValueOrDefault(id, 0);
}

public void IncrMessage(string id)
private void IncrMessage(string id)
{
if (!receivedMessages.TryGetValue(id, out int value))
receivedMessages.Add(id, 1);
Expand Down
32 changes: 32 additions & 0 deletions Nixie.Tests/Actors/PeriodicTimerActorStruct.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@

namespace Nixie.Tests.Actors;

public sealed class PeriodicTimerActorStruct : IActorStruct<int>
{
private readonly Dictionary<int, int> receivedMessages = new();

public PeriodicTimerActorStruct(IActorContextStruct<PeriodicTimerActorStruct, int> context)
{
context.ActorSystem.StartPeriodicTimerStruct(context.Self, "periodic-timer", 100, TimeSpan.Zero, TimeSpan.FromSeconds(1));
}

public int GetMessages(int id)
{
return receivedMessages.GetValueOrDefault(id, 0);
}

private void IncrMessage(int id)
{
if (!receivedMessages.TryGetValue(id, out int value))
receivedMessages.Add(id, 1);
else
receivedMessages[id] = ++value;
}

public async Task Receive(int message)
{
await Task.CompletedTask;

IncrMessage(message);
}
}
4 changes: 2 additions & 2 deletions Nixie.Tests/Actors/ShutdownActor.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@

namespace Nixie.Tests.Actors;

public class ShutdownActor : IActor<string>
public sealed class ShutdownActor : IActor<string>
{
private int receivedMessages;

Expand All @@ -15,7 +15,7 @@ public int GetMessages()
return receivedMessages;
}

public void IncrMessage()
private void IncrMessage()
{
receivedMessages++;
}
Expand Down
3 changes: 1 addition & 2 deletions Nixie.Tests/Actors/ShutdownInsideActor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ public int GetMessages()
return receivedMessages;
}

public void IncrMessage()
private void IncrMessage()
{
receivedMessages++;
}
Expand All @@ -31,5 +31,4 @@ public async Task Receive(string message)
else
IncrMessage();
}

}
30 changes: 30 additions & 0 deletions Nixie.Tests/Actors/ShutdownReplyActor.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
namespace Nixie.Tests.Actors;

public sealed class ShutdownReplyActor : IActor<string, string>
{
private int receivedMessages;

public ShutdownReplyActor(IActorContext<ShutdownReplyActor, string, string> _)
{

}

public int GetMessages()
{
return receivedMessages;
}

private void IncrMessage()
{
receivedMessages++;
}

public async Task<string?> Receive(string message)
{
await Task.Yield();

IncrMessage();

return message;
}
}
29 changes: 29 additions & 0 deletions Nixie.Tests/Actors/ShutdownSlowActor.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@

namespace Nixie.Tests.Actors;

public sealed class ShutdownSlowActor : IActor<string>
{
private int receivedMessages;

public ShutdownSlowActor(IActorContext<ShutdownSlowActor, string> _)
{

}

public int GetMessages()
{
return receivedMessages;
}

private void IncrMessage()
{
receivedMessages++;
}

public async Task Receive(string message)
{
await Task.Delay(1000);

IncrMessage();
}
}
10 changes: 5 additions & 5 deletions Nixie.Tests/Nixie.Tests.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -9,17 +9,17 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.7.2" />
<PackageReference Include="xunit" Version="2.5.3" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.5.3">
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.10.0" />
<PackageReference Include="xunit" Version="2.9.0" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.8.2">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="coverlet.collector" Version="6.0.0">
<PackageReference Include="coverlet.collector" Version="6.0.2">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="7.0.0" />
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="8.0.0" />
</ItemGroup>

<ItemGroup>
Expand Down
25 changes: 12 additions & 13 deletions Nixie.Tests/TestRouters.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ namespace Nixie.Tests;
public sealed class TestRouters
{
[Fact]
public async void TestCreateRoundRobinRouter()
public async Task TestCreateRoundRobinRouter()
{
using ActorSystem asx = new();

Expand Down Expand Up @@ -37,7 +37,7 @@ public async void TestCreateRoundRobinRouter()
}

[Fact]
public async void TestCreateRoundRobinRouterExt()
public async Task TestCreateRoundRobinRouterExt()
{
using ActorSystem asx = new();

Expand Down Expand Up @@ -65,7 +65,7 @@ public async void TestCreateRoundRobinRouterExt()
}

[Fact]
public async void TestCreateRoundRobinRouterExtInstances()
public async Task TestCreateRoundRobinRouterExtInstances()
{
using ActorSystem asx = new();

Expand Down Expand Up @@ -98,7 +98,7 @@ public async void TestCreateRoundRobinRouterExtInstances()
}

[Fact]
public async void TestCreateRoundRobinRouterSlowSend()
public async Task TestCreateRoundRobinRouterSlowSend()
{
using ActorSystem asx = new();

Expand All @@ -124,7 +124,7 @@ public async void TestCreateRoundRobinRouterSlowSend()
}

[Fact]
public async void TestCreateRoundRobinRouterReply()
public async Task TestCreateRoundRobinRouterReply()
{
using ActorSystem asx = new();

Expand All @@ -151,7 +151,7 @@ public async void TestCreateRoundRobinRouterReply()
}

[Fact]
public async void TestCreateRoundRobinRouterReplyExtInstances()
public async Task TestCreateRoundRobinRouterReplyExtInstances()
{
using ActorSystem asx = new();

Expand Down Expand Up @@ -183,7 +183,7 @@ public async void TestCreateRoundRobinRouterReplyExtInstances()
}

[Fact]
public async void TestCreateRoundRobinRouterReplyExt()
public async Task TestCreateRoundRobinRouterReplyExt()
{
using ActorSystem asx = new();

Expand All @@ -210,7 +210,7 @@ public async void TestCreateRoundRobinRouterReplyExt()
}

[Fact]
public async void TestCreateConsistentHashRouter()
public async Task TestCreateConsistentHashRouter()
{
using ActorSystem asx = new();

Expand Down Expand Up @@ -239,7 +239,7 @@ public async void TestCreateConsistentHashRouter()
}

[Fact]
public async void TestCreateConsistentHashRouterExt()
public async Task TestCreateConsistentHashRouterExt()
{
using ActorSystem asx = new();

Expand Down Expand Up @@ -273,7 +273,7 @@ public async void TestCreateConsistentHashRouterExt()
}

[Fact]
public async void TestCreateConsistentHashRouterReply()
public async Task TestCreateConsistentHashRouterReply()
{
using ActorSystem asx = new();

Expand Down Expand Up @@ -302,15 +302,14 @@ public async void TestCreateConsistentHashRouterReply()
}

[Fact]
public async void TestCreateConsistentHashRouterReplyParallel()
public async Task TestCreateConsistentHashRouterReplyParallel()
{
using ActorSystem asx = new();

IActorRef<ConsistentHashActor<RouteeReplyActor, RouterMessage, RouterResponse>, RouterMessage, RouterResponse> router =
asx.Spawn<ConsistentHashActor<RouteeReplyActor, RouterMessage, RouterResponse>, RouterMessage, RouterResponse>("my-router", 5);

Task[] tasks = new Task[5]
{
Task[] tasks = {
router.Ask(new RouterMessage(RouterMessageType.Route, "aaa")),
router.Ask(new RouterMessage(RouterMessageType.Route, "bbb")),
router.Ask(new RouterMessage(RouterMessageType.Route, "ccc")),
Expand Down
37 changes: 31 additions & 6 deletions Nixie.Tests/TestScheduler.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@

using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging;
using Nixie.Tests.Actors;

namespace Nixie.Tests;
Expand All @@ -8,7 +8,7 @@ namespace Nixie.Tests;
public sealed class TestScheduler
{
[Fact]
public async void TestCreatePeriodicTimer()
public async Task TestCreatePeriodicTimer()
{
using ILoggerFactory loggerFactory = LoggerFactory.Create(builder =>
{
Expand All @@ -31,9 +31,34 @@ public async void TestCreatePeriodicTimer()

Assert.Equal(6, numberMessages);
}

[Fact]
public async Task TestCreatePeriodicTimerStruct()
{
using ILoggerFactory loggerFactory = LoggerFactory.Create(builder =>
{
builder
.AddFilter("Nixie", LogLevel.Debug)
.AddConsole();
});

ILogger logger = loggerFactory.CreateLogger<TestSendMessages>();

using ActorSystem asx = new(logger: logger);

IActorRefStruct<PeriodicTimerActorStruct, int> actor = asx.SpawnStruct<PeriodicTimerActorStruct, int>();

Assert.IsAssignableFrom<PeriodicTimerActorStruct>(actor.Runner.Actor);

await Task.Delay(5500);

int numberMessages = ((PeriodicTimerActorStruct)actor.Runner.Actor!).GetMessages(100);

Assert.Equal(6, numberMessages);
}

[Fact]
public async void TestCreatePeriodicTimerExternalStop()
public async Task TestCreatePeriodicTimerExternalStop()
{
using ILoggerFactory loggerFactory = LoggerFactory.Create(builder =>
{
Expand Down Expand Up @@ -93,7 +118,7 @@ public void TestCreatePeriodicTimerExternalStopTwice()
}

[Fact]
public async void TestCreateOnceTimer()
public async Task TestCreateOnceTimer()
{
using ActorSystem asx = new();

Expand All @@ -109,7 +134,7 @@ public async void TestCreateOnceTimer()
}

[Fact]
public async void TestCreateOnceTimerExternal()
public async Task TestCreateOnceTimerExternal()
{
using ActorSystem asx = new();

Expand All @@ -131,7 +156,7 @@ public async void TestCreateOnceTimerExternal()
}

[Fact]
public async void TestCreateOnceTimerExternalReply()
public async Task TestCreateOnceTimerExternalReply()
{
using ActorSystem asx = new();

Expand Down
Loading

0 comments on commit 541bab1

Please sign in to comment.