public void ConsistentHashingGroup_must_use_same_hash_ring_independent_of_local_and_remote_nodes() { var a1 = new Address("akka.tcp", "RemoteConsistentHashingRouterSpec-1", "client1", 2552); var a2 = new Address("akka.tcp", "RemoteConsistentHashingRouterSpec-1", "client2", 2552); var localActor = Sys.ActorOf(Props.Empty, "a"); var s1 = new ActorRefRoutee(localActor); var s2 = new ActorSelectionRoutee(Sys.ActorSelection("akka.tcp://RemoteConsistentHashingRouterSpec-1@client2:2552/user/a")); var nodes1 = new List <ConsistentRoutee>(new[] { new ConsistentRoutee(s1, a1), new ConsistentRoutee(s2, a1) }); var s4 = new ActorSelectionRoutee(Sys.ActorSelection("akka.tcp://RemoteConsistentHashingRouterSpec-1@client1:2552/user/a")); var s5 = new ActorRefRoutee(localActor); var nodes2 = new List <ConsistentRoutee>(new[] { new ConsistentRoutee(s5, a2), new ConsistentRoutee(s4, a2) }); var consistentHash1 = ConsistentHash.Create(nodes1, 10); var consistentHash2 = ConsistentHash.Create(nodes2, 10); var keys = new List <string>(new[] { "A", "B", "C", "D", "E", "F", "G" }); var result1 = keys .Select(k => consistentHash1.NodeFor(k)) .Select(routee => routee.ToString()) .ToArray(); var result2 = keys .Select(k => consistentHash2.NodeFor(k)) .Select(routee => routee.ToString()) .ToArray(); result1 .ShouldOnlyContainInOrder(result2); }
public WeightedRouteesSpec() : base(ConfigurationFactory.ParseString(@" akka.actor.provider = ""cluster"" akka.remote.classic.netty.tcp.port = 0 akka.remote.artery.canonical.port = 0 ")) { _routeeA = new ActorSelectionRoutee(Sys.ActorSelection(new RootActorPath(_a1) / "user" / "a")); _routeeB = new ActorSelectionRoutee(Sys.ActorSelection(new RootActorPath(_b1) / "user" / "b")); _routeeC = new ActorSelectionRoutee(Sys.ActorSelection(new RootActorPath(_c1) / "user" / "c")); _routees = ImmutableArray.Create <Routee>(_routeeA, _routeeB, _routeeC); _testActorRoutee = new ActorRefRoutee(TestActor); }
public void Round_robin_pool_must_be_controlled_with_management_messages() { IActorRef actor = Sys.ActorOf(new RoundRobinPool(3) .Props(Props.Create <EmptyBehaviorActor>()), "round-robin-managed"); RouteeSize(actor).Should().Be(3); actor.Tell(new AdjustPoolSize(4)); RouteeSize(actor).Should().Be(7); actor.Tell(new AdjustPoolSize(-2)); RouteeSize(actor).Should().Be(5); var other = new ActorSelectionRoutee(Sys.ActorSelection("/user/other")); actor.Tell(new AddRoutee(other)); RouteeSize(actor).Should().Be(6); actor.Tell(new RemoveRoutee(other)); RouteeSize(actor).Should().Be(5); }
public void ConsistentHashingGroup_must_use_same_hash_ring_indepenent_of_self_address() { // simulating running router on two different nodes (a1, a2) with target routees on 3 other nodes (s1, s2, s3) var a1 = new Address("akka.tcp", "Sys", "client1", 2552); var a2 = new Address("akka.tcp", "Sys", "client2", 2552); var s1 = new ActorSelectionRoutee(Sys.ActorSelection("akka.tcp://Sys@server1:2552/user/a/b")); var s2 = new ActorSelectionRoutee(Sys.ActorSelection("akka.tcp://Sys@server2:2552/user/a/b")); var s3 = new ActorSelectionRoutee(Sys.ActorSelection("akka.tcp://Sys@server3:2552/user/a/b")); var nodes1 = new List <ConsistentRoutee>(new [] { new ConsistentRoutee(s1, a1), new ConsistentRoutee(s2, a1), new ConsistentRoutee(s3, a1) }); var nodes2 = new List <ConsistentRoutee>(new[] { new ConsistentRoutee(s1, a2), new ConsistentRoutee(s2, a2), new ConsistentRoutee(s3, a2) }); var consistentHash1 = ConsistentHash.Create(nodes1, 10); var consistentHash2 = ConsistentHash.Create(nodes2, 10); var keys = new List <string>(new [] { "A", "B", "C", "D", "E", "F", "G" }); var result1 = keys.Select(k => consistentHash1.NodeFor(k).Routee); var result2 = keys.Select(k => consistentHash2.NodeFor(k).Routee); Assert.Equal(result2, result1); }