| 919 | } |
| 920 | |
| 921 | void proccessRecoveryWriteRequest(ReplicaId fromReplicaId, uint64_t requestId, const LogRecoveryWriteReq& request) { |
| 922 | if (unlikely(fromReplicaId != request.nomineeToken.replica())) { |
| 923 | LOG_ERROR(_env, "Nominee token from replica id %s does not have matching replica id. Token: %s", fromReplicaId, request.nomineeToken); |
| 924 | return; |
| 925 | } |
| 926 | auto& response = _reqResp.newResponse(fromReplicaId, requestId); |
| 927 | auto& recoveryWriteResponse = response.msg.body.setLogRecoveryWrite(); |
| 928 | if (request.nomineeToken != _metadata.getNomineeToken()) { |
| 929 | recoveryWriteResponse.result = TernError::LEADER_PREEMPTED; |
| 930 | return; |
| 931 | } |
| 932 | _leaderLastActive = ternNow(); |
| 933 | LogsDBLogEntry entry; |
| 934 | entry.idx = request.idx; |
| 935 | entry.value = request.value.els; |
| 936 | _data.writeLogEntry(entry); |
| 937 | recoveryWriteResponse.result = TernError::NO_ERROR; |
| 938 | } |
| 939 | |
| 940 | TernError writeLogEntries(LeaderToken token, LogIdx newlastReleased, std::vector<LogsDBLogEntry>& entries) { |
| 941 | auto err = _metadata.updateLeaderToken(token); |
no test coverage detected