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); } }); }
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))); }
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)")*/ }); }
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()); } }
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."); } }
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))); }