コード例 #1
0
 public void SendLeaderIsResigningOk(ElectionMessage.LeaderIsResigningOk resigningOk,
                                     EndPoint destinationEndpoint, DateTime deadline)
 {
     SendLeaderIsResigningOkAsync(resigningOk.LeaderId, resigningOk.LeaderHttpEndPoint,
                                  resigningOk.ServerId, resigningOk.ServerHttpEndPoint, deadline).ContinueWith(r => {
         if (r.Exception != null)
         {
             Log.Information(r.Exception, "Leader is Resigning Ok Send Failed to {Server}", destinationEndpoint);
         }
     });
 }
コード例 #2
0
        public void Handle(ElectionMessage.LeaderIsResigning message)
        {
            Log.Information("ELECTIONS: LEADER IS RESIGNING [{leaderHttpEndPoint}, {leaderId:B}].",
                            message.LeaderHttpEndPoint, message.LeaderId);
            var leaderIsResigningMessageOk = new ElectionMessage.LeaderIsResigningOk(
                message.LeaderId,
                message.LeaderHttpEndPoint,
                _memberInfo.InstanceId,
                _memberInfo.HttpEndPoint);

            _resigningLeaderInstanceId = message.LeaderId;
            _publisher.Publish(new GrpcMessage.SendOverGrpc(message.LeaderHttpEndPoint, leaderIsResigningMessageOk,
                                                            _timeProvider.LocalTime.Add(LeaderElectionProgressTimeout)));
        }
コード例 #3
0
        public void Send(ElectionMessage.LeaderIsResigningOk message, IPEndPoint endPoint)
        {
            Ensure.NotNull(message, nameof(message));
            Ensure.NotNull(endPoint, nameof(endPoint));

            _client.Post(endPoint.ToHttpUrl(EndpointExtensions.HTTP_SCHEMA, "/elections/leaderisresigningok"),
                         Codec.Json.To(new ElectionMessageDto.LeaderIsResigningOkDto(message)),
                         Codec.Json.ContentType,
                         r => {
                /*ignore*/
            },
                         e => {
                /*Log.ErrorException(e, "Error occured while writing request (elections/leaderisresigningok)")*/
            });
        }
コード例 #4
0
 public void Handle(ElectionMessage.LeaderIsResigningOk message)
 {
     Log.Information(
         "ELECTIONS: LEADER IS RESIGNING OK FROM [{serverHttpEndPoint},{serverId:B}] M=[{leaderHttpEndPoint},{leaderId:B}]).",
         message.ServerHttpEndPoint,
         message.ServerId,
         message.LeaderHttpEndPoint,
         message.LeaderId);
     if (_leaderIsResigningOkReceived.Add(message.ServerId) &&
         _leaderIsResigningOkReceived.Count == _clusterSize / 2 + 1)
     {
         Log.Information(
             "ELECTIONS: MAJORITY OF ACCEPTANCE OF RESIGNATION OF LEADER [{leaderHttpEndPoint},{leaderId:B}]. NOW INITIATING LEADER RESIGNATION.",
             message.LeaderHttpEndPoint, message.LeaderId);
         _publisher.Publish(new SystemMessage.InitiateLeaderResignation());
     }
 }
コード例 #5
0
 public void Handle(ClientMessage.ResignNode message)
 {
     if (_leader != null && _memberInfo.InstanceId == _leader)
     {
         _resigningLeaderInstanceId = _leader;
         var leaderIsResigningMessageOk = new ElectionMessage.LeaderIsResigningOk(
             _memberInfo.InstanceId,
             _memberInfo.HttpEndPoint,
             _memberInfo.InstanceId,
             _memberInfo.HttpEndPoint);
         _leaderIsResigningOkReceived.Clear();
         Handle(leaderIsResigningMessageOk);
         SendToAllExceptMe(new ElectionMessage.LeaderIsResigning(
                               _memberInfo.InstanceId, _memberInfo.HttpEndPoint));
     }
     else
     {
         Log.Information("ELECTIONS: ONLY LEADER RESIGNATION IS SUPPORTED AT THE MOMENT. IGNORING RESIGNATION.");
     }
 }
コード例 #6
0
        public void Handle(ElectionMessage.LeaderIsResigning message)
        {
            if (_nodeInfo.IsReadOnlyReplica)
            {
                Log.Information(
                    "ELECTIONS: THIS NODE IS A READ ONLY REPLICA. IT IS NOT ALLOWED TO VOTE AND THEREFORE NOT ALLOWED TO ACKNOWLEDGE LEADER RESIGNATION.");
                return;
            }

            Log.Information("ELECTIONS: LEADER IS RESIGNING [{leaderInternalHttp}, {leaderId:B}].",
                            message.LeaderInternalHttp, message.LeaderId);
            var leaderIsResigningMessageOk = new ElectionMessage.LeaderIsResigningOk(
                message.LeaderId,
                message.LeaderInternalHttp,
                _nodeInfo.InstanceId,
                _nodeInfo.InternalHttp);

            _resigningLeaderInstanceId = message.LeaderId;
            _publisher.Publish(new GrpcMessage.SendOverGrpc(message.LeaderInternalHttp, leaderIsResigningMessageOk,
                                                            _timeProvider.LocalTime.Add(LeaderElectionProgressTimeout)));
        }