From f813fc3f222c29421d23420374200d043cd633e6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 2 Jun 2022 08:05:32 -0500 Subject: [PATCH 1/6] Bump AkkaVersion from 1.4.38 to 1.4.39 (#56) Bumps `AkkaVersion` from 1.4.38 to 1.4.39. Updates `Akka.DependencyInjection` from 1.4.38 to 1.4.39 - [Release notes](https://github.com/akkadotnet/akka.net/releases) - [Changelog](https://github.com/akkadotnet/akka.net/blob/1.4.39/RELEASE_NOTES.md) - [Commits](https://github.com/akkadotnet/akka.net/compare/1.4.38...1.4.39) Updates `Akka.Remote` from 1.4.38 to 1.4.39 - [Release notes](https://github.com/akkadotnet/akka.net/releases) - [Changelog](https://github.com/akkadotnet/akka.net/blob/1.4.39/RELEASE_NOTES.md) - [Commits](https://github.com/akkadotnet/akka.net/compare/1.4.38...1.4.39) Updates `Akka.Cluster.Sharding` from 1.4.38 to 1.4.39 - [Release notes](https://github.com/akkadotnet/akka.net/releases) - [Changelog](https://github.com/akkadotnet/akka.net/blob/1.4.39/RELEASE_NOTES.md) - [Commits](https://github.com/akkadotnet/akka.net/compare/1.4.38...1.4.39) Updates `Akka.Persistence.Query.Sql` from 1.4.38 to 1.4.39 - [Release notes](https://github.com/akkadotnet/akka.net/releases) - [Changelog](https://github.com/akkadotnet/akka.net/blob/1.4.39/RELEASE_NOTES.md) - [Commits](https://github.com/akkadotnet/akka.net/compare/1.4.38...1.4.39) Updates `Akka.TestKit.Xunit2` from 1.4.38 to 1.4.39 - [Release notes](https://github.com/akkadotnet/akka.net/releases) - [Changelog](https://github.com/akkadotnet/akka.net/blob/1.4.39/RELEASE_NOTES.md) - [Commits](https://github.com/akkadotnet/akka.net/compare/1.4.38...1.4.39) --- updated-dependencies: - dependency-name: Akka.DependencyInjection dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: Akka.Remote dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: Akka.Cluster.Sharding dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: Akka.Persistence.Query.Sql dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: Akka.TestKit.Xunit2 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- src/Directory.Build.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Directory.Build.props b/src/Directory.Build.props index 4cca6909..de5b163b 100644 --- a/src/Directory.Build.props +++ b/src/Directory.Build.props @@ -223,7 +223,7 @@ net6.0 2.4.1 17.2.0 - 1.4.38 + 1.4.39 [3.0.0,) From 45165c828502ed99e55f86ae184b238a6ae0825c Mon Sep 17 00:00:00 2001 From: Gregorius Soedharmo Date: Thu, 9 Jun 2022 02:55:02 +0700 Subject: [PATCH 2/6] Fix wrong HOCON configuration in `WithDistributedPubSub` (#57) * Add bug reproduction * Fix wrong HOCON configuration * Rearrange the spec so that specs captures all logs --- .../DistributedPubSubSpecs.cs | 125 ++++++++++++++++++ src/Akka.Cluster.Hosting.Tests/XUnitLogger.cs | 84 ++++++++++++ .../XUnitLoggerProvider.cs | 26 ++++ .../AkkaClusterHostingExtensions.cs | 2 +- 4 files changed, 236 insertions(+), 1 deletion(-) create mode 100644 src/Akka.Cluster.Hosting.Tests/DistributedPubSubSpecs.cs create mode 100644 src/Akka.Cluster.Hosting.Tests/XUnitLogger.cs create mode 100644 src/Akka.Cluster.Hosting.Tests/XUnitLoggerProvider.cs diff --git a/src/Akka.Cluster.Hosting.Tests/DistributedPubSubSpecs.cs b/src/Akka.Cluster.Hosting.Tests/DistributedPubSubSpecs.cs new file mode 100644 index 00000000..390fab0b --- /dev/null +++ b/src/Akka.Cluster.Hosting.Tests/DistributedPubSubSpecs.cs @@ -0,0 +1,125 @@ +using System; +using System.Threading; +using System.Threading.Tasks; +using Akka.Actor; +using Akka.Cluster.Tools.PublishSubscribe; +using Akka.Event; +using Akka.Hosting; +using Akka.Remote.Hosting; +using FluentAssertions; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; +using Microsoft.Extensions.Logging; +using Xunit; +using Xunit.Abstractions; +using LogLevel = Microsoft.Extensions.Logging.LogLevel; + +namespace Akka.Cluster.Hosting.Tests; + +public class DistributedPubSubSpecs : IAsyncLifetime +{ + private readonly ITestOutputHelper _helper; + private readonly Action _specBuilder; + private readonly ClusterOptions _clusterOptions; + private IHost _host; + private ActorSystem _system; + private ILoggingAdapter _log; + private Cluster _cluster; + private TestKit.Xunit2.TestKit _testKit; + + private IActorRef _mediator; + + public DistributedPubSubSpecs(ITestOutputHelper helper) + { + _helper = helper; + _specBuilder = _ => { }; + _clusterOptions = new ClusterOptions { Roles = new[] { "my-host" } }; + } + + // Issue #55 https://github.com/akkadotnet/Akka.Hosting/issues/55 + [Fact] + public Task Should_launch_distributed_pub_sub_with_roles() + { + var testProbe = _testKit.CreateTestProbe(_system); + + // act + testProbe.Send(_mediator, new Subscribe("testSub", testProbe)); + var response = testProbe.ExpectMsg(); + + // assert + response.Subscribe.Topic.Should().Be("testSub"); + response.Subscribe.Ref.Should().Be(testProbe); + + return Task.CompletedTask; + } + + [Fact] + public Task Distributed_pub_sub_should_work() + { + const string topic = "testSub"; + + var subscriber = _testKit.CreateTestProbe(_system); + var publisher = _testKit.CreateTestProbe(_system); + + subscriber.Send(_mediator, new Subscribe(topic, subscriber)); + subscriber.ExpectMsg(); + + publisher.Send(_mediator, new Publish(topic, "test message")); + subscriber.ExpectMsg("test message"); + + return Task.CompletedTask; + } + + public async Task InitializeAsync() + { + using var cancellationTokenSource = new CancellationTokenSource(TimeSpan.FromSeconds(10)); + + _host = new HostBuilder() + .ConfigureLogging(builder => + { + builder.AddProvider(new XUnitLoggerProvider(_helper, LogLevel.Information)); + }) + .ConfigureServices(collection => + { + collection + .AddAkka("TestSys", (configurationBuilder, _) => + { + configurationBuilder + .AddHocon(TestKit.Xunit2.TestKit.DefaultConfig) + .WithRemoting("localhost", 0) + .WithClustering(_clusterOptions) + .WithActors((system, _) => + { + _testKit = new TestKit.Xunit2.TestKit(system, _helper); + _system = system; + _log = Logging.GetLogger(system, this); + _cluster = Cluster.Get(system); + + _log.Info("Distributed pub-sub test system initialized."); + }) + .WithDistributedPubSub("pub-sub-host"); + _specBuilder(configurationBuilder); + }); + }).Build(); + + await _host.StartAsync(cancellationTokenSource.Token); + + // Lifetime should be healthy + var lifetime = _host.Services.GetRequiredService(); + lifetime.ApplicationStopped.IsCancellationRequested.Should().BeFalse(); + lifetime.ApplicationStopping.IsCancellationRequested.Should().BeFalse(); + + // Join cluster + var myAddress = _cluster.SelfAddress; + await _cluster.JoinAsync(myAddress, cancellationTokenSource.Token); // force system to wait until we're up + + // Prepare test + var registry = _host.Services.GetRequiredService(); + _mediator = registry.Get(); + } + + public async Task DisposeAsync() + { + await _host.StopAsync(); + } +} \ No newline at end of file diff --git a/src/Akka.Cluster.Hosting.Tests/XUnitLogger.cs b/src/Akka.Cluster.Hosting.Tests/XUnitLogger.cs new file mode 100644 index 00000000..ea24ef55 --- /dev/null +++ b/src/Akka.Cluster.Hosting.Tests/XUnitLogger.cs @@ -0,0 +1,84 @@ +using System; +using Microsoft.Extensions.Logging; +using Xunit.Abstractions; + +namespace Akka.Cluster.Hosting.Tests; + +public class XUnitLogger: ILogger +{ + private const string NullFormatted = "[null]"; + + private readonly string _category; + private readonly ITestOutputHelper _helper; + private readonly LogLevel _logLevel; + + public XUnitLogger(string category, ITestOutputHelper helper, LogLevel logLevel) + { + _category = category; + _helper = helper; + _logLevel = logLevel; + } + + public void Log(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func formatter) + { + if (!IsEnabled(logLevel)) + return; + + if (!TryFormatMessage(state, exception, formatter, out var formattedMessage)) + return; + + WriteLogEntry(logLevel, eventId, formattedMessage, exception); + } + + private void WriteLogEntry(LogLevel logLevel, EventId eventId, string message, Exception exception) + { + var level = logLevel switch + { + LogLevel.Critical => "CRT", + LogLevel.Debug => "DBG", + LogLevel.Error => "ERR", + LogLevel.Information => "INF", + LogLevel.Warning => "WRN", + LogLevel.Trace => "DBG", + _ => "???" + }; + + var msg = $"{DateTime.Now}:{level}:{_category}:{eventId} {message}"; + if (exception != null) + msg += $"\n{exception.GetType()} {exception.Message}\n{exception.StackTrace}"; + _helper.WriteLine(msg); + } + + public bool IsEnabled(LogLevel logLevel) + { + return logLevel switch + { + LogLevel.None => false, + _ => logLevel >= _logLevel + }; + } + + public IDisposable BeginScope(TState state) + { + throw new NotImplementedException(); + } + + private static bool TryFormatMessage( + TState state, + Exception exception, + Func formatter, + out string result) + { + formatter = formatter ?? throw new ArgumentNullException(nameof(formatter)); + + var formattedMessage = formatter(state, exception); + if (formattedMessage == NullFormatted) + { + result = null; + return false; + } + + result = formattedMessage; + return true; + } +} \ No newline at end of file diff --git a/src/Akka.Cluster.Hosting.Tests/XUnitLoggerProvider.cs b/src/Akka.Cluster.Hosting.Tests/XUnitLoggerProvider.cs new file mode 100644 index 00000000..1b9c6ce7 --- /dev/null +++ b/src/Akka.Cluster.Hosting.Tests/XUnitLoggerProvider.cs @@ -0,0 +1,26 @@ +using Microsoft.Extensions.Logging; +using Xunit.Abstractions; + +namespace Akka.Cluster.Hosting.Tests; + +public class XUnitLoggerProvider : ILoggerProvider +{ + private readonly ITestOutputHelper _helper; + private readonly LogLevel _logLevel; + + public XUnitLoggerProvider(ITestOutputHelper helper, LogLevel logLevel) + { + _helper = helper; + _logLevel = logLevel; + } + + public void Dispose() + { + // no-op + } + + public ILogger CreateLogger(string categoryName) + { + return new XUnitLogger(categoryName, _helper, _logLevel); + } +} \ No newline at end of file diff --git a/src/Akka.Cluster.Hosting/AkkaClusterHostingExtensions.cs b/src/Akka.Cluster.Hosting/AkkaClusterHostingExtensions.cs index 90c5f9ef..6b767eac 100644 --- a/src/Akka.Cluster.Hosting/AkkaClusterHostingExtensions.cs +++ b/src/Akka.Cluster.Hosting/AkkaClusterHostingExtensions.cs @@ -254,7 +254,7 @@ public static AkkaConfigurationBuilder WithDistributedPubSub(this AkkaConfigurat var middle = builder.AddHocon(DistributedPubSub.DefaultConfig()); if (!string.IsNullOrEmpty(role)) // add role config { - middle = middle.AddHocon($"akka.cluster.pub-sub = \"{role}\""); + middle = middle.AddHocon($"akka.cluster.pub-sub.role = \"{role}\""); } return middle.WithActors((system, registry) => From c34afb235002791080a9f356682c645872a77144 Mon Sep 17 00:00:00 2001 From: Aaron Stannard Date: Thu, 9 Jun 2022 08:44:31 -0500 Subject: [PATCH 3/6] added `AddHoconFile` method Allows Akka.Hosting to automatically load HOCON from a file. --- .../Akka.Hosting.Tests.csproj | 7 +++++ src/Akka.Hosting.Tests/DISanityCheckSpecs.cs | 17 ++--------- src/Akka.Hosting.Tests/HoconSpecs.cs | 28 +++++++++++++++++++ src/Akka.Hosting.Tests/TestHelpers.cs | 22 +++++++++++++++ src/Akka.Hosting.Tests/test.hocon | 9 ++++++ src/Akka.Hosting/AkkaHostingExtensions.cs | 16 +++++++++++ 6 files changed, 84 insertions(+), 15 deletions(-) create mode 100644 src/Akka.Hosting.Tests/HoconSpecs.cs create mode 100644 src/Akka.Hosting.Tests/TestHelpers.cs create mode 100644 src/Akka.Hosting.Tests/test.hocon diff --git a/src/Akka.Hosting.Tests/Akka.Hosting.Tests.csproj b/src/Akka.Hosting.Tests/Akka.Hosting.Tests.csproj index c9b0b11c..4a5d79a6 100644 --- a/src/Akka.Hosting.Tests/Akka.Hosting.Tests.csproj +++ b/src/Akka.Hosting.Tests/Akka.Hosting.Tests.csproj @@ -13,4 +13,11 @@ + + + + + Always + + diff --git a/src/Akka.Hosting.Tests/DISanityCheckSpecs.cs b/src/Akka.Hosting.Tests/DISanityCheckSpecs.cs index f61c3011..04248823 100644 --- a/src/Akka.Hosting.Tests/DISanityCheckSpecs.cs +++ b/src/Akka.Hosting.Tests/DISanityCheckSpecs.cs @@ -5,12 +5,12 @@ using Akka.DependencyInjection; using FluentAssertions; using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Hosting; using Xunit; +using static Akka.Hosting.Tests.TestHelpers; namespace Akka.Hosting.Tests; -public class DiSanityCheckSpecs +public class DiSanityCheckSpecs { public interface IMySingletonInterface{} @@ -36,19 +36,6 @@ public SingletonActor(IMySingletonInterface singleton) }); } } - - private static async Task StartHost(Action testSetup) - { - var host = new HostBuilder() - .ConfigureServices(services => - { - services.AddSingleton(); - testSetup(services); - }).Build(); - - await host.StartAsync(); - return host; - } /// /// Sanity check: things registered as singletons prior to the creation of the should diff --git a/src/Akka.Hosting.Tests/HoconSpecs.cs b/src/Akka.Hosting.Tests/HoconSpecs.cs new file mode 100644 index 00000000..9eb3911c --- /dev/null +++ b/src/Akka.Hosting.Tests/HoconSpecs.cs @@ -0,0 +1,28 @@ +using System.Threading.Tasks; +using Akka.Actor; +using FluentAssertions; +using Microsoft.Extensions.DependencyInjection; +using Xunit; +using static Akka.Hosting.Tests.TestHelpers; + +namespace Akka.Hosting.Tests; + +public class HoconSpecs +{ + [Fact] + public async Task Should_load_HOCON_from_file() + { + // arrange + using var host = await StartHost(collection => collection.AddAkka("Test", builder => + { + builder.AddHoconFile("test.hocon"); + })); + + // act + var sys = host.Services.GetRequiredService(); + var hocon = sys.Settings.Config; + + // assert + hocon.HasPath("petabridge.cmd").Should().BeTrue(); + } +} \ No newline at end of file diff --git a/src/Akka.Hosting.Tests/TestHelpers.cs b/src/Akka.Hosting.Tests/TestHelpers.cs new file mode 100644 index 00000000..4c58183f --- /dev/null +++ b/src/Akka.Hosting.Tests/TestHelpers.cs @@ -0,0 +1,22 @@ +using System; +using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; + +namespace Akka.Hosting.Tests; + +public static class TestHelpers +{ + public static async Task StartHost(Action testSetup) + { + var host = new HostBuilder() + .ConfigureServices(services => + { + services.AddSingleton(); + testSetup(services); + }).Build(); + + await host.StartAsync(); + return host; + } +} \ No newline at end of file diff --git a/src/Akka.Hosting.Tests/test.hocon b/src/Akka.Hosting.Tests/test.hocon new file mode 100644 index 00000000..fd7163fd --- /dev/null +++ b/src/Akka.Hosting.Tests/test.hocon @@ -0,0 +1,9 @@ +# See petabridge.cmd configuration options here: https://cmd.petabridge.com/articles/install/host-configuration.html +petabridge.cmd{ + # default IP address used to listen for incoming petabridge.cmd client connections + # should be a safe default as it listens on "all network interfaces". + host = "0.0.0.0" + + # default port number used to listen for incoming petabridge.cmd client connections + port = 9110 +} \ No newline at end of file diff --git a/src/Akka.Hosting/AkkaHostingExtensions.cs b/src/Akka.Hosting/AkkaHostingExtensions.cs index c86582a3..fdcb9bd8 100644 --- a/src/Akka.Hosting/AkkaHostingExtensions.cs +++ b/src/Akka.Hosting/AkkaHostingExtensions.cs @@ -1,4 +1,5 @@ using System; +using System.IO; using Akka.Actor; using Akka.Actor.Setup; using Akka.Configuration; @@ -90,6 +91,21 @@ public static AkkaConfigurationBuilder AddHocon(this AkkaConfigurationBuilder bu return builder.AddHoconConfiguration(hocon, addMode); } + /// + /// Automatically loads the given HOCON file from + /// and inserts it into the s' configuration. + /// + /// The builder instance being configured. + /// The path to the HOCON file. Can be relative or absolute. + /// The - defaults to appending this HOCON as a fallback. + /// The same instance originally passed in. + public static AkkaConfigurationBuilder AddHoconFile(this AkkaConfigurationBuilder builder, string hoconFilePath, + HoconAddMode addMode = HoconAddMode.Append) + { + var hoconText = ConfigurationFactory.ParseString(File.ReadAllText(hoconFilePath)); + return AddHocon(builder, hoconText, addMode); + } + /// /// Configures the for this . Can be used to /// configure whether or not Akka, Akka.Remote, or Akka.Cluster starts. From ed718fd78507f146622ed34acdcae793470ca778 Mon Sep 17 00:00:00 2001 From: Aaron Stannard Date: Thu, 9 Jun 2022 09:30:07 -0500 Subject: [PATCH 4/6] added 0.3.1 release notes (#59) --- RELEASE_NOTES.md | 9 ++++----- src/Directory.Build.props | 9 ++++----- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md index a2d7122e..293e2705 100644 --- a/RELEASE_NOTES.md +++ b/RELEASE_NOTES.md @@ -1,5 +1,4 @@ -## [0.3.0] / 24 May 2022 -- [Add interfaces for the `ActorRegistry` to allow mocking in tests](https://github.com/akkadotnet/Akka.Hosting/pull/42) -- [Fixed: Akka.Hosting NRE upon shutdown](https://github.com/akkadotnet/Akka.Hosting/pull/49) -- [added throw-able `ActorRegistry.Register` method](https://github.com/akkadotnet/Akka.Hosting/pull/50) -- [Akka.Cluster.Hosting: adding `ClusterSingleton` hosting methods](https://github.com/akkadotnet/Akka.Hosting/pull/51) +## [0.3.1] / 09 June 2022 +- [Fixed: WithDistributedPubSub throws NullReferenceException](https://github.com/akkadotnet/Akka.Hosting/issues/55) +- [Introduced `AddHoconFile` method](https://github.com/akkadotnet/Akka.Hosting/pull/58) +- [Upgraded to Akka.NET 1.4.39](https://github.com/akkadotnet/akka.net/releases/tag/1.4.39) diff --git a/src/Directory.Build.props b/src/Directory.Build.props index de5b163b..a8ed25a1 100644 --- a/src/Directory.Build.props +++ b/src/Directory.Build.props @@ -2,11 +2,10 @@ Copyright © 2013-2022 Akka.NET Team Akka.NET Team - 0.3.0 - • [Add interfaces for the ActorRegistry to allow mocking in tests](https://github.com/akkadotnet/Akka.Hosting/pull/42) -• [Fixed: Akka.Hosting NRE upon shutdown](https://github.com/akkadotnet/Akka.Hosting/pull/49) -• [added throw-able ActorRegistry.Register method](https://github.com/akkadotnet/Akka.Hosting/pull/50) -• [Akka.Cluster.Hosting: adding ClusterSingleton hosting methods](https://github.com/akkadotnet/Akka.Hosting/pull/51) + 0.3.1 + • [Fixed: WithDistributedPubSub throws NullReferenceException](https://github.com/akkadotnet/Akka.Hosting/issues/55) +• [Introduced AddHoconFile method](https://github.com/akkadotnet/Akka.Hosting/pull/58) +• [Upgraded to Akka.NET 1.4.39](https://github.com/akkadotnet/akka.net/releases/tag/1.4.39) akkalogo.png https://github.com/akkadotnet/Akka.Hosting From a90cda7c2512ea5bda67713cf555a29584d4b0d1 Mon Sep 17 00:00:00 2001 From: Gregorius Soedharmo Date: Sat, 11 Jun 2022 20:52:49 +0700 Subject: [PATCH 5/6] Fix #55, wrong HOCON insertion ordering (#60) --- src/Akka.Cluster.Hosting.Tests/DistributedPubSubSpecs.cs | 3 ++- src/Akka.Cluster.Hosting/AkkaClusterHostingExtensions.cs | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Akka.Cluster.Hosting.Tests/DistributedPubSubSpecs.cs b/src/Akka.Cluster.Hosting.Tests/DistributedPubSubSpecs.cs index 390fab0b..d802d66b 100644 --- a/src/Akka.Cluster.Hosting.Tests/DistributedPubSubSpecs.cs +++ b/src/Akka.Cluster.Hosting.Tests/DistributedPubSubSpecs.cs @@ -47,6 +47,7 @@ public Task Should_launch_distributed_pub_sub_with_roles() var response = testProbe.ExpectMsg(); // assert + _system.Settings.Config.GetString("akka.cluster.pub-sub.role").Should().Be("my-host"); response.Subscribe.Topic.Should().Be("testSub"); response.Subscribe.Ref.Should().Be(testProbe); @@ -97,7 +98,7 @@ public async Task InitializeAsync() _log.Info("Distributed pub-sub test system initialized."); }) - .WithDistributedPubSub("pub-sub-host"); + .WithDistributedPubSub("my-host"); _specBuilder(configurationBuilder); }); }).Build(); diff --git a/src/Akka.Cluster.Hosting/AkkaClusterHostingExtensions.cs b/src/Akka.Cluster.Hosting/AkkaClusterHostingExtensions.cs index 6b767eac..c6181ee9 100644 --- a/src/Akka.Cluster.Hosting/AkkaClusterHostingExtensions.cs +++ b/src/Akka.Cluster.Hosting/AkkaClusterHostingExtensions.cs @@ -254,7 +254,7 @@ public static AkkaConfigurationBuilder WithDistributedPubSub(this AkkaConfigurat var middle = builder.AddHocon(DistributedPubSub.DefaultConfig()); if (!string.IsNullOrEmpty(role)) // add role config { - middle = middle.AddHocon($"akka.cluster.pub-sub.role = \"{role}\""); + middle = middle.AddHocon($"akka.cluster.pub-sub.role = \"{role}\"", HoconAddMode.Prepend); } return middle.WithActors((system, registry) => From 658b7987cbd5edf2d0468a70221281a72250d705 Mon Sep 17 00:00:00 2001 From: Gregorius Soedharmo Date: Mon, 13 Jun 2022 23:35:38 +0700 Subject: [PATCH 6/6] Update RELEASE_NOTES.md for 0.3.2 release (#62) --- RELEASE_NOTES.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md index 293e2705..8c453bb8 100644 --- a/RELEASE_NOTES.md +++ b/RELEASE_NOTES.md @@ -1,3 +1,6 @@ +## [0.3.2] / 13 June 2022 +- [Fixed: WithDistributedPubSub role HOCON settings not inserted in proper order](https://github.com/akkadotnet/Akka.Hosting/issues/60) + ## [0.3.1] / 09 June 2022 - [Fixed: WithDistributedPubSub throws NullReferenceException](https://github.com/akkadotnet/Akka.Hosting/issues/55) - [Introduced `AddHoconFile` method](https://github.com/akkadotnet/Akka.Hosting/pull/58)