MCPcopy Create free account
hub / github.com/XTXMarkets/ternfs / proccessRecoveryWriteResponse

Method proccessRecoveryWriteResponse

cpp/core/LogsDB.cpp:832–855  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

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())) {

Callers 1

Calls 2

eraseRequestMethod · 0.80
TernErrorEnum · 0.70

Tested by

no test coverage detected