public void Handle(ElectionMessage.PrepareOk msg) { if (_state == ElectionsState.Shutdown) { return; } if (_state != ElectionsState.ElectingLeader) { return; } if (msg.View != _lastAttemptedView) { return; } Log.Debug("ELECTIONS: (V={view}) PREPARE_OK FROM {nodeInfo}.", msg.View, FormatNodeInfo(msg.ServerInternalHttp, msg.ServerId, msg.LastCommitPosition, msg.WriterCheckpoint, msg.ChaserCheckpoint, msg.EpochNumber, msg.EpochPosition, msg.EpochId)); if (!_prepareOkReceived.ContainsKey(msg.ServerId)) { _prepareOkReceived.Add(msg.ServerId, msg); if (_prepareOkReceived.Count == _clusterSize / 2 + 1) { ShiftToRegLeader(); } } }
public void Send(ElectionMessage.PrepareOk message, IPEndPoint endPoint) { Ensure.NotNull(message, "message"); Ensure.NotNull(endPoint, "endPoint"); _client.Post(endPoint.ToHttpUrl("/elections/prepareok"), Codec.Json.To(new ElectionMessageDto.PrepareOkDto(message)), Codec.Json.ContentType, r => { /*ignore*/ }, e => { /*Log.ErrorException(e, "Error occured while writing request (elections/prepareok)")*/ }); }
public void SendPrepareOk(ElectionMessage.PrepareOk prepareOk, EndPoint destinationEndpoint, DateTime deadline) { SendPrepareOkAsync(prepareOk.View, prepareOk.ServerId, prepareOk.ServerHttpEndPoint, prepareOk.EpochNumber, prepareOk.EpochPosition, prepareOk.EpochId, prepareOk.EpochLeaderInstanceId, prepareOk.LastCommitPosition, prepareOk.WriterCheckpoint, prepareOk.ChaserCheckpoint, prepareOk.NodePriority, prepareOk.ClusterInfo, deadline) .ContinueWith(r => { if (r.Exception != null) { Log.Information(r.Exception, "Prepare OK Send Failed to {Server}", destinationEndpoint); } }); }