| 830 | } |
| 831 | |
| 832 | void proccessRecoveryWriteResponse(ReplicaId fromReplicaId, LogsDBRequest& request, const LogRecoveryWriteResp& response) { |
| 833 | ALWAYS_ASSERT(_state == LeadershipState::CONFIRMING_REPLICATION, "In state %s Received LOG_RECOVERY_WRITE response %s", _state, response); |
| 834 | auto& state = *_electionState; |
| 835 | auto result = TernError(response.result); |
| 836 | switch (result) { |
| 837 | case TernError::NO_ERROR: |
| 838 | { |
| 839 | ALWAYS_ASSERT(state.lastReleased < request.msg.body.getLogRecoveryWrite().idx); |
| 840 | auto entryOffset = request.msg.body.getLogRecoveryWrite().idx.u64 - state.lastReleased.u64 - 1; |
| 841 | ALWAYS_ASSERT(entryOffset < LogsDB::IN_FLIGHT_APPEND_WINDOW); |
| 842 | ALWAYS_ASSERT(state.recoveryRequests[entryOffset][request.replicaId.u8] == request.msg.id); |
| 843 | state.recoveryRequests[entryOffset][request.replicaId.u8] = 0; |
| 844 | _reqResp.eraseRequest(request.msg.id); |
| 845 | _tryProgressToLeaderConfirm(); |
| 846 | break; |
| 847 | } |
| 848 | case TernError::LEADER_PREEMPTED: |
| 849 | resetLeaderElection(); |
| 850 | break; |
| 851 | default: |
| 852 | LOG_ERROR(_env, "Unexpected result %s in LOG_RECOVERY_READ message, %s", result, response); |
| 853 | break; |
| 854 | } |
| 855 | } |
| 856 | |
| 857 | void proccessNewLeaderRequest(ReplicaId fromReplicaId, uint64_t requestId, const NewLeaderReq& request) { |
| 858 | if (unlikely(fromReplicaId != request.nomineeToken.replica())) { |
no test coverage detected