From 0675bd97b271b37b7f631b336949b85d6e7b3ac4 Mon Sep 17 00:00:00 2001 From: Gregorius Soedharmo Date: Sat, 15 Oct 2022 01:14:30 +0700 Subject: [PATCH] Fix OldCoordinatorStateMigrationEventAdapter.Manifest (#6176) * Fix OldCoordinatorStateMigrationEventAdapter.Manifest * Update API Verify list * Change `GetManifest()` from public to internal * Update API Verify list Co-authored-by: Aaron Stannard --- .../Akka.Cluster.Sharding.csproj | 1 + ...ldCoordinatorStateMigrationEventAdapter.cs | 7 +- .../ClusterShardingMessageSerializer.cs | 115 ++++++++++-------- 3 files changed, 72 insertions(+), 51 deletions(-) diff --git a/src/contrib/cluster/Akka.Cluster.Sharding/Akka.Cluster.Sharding.csproj b/src/contrib/cluster/Akka.Cluster.Sharding/Akka.Cluster.Sharding.csproj index 782704b56d8..eda4f833525 100644 --- a/src/contrib/cluster/Akka.Cluster.Sharding/Akka.Cluster.Sharding.csproj +++ b/src/contrib/cluster/Akka.Cluster.Sharding/Akka.Cluster.Sharding.csproj @@ -7,6 +7,7 @@ $(NetStandardLibVersion);$(NetLibVersion) $(AkkaPackageTags);network;cluster;sharding true + 8.0 diff --git a/src/contrib/cluster/Akka.Cluster.Sharding/OldCoordinatorStateMigrationEventAdapter.cs b/src/contrib/cluster/Akka.Cluster.Sharding/OldCoordinatorStateMigrationEventAdapter.cs index faaf07610cd..08dafd6f3e5 100644 --- a/src/contrib/cluster/Akka.Cluster.Sharding/OldCoordinatorStateMigrationEventAdapter.cs +++ b/src/contrib/cluster/Akka.Cluster.Sharding/OldCoordinatorStateMigrationEventAdapter.cs @@ -5,6 +5,8 @@ // //----------------------------------------------------------------------- +using Akka.Cluster.Sharding.Serialization; +using Akka.Persistence; using Akka.Persistence.Journal; namespace Akka.Cluster.Sharding @@ -17,7 +19,10 @@ internal sealed class OldCoordinatorStateMigrationEventAdapter : IEventAdapter { public string Manifest(object evt) { - return ""; + if (evt is IPersistentRepresentation p) + return p.Manifest; + + return ClusterShardingMessageSerializer.GetManifest(evt); } public object ToJournal(object evt) diff --git a/src/contrib/cluster/Akka.Cluster.Sharding/Serialization/ClusterShardingMessageSerializer.cs b/src/contrib/cluster/Akka.Cluster.Sharding/Serialization/ClusterShardingMessageSerializer.cs index 906098f3ca7..a7556f3bb21 100644 --- a/src/contrib/cluster/Akka.Cluster.Sharding/Serialization/ClusterShardingMessageSerializer.cs +++ b/src/contrib/cluster/Akka.Cluster.Sharding/Serialization/ClusterShardingMessageSerializer.cs @@ -233,58 +233,73 @@ public override object FromBinary(byte[] bytes, string manifest) /// This exception is thrown when the specified does not have an associated manifest. /// /// The manifest needed for the deserialization of the specified . + internal static string GetManifest(object o) + => o switch + { + EventSourcedRememberEntitiesShardStore.State _ => EntityStateManifest, + EventSourcedRememberEntitiesShardStore.EntitiesStarted _ => EntitiesStartedManifest, + EventSourcedRememberEntitiesShardStore.EntitiesStopped _ => EntitiesStoppedManifest, + + ShardCoordinator.CoordinatorState _ => CoordinatorStateManifest, + ShardCoordinator.ShardRegionRegistered _ => ShardRegionRegisteredManifest, + ShardCoordinator.ShardRegionProxyRegistered _ => ShardRegionProxyRegisteredManifest, + ShardCoordinator.ShardRegionTerminated _ => ShardRegionTerminatedManifest, + ShardCoordinator.ShardRegionProxyTerminated _ => ShardRegionProxyTerminatedManifest, + ShardCoordinator.ShardHomeAllocated _ => ShardHomeAllocatedManifest, + ShardCoordinator.ShardHomeDeallocated _ => ShardHomeDeallocatedManifest, + + ShardCoordinator.Register _ => RegisterManifest, + ShardCoordinator.RegisterProxy _ => RegisterProxyManifest, + ShardCoordinator.RegisterAck _ => RegisterAckManifest, + ShardCoordinator.GetShardHome _ => GetShardHomeManifest, + ShardCoordinator.ShardHome _ => ShardHomeManifest, + ShardCoordinator.HostShard _ => HostShardManifest, + ShardCoordinator.ShardStarted _ => ShardStartedManifest, + ShardCoordinator.BeginHandOff _ => BeginHandOffManifest, + ShardCoordinator.BeginHandOffAck _ => BeginHandOffAckManifest, + ShardCoordinator.HandOff _ => HandOffManifest, + ShardCoordinator.ShardStopped _ => ShardStoppedManifest, + ShardCoordinator.GracefulShutdownRequest _ => GracefulShutdownReqManifest, + ShardCoordinator.RegionStopped _ => RegionStoppedManifest, + + ShardRegion.StartEntity _ => StartEntityManifest, + ShardRegion.StartEntityAck _ => StartEntityAckManifest, + + Shard.GetShardStats _ => GetShardStatsManifest, + Shard.ShardStats _ => ShardStatsManifest, + GetShardRegionStats _ => GetShardRegionStatsManifest, + ShardRegionStats _ => ShardRegionStatsManifest, + GetClusterShardingStats _ => GetClusterShardingStatsManifest, + ClusterShardingStats _ => ClusterShardingStatsManifest, + GetCurrentRegions _ => GetCurrentRegionsManifest, + CurrentRegions _ => CurrentRegionsManifest, + + Shard.GetCurrentShardState _ => GetCurrentShardStateManifest, + Shard.CurrentShardState _ => CurrentShardStateManifest, + GetShardRegionState _ => GetShardRegionStateManifest, + ShardState _ => ShardStateManifest, + CurrentShardRegionState _ => CurrentShardRegionStateManifest, + + EventSourcedRememberEntitiesCoordinatorStore.MigrationMarker _ => EventSourcedRememberShardsMigrationMarkerManifest, + EventSourcedRememberEntitiesCoordinatorStore.State _ => EventSourcedRememberShardsState, + + _ => string.Empty + }; + + /// + /// Returns the manifest (type hint) that will be provided in the method. + /// + /// The object for which the manifest is needed. + /// + /// This exception is thrown when the specified does not have an associated manifest. + /// + /// The manifest needed for the deserialization of the specified . public override string Manifest(object o) { - switch (o) - { - case EventSourcedRememberEntitiesShardStore.State _: return EntityStateManifest; - case EventSourcedRememberEntitiesShardStore.EntitiesStarted _: return EntitiesStartedManifest; - case EventSourcedRememberEntitiesShardStore.EntitiesStopped _: return EntitiesStoppedManifest; - - case ShardCoordinator.CoordinatorState _: return CoordinatorStateManifest; - case ShardCoordinator.ShardRegionRegistered _: return ShardRegionRegisteredManifest; - case ShardCoordinator.ShardRegionProxyRegistered _: return ShardRegionProxyRegisteredManifest; - case ShardCoordinator.ShardRegionTerminated _: return ShardRegionTerminatedManifest; - case ShardCoordinator.ShardRegionProxyTerminated _: return ShardRegionProxyTerminatedManifest; - case ShardCoordinator.ShardHomeAllocated _: return ShardHomeAllocatedManifest; - case ShardCoordinator.ShardHomeDeallocated _: return ShardHomeDeallocatedManifest; - - case ShardCoordinator.Register _: return RegisterManifest; - case ShardCoordinator.RegisterProxy _: return RegisterProxyManifest; - case ShardCoordinator.RegisterAck _: return RegisterAckManifest; - case ShardCoordinator.GetShardHome _: return GetShardHomeManifest; - case ShardCoordinator.ShardHome _: return ShardHomeManifest; - case ShardCoordinator.HostShard _: return HostShardManifest; - case ShardCoordinator.ShardStarted _: return ShardStartedManifest; - case ShardCoordinator.BeginHandOff _: return BeginHandOffManifest; - case ShardCoordinator.BeginHandOffAck _: return BeginHandOffAckManifest; - case ShardCoordinator.HandOff _: return HandOffManifest; - case ShardCoordinator.ShardStopped _: return ShardStoppedManifest; - case ShardCoordinator.GracefulShutdownRequest _: return GracefulShutdownReqManifest; - case ShardCoordinator.RegionStopped _: return RegionStoppedManifest; - - case ShardRegion.StartEntity _: return StartEntityManifest; - case ShardRegion.StartEntityAck _: return StartEntityAckManifest; - - case Shard.GetShardStats _: return GetShardStatsManifest; - case Shard.ShardStats _: return ShardStatsManifest; - case GetShardRegionStats _: return GetShardRegionStatsManifest; - case ShardRegionStats _: return ShardRegionStatsManifest; - case GetClusterShardingStats _: return GetClusterShardingStatsManifest; - case ClusterShardingStats _: return ClusterShardingStatsManifest; - case GetCurrentRegions _: return GetCurrentRegionsManifest; - case CurrentRegions _: return CurrentRegionsManifest; - - case Shard.GetCurrentShardState _: return GetCurrentShardStateManifest; - case Shard.CurrentShardState _: return CurrentShardStateManifest; - case GetShardRegionState _: return GetShardRegionStateManifest; - case ShardState _: return ShardStateManifest; - case CurrentShardRegionState _: return CurrentShardRegionStateManifest; - - case EventSourcedRememberEntitiesCoordinatorStore.MigrationMarker _: return EventSourcedRememberShardsMigrationMarkerManifest; - case EventSourcedRememberEntitiesCoordinatorStore.State _: return EventSourcedRememberShardsState; - } - throw new ArgumentException($"Can't serialize object of type [{o.GetType()}] in [{GetType()}]"); + var man = GetManifest(o); + if(ReferenceEquals(man, string.Empty)) + throw new ArgumentException($"Can't serialize object of type [{o.GetType()}] in [{GetType()}]"); + return man; } //