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)); }
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)); }