| 753 | } |
| 754 | |
| 755 | void proccessNewLeaderResponse(ReplicaId fromReplicaId, LogsDBRequest& request, const NewLeaderResp& response) { |
| 756 | LOG_DEBUG(_env, "Received NEW_LEADER response %s from replicaId %s", response, fromReplicaId); |
| 757 | ALWAYS_ASSERT(_state == LeadershipState::BECOMING_NOMINEE, "In state %s Received NEW_LEADER response %s", _state, response); |
| 758 | auto& state = *_electionState; |
| 759 | ALWAYS_ASSERT(_electionState->requestIds[fromReplicaId.u8] == request.msg.id); |
| 760 | auto result = TernError(response.result); |
| 761 | switch (result) { |
| 762 | case TernError::NO_ERROR: |
| 763 | _electionState->requestIds[request.replicaId.u8] = ReqResp::CONFIRMED_REQ_ID; |
| 764 | _electionState->lastReleased = std::max(_electionState->lastReleased, response.lastReleased); |
| 765 | _reqResp.eraseRequest(request.msg.id); |
| 766 | _tryProgressToDigest(); |
| 767 | break; |
| 768 | case TernError::LEADER_PREEMPTED: |
| 769 | resetLeaderElection(); |
| 770 | break; |
| 771 | default: |
| 772 | LOG_ERROR(_env, "Unexpected result %s in NEW_LEADER message, %s", result, response); |
| 773 | break; |
| 774 | } |
| 775 | } |
| 776 | |
| 777 | void proccessNewLeaderConfirmResponse(ReplicaId fromReplicaId, LogsDBRequest& request, const NewLeaderConfirmResp& response) { |
| 778 | ALWAYS_ASSERT(_state == LeadershipState::CONFIRMING_LEADERSHIP, "In state %s Received NEW_LEADER_CONFIRM response %s", _state, response); |
no test coverage detected