public ReplicatorMessageSerializerSpec(ITestOutputHelper output) : base(BaseConfig, "ReplicatorMessageSerializerSpec", output) { _serializer = new ReplicatorMessageSerializer((ExtendedActorSystem)Sys); // We dont have Artery implementation // _protocol = ((RemoteActorRefProvider) ((ExtendedActorSystem)Sys).Provider).RemoteSettings.Artery.Enabled _protocol = "akka.tcp"; _address1 = new UniqueAddress(new Address("akka.tcp", Sys.Name, "some.host.org", 4711), 1); _address2 = new UniqueAddress(new Address("akka.tcp", Sys.Name, "other.host.org", 4711), 2); _address3 = new UniqueAddress(new Address("akka.tcp", Sys.Name, "some.host.org", 4711), 3); _keyA = new GSetKey <string>("A"); }
public DDataShardCoordinator(string typeName, ClusterShardingSettings settings, IShardAllocationStrategy allocationStrategy, IActorRef replicator, int majorityMinCap, bool rememberEntities) { _replicator = replicator; _rememberEntities = rememberEntities; Settings = settings; AllocationStrategy = allocationStrategy; Log = Context.GetLogger(); Cluster = Cluster.Get(Context.System); CurrentState = PersistentShardCoordinator.State.Empty.WithRememberEntities(settings.RememberEntities); RemovalMargin = Cluster.DowningProvider.DownRemovalMargin; MinMembers = string.IsNullOrEmpty(settings.Role) ? Cluster.Settings.MinNrOfMembers : (Cluster.Settings.MinNrOfMembersOfRole.TryGetValue(settings.Role, out var min) ? min : Cluster.Settings.MinNrOfMembers); RebalanceTask = Context.System.Scheduler.ScheduleTellRepeatedlyCancelable(Settings.TunningParameters.RebalanceInterval, Settings.TunningParameters.RebalanceInterval, Self, RebalanceTick.Instance, Self); _readConsistency = new ReadMajority(settings.TunningParameters.WaitingForStateTimeout, majorityMinCap); _writeConsistency = new WriteMajority(settings.TunningParameters.UpdatingStateTimeout, majorityMinCap); _coordinatorStateKey = new LWWRegisterKey <PersistentShardCoordinator.State>(typeName + "CoordinatorState"); _allShardsKey = new GSetKey <string>($"shard-{typeName}-all"); _allKeys = rememberEntities ? ImmutableHashSet.CreateRange(new IKey <IReplicatedData>[] { _coordinatorStateKey, _allShardsKey }) : ImmutableHashSet.Create <IKey <IReplicatedData> >(_coordinatorStateKey); if (rememberEntities) { replicator.Tell(Dsl.Subscribe(_allShardsKey, Self)); } Cluster.Subscribe(Self, ClusterEvent.SubscriptionInitialStateMode.InitialStateAsEvents, typeof(ClusterEvent.ClusterShuttingDown)); // get state from ddata replicator, repeat until GetSuccess GetCoordinatorState(); GetAllShards(); Context.Become(WaitingForState(_allKeys)); }