Beispiel #1
0
        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);
        }