Exemplo n.º 1
0
        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();
                }
            }
        }
Exemplo n.º 2
0
        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);
         }
     });
 }