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