Ejemplo n.º 1
0
        public void Handle(GossipMessage.GossipSendFailed message)
        {
            var node = _cluster.Members.FirstOrDefault(x => x.Is(message.Recipient));

            if (node == null || !node.IsAlive)
            {
                return;
            }

            if (CurrentMaster != null && node.InstanceId == CurrentMaster.InstanceId)
            {
                Log.Trace("Looks like master [{0}, {1:B}] is DEAD (Gossip send failed), though we wait for TCP to decide.",
                          message.Recipient, node.InstanceId);
                return;
            }
            Log.Trace("Looks like node [{0}] is DEAD (Gossip send failed).", message.Recipient);

            var oldCluster = _cluster;

            _cluster = UpdateCluster(_cluster, x => x.Is(message.Recipient) ? x.Updated(isAlive: false) : x);
            if (_cluster.HasChangedSince(oldCluster))
            {
                LogClusterChange(oldCluster, _cluster, string.Format("gossip send failed to [{0}]", message.Recipient));
            }
            _bus.Publish(new GossipMessage.GossipUpdated(_cluster));
        }
Ejemplo n.º 2
0
        public void Handle(GossipMessage.GossipSendFailed message)
        {
            var node = _cluster.Members.FirstOrDefault(x => x.Is(message.Recipient));

            if (node == null || !node.IsAlive)
            {
                return;
            }

            if (CurrentLeader != null && node.InstanceId == CurrentLeader.InstanceId)
            {
                Log.Information(
                    "Leader [{leaderEndPoint}, {instanceId:B}] appears to be DEAD (Gossip send failed); wait for TCP to decide.",
                    message.Recipient, node.InstanceId);
                return;
            }

            Log.Information("Looks like node [{nodeEndPoint}] is DEAD (Gossip send failed).", message.Recipient);

            var oldCluster = _cluster;

            _cluster = UpdateCluster(_cluster, x => x.Is(message.Recipient)
                                        ? x.Updated(_timeProvider.UtcNow, isAlive: false)
                                        : x,
                                     _timeProvider, DeadMemberRemovalPeriod);
            if (_cluster.HasChangedSince(oldCluster))
            {
                LogClusterChange(oldCluster, _cluster, $"gossip send failed to [{message.Recipient}]");
            }
            _bus.Publish(new GossipMessage.GossipUpdated(_cluster));
        }