diff --git a/src/Akka.Cluster.Hosting.Tests/ClusterClientDiscoverySpecs.cs b/src/Akka.Cluster.Hosting.Tests/ClusterClientDiscoverySpecs.cs index b826752..97309f7 100644 --- a/src/Akka.Cluster.Hosting.Tests/ClusterClientDiscoverySpecs.cs +++ b/src/Akka.Cluster.Hosting.Tests/ClusterClientDiscoverySpecs.cs @@ -101,13 +101,6 @@ public void ClusterClientDiscoverySettingsSpec() [Fact(DisplayName = "ClusterClientDiscoverySettings with invalid values should throw")] public void ClusterClientDiscoveryInvalidSettingsSpec() { - Invoking(() => new ClusterClientDiscoveryOptions - { - DiscoveryOptions = new InvalidServiceDiscoveryOptions() - }.ToString()) - .Should().ThrowExactly() - .WithMessage("Discovery options must be of Type KubernetesDiscoveryOptions*"); - Invoking(() => new ClusterClientDiscoveryOptions { DiscoveryOptions = new ConfigServiceDiscoveryOptions(), @@ -162,19 +155,7 @@ public void ClusterClientDiscoveryInvalidSettingsSpec() } - private class InvalidServiceDiscoveryOptions: IHoconOption - { - public string ConfigPath { get; set; } = "invalid"; - public Type Class { get; } = typeof(ConfigServiceDiscovery); - public bool IsDefaultPlugin { get; set; } = true; - - public void Apply(AkkaConfigurationBuilder builder, Setup? setup = null) - { - throw new NotImplementedException(); - } - } - - private class ConfigServiceDiscoveryOptions: IHoconOption + private class ConfigServiceDiscoveryOptions: IDiscoveryOptions { internal const string DefaultPath = "config"; internal const string DefaultConfigPath = "akka.discovery." + DefaultPath; diff --git a/src/Akka.Cluster.Hosting/AkkaClusterHostingExtensions.cs b/src/Akka.Cluster.Hosting/AkkaClusterHostingExtensions.cs index ae032f2..8de3624 100644 --- a/src/Akka.Cluster.Hosting/AkkaClusterHostingExtensions.cs +++ b/src/Akka.Cluster.Hosting/AkkaClusterHostingExtensions.cs @@ -1568,7 +1568,7 @@ internal static ClusterClientSettings CreateClusterClientSettings(Config config, public static AkkaConfigurationBuilder WithClusterClientDiscovery( this AkkaConfigurationBuilder builder, string serviceName, - IHoconOption discoveryOptions, + IDiscoveryOptions discoveryOptions, string? portName = null, TimeSpan? retryInterval = null, TimeSpan? timeout = null, diff --git a/src/Akka.Cluster.Hosting/ClusterClientDiscoveryOptions.cs b/src/Akka.Cluster.Hosting/ClusterClientDiscoveryOptions.cs index 4ab4f01..45d3883 100644 --- a/src/Akka.Cluster.Hosting/ClusterClientDiscoveryOptions.cs +++ b/src/Akka.Cluster.Hosting/ClusterClientDiscoveryOptions.cs @@ -19,7 +19,7 @@ public sealed class ClusterClientDiscoveryOptions /// to work, you will need to set /// DiscoveryOptions.IsDefaultPlugin to false /// - public IHoconOption DiscoveryOptions { get; set; } = null!; + public IDiscoveryOptions DiscoveryOptions { get; set; } = null!; /// /// The service name that are being discovered. This setting is not optional. @@ -75,17 +75,6 @@ public override string ToString() private void Validate() { - var type = DiscoveryOptions.GetType().Name; - if(!(type.Contains("ConfigServiceDiscoveryOptions") - || type.Contains("KubernetesDiscoveryOptions") - || type.Contains("AkkaDiscoveryOptions") - || type.Contains("Ec2ServiceDiscoveryOptions") - || type.Contains("EcsServiceDiscoveryOptions"))) - throw new ArgumentException( - "Discovery options must be of Type KubernetesDiscoveryOptions, AkkaDiscoveryOptions, " + - "Ec2ServiceDiscoveryOptions, EcsServiceDiscoveryOptions, or ConfigServiceDiscoveryOptions", - nameof(DiscoveryOptions)); - if (string.IsNullOrWhiteSpace(ServiceName)) throw new ArgumentException("Service name must be provided", nameof(ServiceName)); diff --git a/src/Akka.Hosting.API.Tests/verify/CoreApiSpec.ApproveCluster.verified.txt b/src/Akka.Hosting.API.Tests/verify/CoreApiSpec.ApproveCluster.verified.txt index edb1b97..d8c525c 100644 --- a/src/Akka.Hosting.API.Tests/verify/CoreApiSpec.ApproveCluster.verified.txt +++ b/src/Akka.Hosting.API.Tests/verify/CoreApiSpec.ApproveCluster.verified.txt @@ -8,7 +8,7 @@ namespace Akka.Cluster.Hosting public static Akka.Hosting.AkkaConfigurationBuilder WithClusterClient(this Akka.Hosting.AkkaConfigurationBuilder builder, System.Collections.Generic.IEnumerable initialContactAddresses, string receptionistActorName = "receptionist") { } public static Akka.Hosting.AkkaConfigurationBuilder WithClusterClientDiscovery(this Akka.Hosting.AkkaConfigurationBuilder builder, Akka.Cluster.Hosting.ClusterClientDiscoveryOptions options) { } public static Akka.Hosting.AkkaConfigurationBuilder WithClusterClientDiscovery(this Akka.Hosting.AkkaConfigurationBuilder builder, System.Action configure) { } - public static Akka.Hosting.AkkaConfigurationBuilder WithClusterClientDiscovery(this Akka.Hosting.AkkaConfigurationBuilder builder, string serviceName, Akka.Hosting.IHoconOption discoveryOptions, string? portName = null, System.TimeSpan? retryInterval = default, System.TimeSpan? timeout = default, int? numberOfContacts = default, string? clientActorName = null) { } + public static Akka.Hosting.AkkaConfigurationBuilder WithClusterClientDiscovery(this Akka.Hosting.AkkaConfigurationBuilder builder, string serviceName, Akka.Hosting.IDiscoveryOptions discoveryOptions, string? portName = null, System.TimeSpan? retryInterval = default, System.TimeSpan? timeout = default, int? numberOfContacts = default, string? clientActorName = null) { } public static Akka.Hosting.AkkaConfigurationBuilder WithClusterClientReceptionist(this Akka.Hosting.AkkaConfigurationBuilder builder, string name = "receptionist", string? role = null) { } public static Akka.Hosting.AkkaConfigurationBuilder WithClustering(this Akka.Hosting.AkkaConfigurationBuilder builder, Akka.Cluster.Hosting.ClusterOptions? options = null) { } public static Akka.Hosting.AkkaConfigurationBuilder WithDistributedData(this Akka.Hosting.AkkaConfigurationBuilder builder, Akka.Cluster.Hosting.DDataOptions options) { } @@ -40,7 +40,7 @@ namespace Akka.Cluster.Hosting { public ClusterClientDiscoveryOptions() { } public string? ClientActorName { get; set; } - public Akka.Hosting.IHoconOption DiscoveryOptions { get; set; } + public Akka.Hosting.IDiscoveryOptions DiscoveryOptions { get; set; } public int? NumberOfContacts { get; set; } public string? PortName { get; set; } public System.TimeSpan? RetryInterval { get; set; } diff --git a/src/Akka.Hosting.API.Tests/verify/CoreApiSpec.ApproveCore.verified.txt b/src/Akka.Hosting.API.Tests/verify/CoreApiSpec.ApproveCore.verified.txt index e5ddb84..ef337ee 100644 --- a/src/Akka.Hosting.API.Tests/verify/CoreApiSpec.ApproveCore.verified.txt +++ b/src/Akka.Hosting.API.Tests/verify/CoreApiSpec.ApproveCore.verified.txt @@ -131,6 +131,7 @@ namespace Akka.Hosting bool TryRegister(System.Type key, Akka.Actor.IActorRef actor, bool overwrite = false); bool TryRegister(Akka.Actor.IActorRef actor, bool overwrite = false); } + public interface IDiscoveryOptions : Akka.Hosting.IHoconOption { } public interface IHoconOption { System.Type Class { get; } diff --git a/src/Akka.Hosting/IDiscoveryOptions.cs b/src/Akka.Hosting/IDiscoveryOptions.cs new file mode 100644 index 0000000..259fb97 --- /dev/null +++ b/src/Akka.Hosting/IDiscoveryOptions.cs @@ -0,0 +1,5 @@ +namespace Akka.Hosting; + +public interface IDiscoveryOptions: IHoconOption +{ +} \ No newline at end of file