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)); }
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(SystemMessage.VNodeConnectionEstablished message) { var oldCluster = _cluster; _cluster = UpdateCluster(_cluster, x => x.Is(message.VNodeEndPoint) ? x.Updated(isAlive: true) : x); if (_cluster.HasChangedSince(oldCluster)) { LogClusterChange(oldCluster, _cluster, string.Format("TCP connection established to [{0}]", message.VNodeEndPoint)); } _bus.Publish(new GossipMessage.GossipUpdated(_cluster)); }
public void Handle(ElectionMessage.ElectionsDone message) { var oldCluster = _cluster; _cluster = UpdateCluster(_cluster, x => x.InstanceId == message.Master.InstanceId ? x.Updated(VNodeState.Master) : x.Updated(VNodeState.Unknown)); if (_cluster.HasChangedSince(oldCluster)) { LogClusterChange(oldCluster, _cluster, "Elections Done"); } _bus.Publish(new GossipMessage.GossipUpdated(_cluster)); }
public void Handle(ElectionMessage.ElectionsDone message) { var oldCluster = _cluster; _cluster = UpdateCluster(_cluster, x => x.InstanceId == message.Leader.InstanceId ? x.Updated(_timeProvider.UtcNow, VNodeState.Leader) : x.Updated(_timeProvider.UtcNow, VNodeState.Unknown), _timeProvider, DeadMemberRemovalPeriod); if (_cluster.HasChangedSince(oldCluster)) { LogClusterChange(oldCluster, _cluster, "Elections Done"); } _bus.Publish(new GossipMessage.GossipUpdated(_cluster)); }
public void Handle(SystemMessage.VNodeConnectionEstablished message) { var oldCluster = _cluster; _cluster = UpdateCluster(_cluster, x => x.Is(message.VNodeEndPoint) ? x.Updated( _timeProvider.UtcNow, isAlive: true) : x, _timeProvider, DeadMemberRemovalPeriod, CurrentRole); if (_cluster.HasChangedSince(oldCluster)) { LogClusterChange(oldCluster, _cluster, string.Format("TCP connection established to [{0}]", message.VNodeEndPoint)); } _bus.Publish(new GossipMessage.GossipUpdated(_cluster)); }
public void Handle(SystemMessage.VNodeConnectionLost message) { var node = _cluster.Members.FirstOrDefault(x => x.Is(message.VNodeEndPoint)); if (node == null || !node.IsAlive) { return; } Log.Trace("Looks like node [{0}] is DEAD (TCP connection lost).", message.VNodeEndPoint); var oldCluster = _cluster; _cluster = UpdateCluster(_cluster, x => x.Is(message.VNodeEndPoint) ? x.Updated(isAlive: false) : x); if (_cluster.HasChangedSince(oldCluster)) { LogClusterChange(oldCluster, _cluster, string.Format("TCP connection lost to [{0}]", message.VNodeEndPoint)); } _bus.Publish(new GossipMessage.GossipUpdated(_cluster)); }
public void Handle(GossipMessage.GossipReceived message) { if (_state != GossipState.Working) { return; } var oldCluster = _cluster; _cluster = MergeClusters(_cluster, message.ClusterInfo, message.Server, x => x.InstanceId == NodeInfo.InstanceId ? GetUpdatedMe(x) : x); message.Envelope.ReplyWith(new GossipMessage.SendGossip(_cluster, NodeInfo.InternalHttp)); if (_cluster.HasChangedSince(oldCluster)) { LogClusterChange(oldCluster, _cluster, string.Format("gossip received from [{0}]", message.Server)); } _bus.Publish(new GossipMessage.GossipUpdated(_cluster)); }
public void Handle(GossipMessage.GetGossipReceived message) { if (_state != GossipState.Working) { return; } Log.Information("Gossip Received, The node [{nodeEndpoint}] is not DEAD.", message.Server); var oldCluster = _cluster; _cluster = MergeClusters(_cluster, message.ClusterInfo, message.Server, x => x.InstanceId == NodeInfo.InstanceId ? GetUpdatedMe(x) : x, _timeProvider.UtcNow, NodeInfo, CurrentLeader, AllowedTimeDifference, DeadMemberRemovalPeriod); if (_cluster.HasChangedSince(oldCluster)) { LogClusterChange(oldCluster, _cluster, string.Format("gossip received from [{0}]", message.Server)); } _bus.Publish(new GossipMessage.GossipUpdated(_cluster)); }
public void Handle(GossipMessage.GossipReceived message) { if (_state != GossipState.Working) { return; } var oldCluster = _cluster; _cluster = MergeClusters(_cluster, message.ClusterInfo, message.Server, x => x.InstanceId == NodeInfo.InstanceId ? GetUpdatedMe(x) : x, _timeProvider.UtcNow, NodeInfo, CurrentLeader, AllowedTimeDifference, DeadMemberRemovalPeriod); message.Envelope.ReplyWith(new GossipMessage.SendGossip(_cluster, NodeInfo.InternalHttp)); if (_cluster.HasChangedSince(oldCluster)) { LogClusterChange(oldCluster, _cluster, $"gossip received from [{message.Server}]"); } _bus.Publish(new GossipMessage.GossipUpdated(_cluster)); }
public void Handle(GossipMessage.GetGossipFailed message) { if (_state != GossipState.Working) { return; } Log.Information("Gossip Failed, The node [{nodeEndpoint}] is being marked as DEAD.", 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, string.Format("TCP connection lost to [{0}]", message.Recipient)); } _bus.Publish(new GossipMessage.GossipUpdated(_cluster)); }