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

Method proccessRecoveryReadResponse

cpp/core/LogsDB.cpp:798–830  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

796 }
797
798 void proccessRecoveryReadResponse(ReplicaId fromReplicaId, LogsDBRequest& request, const LogRecoveryReadResp& response) {
799 ALWAYS_ASSERT(_state == LeadershipState::DIGESTING_ENTRIES, "In state %s Received LOG_RECOVERY_READ response %s", _state, response);
800 auto& state = *_electionState;
801 auto result = TernError(response.result);
802 switch (result) {
803 case TernError::NO_ERROR:
804 case TernError::LOG_ENTRY_MISSING:
805 {
806 ALWAYS_ASSERT(state.lastReleased < request.msg.body.getLogRecoveryRead().idx);
807 auto entryOffset = request.msg.body.getLogRecoveryRead().idx.u64 - state.lastReleased.u64 - 1;
808 ALWAYS_ASSERT(entryOffset < LogsDB::IN_FLIGHT_APPEND_WINDOW);
809 ALWAYS_ASSERT(state.recoveryRequests[entryOffset][request.replicaId.u8] == request.msg.id);
810 auto& entry = state.recoveryEntries[entryOffset];
811 if (response.value.els.size() != 0) {
812 // we found a record here, we don't care about other answers
813 entry.value = response.value.els;
814 _reqResp.cleanupRequests(state.recoveryRequests[entryOffset]);
815 } else {
816 state.recoveryRequests[entryOffset][request.replicaId.u8] = 0;
817 _reqResp.eraseRequest(request.msg.id);
818 }
819 _tryProgressToReplication();
820 break;
821 }
822 case TernError::LEADER_PREEMPTED:
823 LOG_DEBUG(_env, "Got preempted during recovery by replica %s",fromReplicaId);
824 resetLeaderElection();
825 break;
826 default:
827 LOG_ERROR(_env, "Unexpected result %s in LOG_RECOVERY_READ message, %s", result, response);
828 break;
829 }
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);

Callers 1

Calls 4

cleanupRequestsMethod · 0.80
eraseRequestMethod · 0.80
TernErrorEnum · 0.70
sizeMethod · 0.45

Tested by

no test coverage detected