Skip to content

Commit

Permalink
Akka.Cluster.Hosting: don't use sharding delegates (#424)
Browse files Browse the repository at this point in the history
laying the groundwork for akkadotnet/akka.net#6863 here - besides, it looks like the old delegates simply can't handle certain messages automatically due to akkadotnet/akka.net#7051
  • Loading branch information
Aaronontheweb authored Jan 9, 2024
1 parent 9e4d1b1 commit 1b6d84a
Showing 1 changed file with 19 additions and 26 deletions.
45 changes: 19 additions & 26 deletions src/Akka.Cluster.Hosting/AkkaClusterHostingExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -628,28 +628,6 @@ public static AkkaConfigurationBuilder WithClustering(
return hoconBuilder.WithActorRefProvider(ProviderSelection.Cluster.Instance);
}

private static ExtractEntityId ToExtractEntityId(this IMessageExtractor self)
{
Option<(string, object)> ExtractEntityId(object msg)
{
if (self.EntityId(msg) != null) return (self.EntityId(msg), self.EntityMessage(msg));

return Option<(string, object)>.None;
}

return ExtractEntityId;
}

private static ExtractShardId ToExtractShardId(this IMessageExtractor self)
{
string? ExtractShardId(object msg)
{
return self.EntityId(msg) != null ? self.ShardId(msg) : null;
}

return ExtractShardId;
}

public static AkkaConfigurationBuilder WithDistributedData(
this AkkaConfigurationBuilder builder,
Action<DDataOptions> configurator)
Expand Down Expand Up @@ -702,7 +680,7 @@ public static AkkaConfigurationBuilder WithShardRegion<TKey>(
ShardOptions shardOptions)
{
return builder.WithShardRegion<TKey>(typeName, (_, _, _) => entityPropsFactory,
messageExtractor.ToExtractEntityId(), messageExtractor.ToExtractShardId(), shardOptions);
messageExtractor, shardOptions);
}

/// <summary>
Expand Down Expand Up @@ -785,7 +763,7 @@ public static AkkaConfigurationBuilder WithShardRegion<TKey>(
{
return builder.WithShardRegion<TKey>(typeName,
(system, registry, _) => entityPropsFactory(system, registry),
messageExtractor.ToExtractEntityId(), messageExtractor.ToExtractShardId(), shardOptions);
messageExtractor, shardOptions);
}

/// <summary>
Expand Down Expand Up @@ -869,8 +847,23 @@ public static AkkaConfigurationBuilder WithShardRegion<TKey>(
IMessageExtractor messageExtractor,
ShardOptions shardOptions)
{
return builder.WithShardRegion<TKey>(typeName, entityPropsFactory,
messageExtractor.ToExtractEntityId(), messageExtractor.ToExtractShardId(), shardOptions);
shardOptions.Apply(builder);
builder.AddHocon(
ClusterSharding.DefaultConfig().WithFallback(DistributedData.DistributedData.DefaultConfig()),
HoconAddMode.Append);

return builder.StartActors(Resolver);

async Task Resolver(ActorSystem system, IActorRegistry registry, IDependencyResolver resolver)
{
var props = entityPropsFactory(system, registry, resolver);
var settings = ClusterShardingSettings.Create(system);
var allocationStrategy = ClusterSharding.Get(system).DefaultShardAllocationStrategy(settings);
var shardRegion = await ClusterSharding.Get(system).StartAsync(
typeName, props, settings, messageExtractor, allocationStrategy,
shardOptions.HandOffStopMessage ?? PoisonPill.Instance).ConfigureAwait(false);
registry.Register<TKey>(shardRegion);
}
}

/// <summary>
Expand Down

0 comments on commit 1b6d84a

Please sign in to comment.