| 1506 | } |
| 1507 | |
| 1508 | void proccessLogWriteResponse(ReplicaId fromReplicaId, LogsDBRequest& request, const LogWriteResp& response) { |
| 1509 | if (!_leaderElection.isLeader()) { |
| 1510 | return; |
| 1511 | } |
| 1512 | switch ((TernError)response.result) { |
| 1513 | case TernError::NO_ERROR: |
| 1514 | break; |
| 1515 | case TernError::LEADER_PREEMPTED: |
| 1516 | _leaderElection.resetLeaderElection(); |
| 1517 | return; |
| 1518 | default: |
| 1519 | LOG_ERROR(_env, "Unexpected result from LOG_WRITE response %s", response.result); |
| 1520 | return; |
| 1521 | } |
| 1522 | |
| 1523 | auto logIdx = request.msg.body.getLogWrite().idx; |
| 1524 | ALWAYS_ASSERT(_metadata.getLastReleased() < logIdx); |
| 1525 | auto offset = _entriesStart + (logIdx.u64 - _metadata.getLastReleased().u64 - 1); |
| 1526 | ALWAYS_ASSERT(offset < _entriesEnd); |
| 1527 | offset &= IN_FLIGHT_MASK; |
| 1528 | ALWAYS_ASSERT(_entries[offset].idx == logIdx); |
| 1529 | auto& requestIds = _requestIds[offset]; |
| 1530 | if (requestIds[fromReplicaId.u8] != request.msg.id) { |
| 1531 | LOG_ERROR(_env, "Mismatch in expected requestId in LOG_WRITE response %s", response); |
| 1532 | return; |
| 1533 | } |
| 1534 | requestIds[fromReplicaId.u8] = 0; |
| 1535 | _reqResp.eraseRequest(request.msg.id); |
| 1536 | } |
| 1537 | |
| 1538 | uint64_t entriesInFlight() const { |
| 1539 | return _entriesEnd - _entriesStart; |
no test coverage detected