예제 #1
0
        public void Send(ElectionMessage.MasterIsResigningOk message, IPEndPoint endPoint)
        {
            Ensure.NotNull(message, nameof(message));
            Ensure.NotNull(endPoint, nameof(endPoint));

            _client.Post(endPoint.ToHttpUrl(EndpointExtensions.HTTP_SCHEMA, "/elections/masterisresigningok"),
                         Codec.Json.To(new ElectionMessageDto.MasterIsResigningOkDto(message)),
                         Codec.Json.ContentType,
                         r => {
                /*ignore*/
            },
                         e => {
                /*Log.ErrorException(e, "Error occured while writing request (elections/masterisresigningok)")*/
            });
        }
예제 #2
0
 public void Handle(ElectionMessage.MasterIsResigningOk message)
 {
     Log.Debug(
         "ELECTIONS: MASTER IS RESIGNING OK FROM [{serverInternalHttp},{serverId:B}] M=[{masterInternalHttp},{masterId:B}]).",
         message.ServerInternalHttp,
         message.ServerId,
         message.MasterInternalHttp,
         message.MasterId);
     if (_masterIsResigningOkReceived.Add(message.ServerId) &&
         _masterIsResigningOkReceived.Count == _clusterSize / 2 + 1)
     {
         Log.Debug(
             "ELECTIONS: MAJORITY OF ACCEPTANCE OF RESIGNATION OF MASTER [{masterInternalHttp},{masterId:B}]. NOW INITIATING MASTER RESIGNATION.",
             message.MasterInternalHttp, message.MasterId);
         _publisher.Publish(new SystemMessage.InitiateMasterResignation());
     }
 }
예제 #3
0
 public void Handle(ClientMessage.ResignNode message)
 {
     if (_master != null && _nodeInfo.InstanceId == _master)
     {
         _resigningMasterInstanceId = _master;
         var masterIsResigningMessageOk = new ElectionMessage.MasterIsResigningOk(
             _nodeInfo.InstanceId,
             _nodeInfo.InternalHttp,
             _nodeInfo.InstanceId,
             _nodeInfo.InternalHttp);
         _masterIsResigningOkReceived.Clear();
         Handle(masterIsResigningMessageOk);
         SendToAllExceptMe(new ElectionMessage.MasterIsResigning(
                               _nodeInfo.InstanceId, _nodeInfo.InternalHttp));
     }
     else
     {
         Log.Info("ELECTIONS: ONLY MASTER RESIGNATION IS SUPPORTED AT THE MOMENT. IGNORING RESIGNATION.");
     }
 }
예제 #4
0
        public void Handle(ElectionMessage.MasterIsResigning message)
        {
            if (_nodeInfo.IsReadOnlyReplica)
            {
                Log.Debug(
                    "ELECTIONS: THIS NODE IS A READ ONLY REPLICA. IT IS NOT ALLOWED TO VOTE AND THEREFORE NOT ALLOWED TO ACKNOWLEDGE MASTER RESIGNATION.");
                return;
            }

            Log.Debug("ELECTIONS: MASTER IS RESIGNING [{masterInternalHttp}, {masterId:B}].",
                      message.MasterInternalHttp, message.MasterId);
            var masterIsResigningMessageOk = new ElectionMessage.MasterIsResigningOk(
                message.MasterId,
                message.MasterInternalHttp,
                _nodeInfo.InstanceId,
                _nodeInfo.InternalHttp);

            _resigningMasterInstanceId = message.MasterId;
            _publisher.Publish(new HttpMessage.SendOverHttp(message.MasterInternalHttp, masterIsResigningMessageOk,
                                                            _timeProvider.LocalTime.Add(LeaderElectionProgressTimeout)));
        }