コード例 #1
0
        public void ClusterMessages_must_be_serializable()
        {
            var address        = new Address("akka.tcp", "system", "some.host.org", 4711);
            var uniqueAddress  = new UniqueAddress(address, 17);
            var address2       = new Address("akka.tcp", "system", "other.host.org", 4711);
            var uniqueAddress2 = new UniqueAddress(address2, 18);

            CheckSerialization(new InternalClusterAction.Join(uniqueAddress, ImmutableHashSet.Create("foo", "bar")));
            CheckSerialization(new ClusterUserAction.Leave(address));
            CheckSerialization(new ClusterUserAction.Down(address));
            CheckSerialization(new InternalClusterAction.InitJoin());
            CheckSerialization(new InternalClusterAction.InitJoinAck(address));
            CheckSerialization(new InternalClusterAction.InitJoinNack(address));
            CheckSerialization(new ClusterHeartbeatSender.Heartbeat(address));
            CheckSerialization(new ClusterHeartbeatSender.HeartbeatRsp(uniqueAddress));

            var node1 = new VectorClock.Node("node1");
            var node2 = new VectorClock.Node("node2");
            var node3 = new VectorClock.Node("node3");
            var node4 = new VectorClock.Node("node4");
            var g1    =
                new Gossip(ImmutableSortedSet.Create(a1, b1, c1, d1)).Increment(node1)
                .Increment(node2)
                .Seen(a1.UniqueAddress)
                .Seen(b1.UniqueAddress);
            var g2            = g1.Increment(node3).Increment(node4).Seen(a1.UniqueAddress).Seen(c1.UniqueAddress);
            var reachability3 =
                Reachability.Empty.Unreachable(a1.UniqueAddress, e1.UniqueAddress)
                .Unreachable(b1.UniqueAddress, e1.UniqueAddress);
            var g3 = g2.Copy(members: ImmutableSortedSet.Create(a1, b1, c1, d1, e1),
                             overview: g2.Overview.Copy(reachability: reachability3));

            CheckSerialization(new GossipEnvelope(a1.UniqueAddress, uniqueAddress2, g1));
            CheckSerialization(new GossipEnvelope(a1.UniqueAddress, uniqueAddress2, g2));
            CheckSerialization(new GossipEnvelope(a1.UniqueAddress, uniqueAddress2, g3));

            CheckSerialization(new GossipStatus(a1.UniqueAddress, g1.Version));
            CheckSerialization(new GossipStatus(a1.UniqueAddress, g2.Version));
            CheckSerialization(new GossipStatus(a1.UniqueAddress, g3.Version));

            CheckSerialization(new InternalClusterAction.Welcome(uniqueAddress, g2));

            var mg = new MetricsGossip(ImmutableHashSet.Create <NodeMetrics>(new[]
            {
                new NodeMetrics(a1.Address, 4711, ImmutableHashSet.Create <Metric>(new Metric("foo", 1.2, null))),
                new NodeMetrics(b1.Address, 4712,
                                ImmutableHashSet.Create <Metric>(new Metric("foo", 2.1, new EWMA(100.0, 0.18))
                                                                 , new Metric("bar1", Double.MinValue, null), new Metric("bar2", float.MaxValue, null),
                                                                 new Metric("bar3", int.MaxValue, null), new Metric("bar4", long.MaxValue, null),
                                                                 new Metric("bar5", double.MaxValue, null)))
            }));

            CheckSerialization(new MetricsGossipEnvelope(a1.Address, mg, true));
        }
コード例 #2
0
        public void ClusterMessages_must_be_serializable()
        {
            var address = new Address("akka.tcp", "system", "some.host.org", 4711);
            var uniqueAddress = new UniqueAddress(address, 17);
            var address2 = new Address("akka.tcp", "system", "other.host.org", 4711);
            var uniqueAddress2 = new UniqueAddress(address2, 18);
            CheckSerialization(new InternalClusterAction.Join(uniqueAddress, ImmutableHashSet.Create("foo","bar")));
            CheckSerialization(new ClusterUserAction.Leave(address));
            CheckSerialization(new ClusterUserAction.Down(address));
            CheckSerialization(new InternalClusterAction.InitJoin());
            CheckSerialization(new InternalClusterAction.InitJoinAck(address));
            CheckSerialization(new InternalClusterAction.InitJoinNack(address));
            CheckSerialization(new ClusterHeartbeatSender.Heartbeat(address));
            CheckSerialization(new ClusterHeartbeatSender.HeartbeatRsp(uniqueAddress));

            var node1 = new VectorClock.Node("node1");
            var node2 = new VectorClock.Node("node2");
            var node3 = new VectorClock.Node("node3");
            var node4 = new VectorClock.Node("node4");
            var g1 =
                new Gossip(ImmutableSortedSet.Create(a1, b1, c1, d1)).Increment(node1)
                    .Increment(node2)
                    .Seen(a1.UniqueAddress)
                    .Seen(b1.UniqueAddress);
            var g2 = g1.Increment(node3).Increment(node4).Seen(a1.UniqueAddress).Seen(c1.UniqueAddress);
            var reachability3 =
                Reachability.Empty.Unreachable(a1.UniqueAddress, e1.UniqueAddress)
                    .Unreachable(b1.UniqueAddress, e1.UniqueAddress);
            var g3 = g2.Copy(members: ImmutableSortedSet.Create(a1, b1, c1, d1, e1),
                overview: g2.Overview.Copy(reachability: reachability3));
            CheckSerialization(new GossipEnvelope(a1.UniqueAddress, uniqueAddress2, g1));
            CheckSerialization(new GossipEnvelope(a1.UniqueAddress, uniqueAddress2, g2));
            CheckSerialization(new GossipEnvelope(a1.UniqueAddress, uniqueAddress2, g3));

            CheckSerialization(new GossipStatus(a1.UniqueAddress, g1.Version));
            CheckSerialization(new GossipStatus(a1.UniqueAddress, g2.Version));
            CheckSerialization(new GossipStatus(a1.UniqueAddress, g3.Version));

            CheckSerialization(new InternalClusterAction.Welcome(uniqueAddress, g2));

            var mg = new MetricsGossip(ImmutableHashSet.Create<NodeMetrics>(new[]
            {
                new NodeMetrics(a1.Address, 4711, ImmutableHashSet.Create<Metric>(new Metric("foo", 1.2, null))),
                new NodeMetrics(b1.Address, 4712,
                    ImmutableHashSet.Create<Metric>(new Metric("foo", 2.1, new EWMA(100.0, 0.18))
                        , new Metric("bar1", Double.MinValue, null), new Metric("bar2", float.MaxValue, null),
                        new Metric("bar3", int.MaxValue, null), new Metric("bar4", long.MaxValue, null), 
                        new Metric("bar5", double.MaxValue, null)))
            }));
            CheckSerialization(new MetricsGossipEnvelope(a1.Address, mg, true));
        }
コード例 #3
0
        public void Can_serialize_Welcome()
        {
            var node1 = new VectorClock.Node("node1");
            var node2 = new VectorClock.Node("node2");
            var node3 = new VectorClock.Node("node3");
            var node4 = new VectorClock.Node("node4");
            var g1    =
                new Gossip(ImmutableSortedSet.Create(a1, b1, c1, d1)).Increment(node1)
                .Increment(node2)
                .Seen(a1.UniqueAddress)
                .Seen(b1.UniqueAddress);
            var g2 = g1.Increment(node3).Increment(node4).Seen(a1.UniqueAddress).Seen(c1.UniqueAddress);

            var address       = new Address("akka.tcp", "system", "some.host.org", 4711);
            var uniqueAddress = new UniqueAddress(address, 17);
            var message       = new InternalClusterAction.Welcome(uniqueAddress, g2);

            AssertEqual(message);
        }
コード例 #4
0
        public void Can_serialize_GossipStatus()
        {
            var node1 = new VectorClock.Node("node1");
            var node2 = new VectorClock.Node("node2");
            var node3 = new VectorClock.Node("node3");
            var node4 = new VectorClock.Node("node4");
            var g1    =
                new Gossip(ImmutableSortedSet.Create(a1, b1, c1, d1)).Increment(node1)
                .Increment(node2)
                .Seen(a1.UniqueAddress)
                .Seen(b1.UniqueAddress);
            var g2            = g1.Increment(node3).Increment(node4).Seen(a1.UniqueAddress).Seen(c1.UniqueAddress);
            var reachability3 = Reachability.Empty.Unreachable(a1.UniqueAddress, e1.UniqueAddress).Unreachable(b1.UniqueAddress, e1.UniqueAddress);
            var g3            = g2.Copy(members: ImmutableSortedSet.Create(a1, b1, c1, d1, e1), overview: g2.Overview.Copy(reachability: reachability3));

            AssertEqual(new GossipStatus(a1.UniqueAddress, g1.Version));
            AssertEqual(new GossipStatus(a1.UniqueAddress, g2.Version));
            AssertEqual(new GossipStatus(a1.UniqueAddress, g3.Version));
        }
コード例 #5
0
        public void ClusterMessages_must_be_serializable()
        {
            var address        = new Address("akka.tcp", "system", "some.host.org", 4711);
            var uniqueAddress  = new UniqueAddress(address, 17);
            var address2       = new Address("akka.tcp", "system", "other.host.org", 4711);
            var uniqueAddress2 = new UniqueAddress(address2, 18);

            CheckSerialization(new InternalClusterAction.Join(uniqueAddress, ImmutableHashSet.Create("foo", "bar")));
            CheckSerialization(new ClusterUserAction.Leave(address));
            CheckSerialization(new ClusterUserAction.Down(address));
            CheckSerialization(new InternalClusterAction.InitJoin());
            CheckSerialization(new InternalClusterAction.InitJoinAck(address));
            CheckSerialization(new InternalClusterAction.InitJoinNack(address));
            CheckSerialization(new ClusterHeartbeatSender.Heartbeat(address));
            CheckSerialization(new ClusterHeartbeatSender.HeartbeatRsp(uniqueAddress));
            CheckSerialization(new InternalClusterAction.ExitingConfirmed(uniqueAddress));

            var node1 = new VectorClock.Node("node1");
            var node2 = new VectorClock.Node("node2");
            var node3 = new VectorClock.Node("node3");
            var node4 = new VectorClock.Node("node4");
            var g1    =
                new Gossip(ImmutableSortedSet.Create(a1, b1, c1, d1)).Increment(node1)
                .Increment(node2)
                .Seen(a1.UniqueAddress)
                .Seen(b1.UniqueAddress);
            var g2            = g1.Increment(node3).Increment(node4).Seen(a1.UniqueAddress).Seen(c1.UniqueAddress);
            var reachability3 =
                Reachability.Empty.Unreachable(a1.UniqueAddress, e1.UniqueAddress)
                .Unreachable(b1.UniqueAddress, e1.UniqueAddress);
            var g3 = g2.Copy(members: ImmutableSortedSet.Create(a1, b1, c1, d1, e1),
                             overview: g2.Overview.Copy(reachability: reachability3));

            CheckSerialization(new GossipEnvelope(a1.UniqueAddress, uniqueAddress2, g1));
            CheckSerialization(new GossipEnvelope(a1.UniqueAddress, uniqueAddress2, g2));
            CheckSerialization(new GossipEnvelope(a1.UniqueAddress, uniqueAddress2, g3));

            CheckSerialization(new GossipStatus(a1.UniqueAddress, g1.Version));
            CheckSerialization(new GossipStatus(a1.UniqueAddress, g2.Version));
            CheckSerialization(new GossipStatus(a1.UniqueAddress, g3.Version));

            CheckSerialization(new InternalClusterAction.Welcome(uniqueAddress, g2));
        }
コード例 #6
0
        public void Can_serialize_GossipEnvelope()
        {
            var address        = new Address("akka.tcp", "system", "some.host.org", 4711);
            var uniqueAddress2 = new UniqueAddress(address, 18);
            var node1          = new VectorClock.Node("node1");
            var node2          = new VectorClock.Node("node2");

            var g1 = new Gossip(ImmutableSortedSet.Create(a1, b1, c1, d1)).Increment(node1)
                     .Increment(node2)
                     .Seen(a1.UniqueAddress)
                     .Seen(b1.UniqueAddress);
            var message1     = new GossipEnvelope(a1.UniqueAddress, uniqueAddress2, g1);
            var deserialized = AssertAndReturn(message1);

            message1.From.Should().Be(deserialized.From);
            message1.To.Should().Be(deserialized.To);
            message1.Gossip.Members.Should().BeEquivalentTo(deserialized.Gossip.Members);
            message1.Gossip.Overview.Seen.Should().BeEquivalentTo(deserialized.Gossip.Overview.Seen);
            message1.Gossip.Overview.Reachability.Should().Be(deserialized.Gossip.Overview.Reachability);
            message1.Gossip.Version.Versions.Should().Equal(deserialized.Gossip.Version.Versions);
        }
コード例 #7
0
        public void ClusterMessages_must_be_serializable()
        {
            var address = new Address("akka.tcp", "system", "some.host.org", 4711);
            var uniqueAddress = new UniqueAddress(address, 17);
            var address2 = new Address("akka.tcp", "system", "other.host.org", 4711);
            var uniqueAddress2 = new UniqueAddress(address2, 18);
            CheckSerialization(new InternalClusterAction.Join(uniqueAddress, ImmutableHashSet.Create("foo","bar")));
            CheckSerialization(new ClusterUserAction.Leave(address));
            CheckSerialization(new ClusterUserAction.Down(address));
            CheckSerialization(new InternalClusterAction.InitJoin());
            CheckSerialization(new InternalClusterAction.InitJoinAck(address));
            CheckSerialization(new InternalClusterAction.InitJoinNack(address));
            CheckSerialization(new ClusterHeartbeatSender.Heartbeat(address));
            CheckSerialization(new ClusterHeartbeatSender.HeartbeatRsp(uniqueAddress));

            var node1 = new VectorClock.Node("node1");
            var node2 = new VectorClock.Node("node2");
            var node3 = new VectorClock.Node("node3");
            var node4 = new VectorClock.Node("node4");
            var g1 =
                new Gossip(ImmutableSortedSet.Create(a1, b1, c1, d1)).Increment(node1)
                    .Increment(node2)
                    .Seen(a1.UniqueAddress)
                    .Seen(b1.UniqueAddress);
            var g2 = g1.Increment(node3).Increment(node4).Seen(a1.UniqueAddress).Seen(c1.UniqueAddress);
            var reachability3 =
                Reachability.Empty.Unreachable(a1.UniqueAddress, e1.UniqueAddress)
                    .Unreachable(b1.UniqueAddress, e1.UniqueAddress);
            var g3 = g2.Copy(members: ImmutableSortedSet.Create(a1, b1, c1, d1, e1),
                overview: g2.Overview.Copy(reachability: reachability3));
            CheckSerialization(new GossipEnvelope(a1.UniqueAddress, uniqueAddress2, g1));
            CheckSerialization(new GossipEnvelope(a1.UniqueAddress, uniqueAddress2, g2));
            CheckSerialization(new GossipEnvelope(a1.UniqueAddress, uniqueAddress2, g3));

            CheckSerialization(new GossipStatus(a1.UniqueAddress, g1.Version));
            CheckSerialization(new GossipStatus(a1.UniqueAddress, g2.Version));
            CheckSerialization(new GossipStatus(a1.UniqueAddress, g3.Version));

            CheckSerialization(new InternalClusterAction.Welcome(uniqueAddress, g2));
        }
コード例 #8
0
        public ClusterCoreDaemon(IActorRef publisher)
        {
            _publisher = publisher;
            SelfUniqueAddress = _cluster.SelfUniqueAddress;
            _vclockNode = new VectorClock.Node(VclockName(SelfUniqueAddress));
            
            var settings = _cluster.Settings;
            var scheduler = _cluster.Scheduler;

            _statsEnabled = settings.PublishStatsInterval.HasValue
                            && settings.PublishStatsInterval >= TimeSpan.Zero
                            && settings.PublishStatsInterval != TimeSpan.MaxValue;

            _gossipTaskCancellable =
                scheduler.ScheduleTellRepeatedlyCancelable(
                    settings.PeriodicTasksInitialDelay.Max(settings.GossipInterval), 
                    settings.GossipInterval, 
                    Self, 
                    InternalClusterAction.GossipTick.Instance, 
                    Self);

            _failureDetectorReaperTaskCancellable =
                scheduler.ScheduleTellRepeatedlyCancelable(
                    settings.PeriodicTasksInitialDelay.Max(settings.UnreachableNodesReaperInterval), 
                    settings.UnreachableNodesReaperInterval, 
                    Self, 
                    InternalClusterAction.ReapUnreachableTick.Instance, 
                    Self);

            _leaderActionsTaskCancellable =
                scheduler.ScheduleTellRepeatedlyCancelable(
                    settings.PeriodicTasksInitialDelay.Max(settings.LeaderActionsInterval), 
                    settings.LeaderActionsInterval, 
                    Self, 
                    InternalClusterAction.LeaderActionsTick.Instance, 
                    Self);

            if (settings.PublishStatsInterval != null && settings.PublishStatsInterval > TimeSpan.Zero && settings.PublishStatsInterval != TimeSpan.MaxValue)
            {
                _publishStatsTaskTaskCancellable =
                    scheduler.ScheduleTellRepeatedlyCancelable(
                        settings.PeriodicTasksInitialDelay.Max(settings.PublishStatsInterval.Value), 
                        settings.PublishStatsInterval.Value, 
                        Self, 
                        InternalClusterAction.PublishStatsTick.Instance, 
                        Self);
            }

            _logInfo = settings.LogInfo;
        }
コード例 #9
0
        public ClusterCoreDaemon(ActorRef publisher)
        {
            _publisher = publisher;
            SelfUniqueAddress = _cluster.SelfUniqueAddress;
            _vclockNode  = new VectorClock.Node(VclockName(SelfUniqueAddress));
            //TODO: _statsEnabled = PublishStatsInternal.IsFinite;
            var settings = _cluster.Settings;
            var scheduler = _cluster.Scheduler;

            _gossipTaskCancellable = new CancellationTokenSource();
            _gossipTask =
                scheduler.Schedule(
                    settings.PeriodicTasksInitialDelay.Max(settings.GossipInterval), 
                    settings.GossipInterval,
                    Self, 
                    InternalClusterAction.GossipTick.Instance,
                    _gossipTaskCancellable.Token);

            _failureDetectorReaperTaskCancellable = new CancellationTokenSource();
            _failureDetectorReaperTask =
                scheduler.Schedule(
                    settings.PeriodicTasksInitialDelay.Max(settings.UnreachableNodesReaperInterval),
                    settings.UnreachableNodesReaperInterval, 
                    Self, 
                    InternalClusterAction.ReapUnreachableTick.Instance,
                    _failureDetectorReaperTaskCancellable.Token);

            _leaderActionsTaskCancellable = new CancellationTokenSource();
            _leaderActionsTask =
                scheduler.Schedule(
                    settings.PeriodicTasksInitialDelay.Max(settings.LeaderActionsInterval),
                    settings.LeaderActionsInterval,
                    Self,
                    InternalClusterAction.LeaderActionsTick.Instance,
                    _leaderActionsTaskCancellable.Token);

            if (settings.PublishStatsInterval != null)
            {
                _publishStatsTaskTaskCancellable = new CancellationTokenSource();
                _publishStatsTask =
                            scheduler.Schedule(
                                settings.PeriodicTasksInitialDelay.Max(settings.PublishStatsInterval.Value),
                                settings.PublishStatsInterval.Value,
                                Self,
                                InternalClusterAction.PublishStatsTick.Instance,
                                _publishStatsTaskTaskCancellable.Token);                
            }
        }