docs: protected void handleAppendResponseOk(RaftMemberContext member, AppendRequest request, AppendResponse response) {
      // Reset the member failure count and update the member's availability status if necessary.
      succeedAttempt(member);
  
      // If replication succeeded then trigger commit futures.
      if (response.succeeded()) {
        updateMatchIndex(member, response);
  
        // If there are more entries to send then attempt to send another commit.
        if (request.prevLogIndex() != response.lastLogIndex() && hasMoreEntries(member)) {
          appendEntries(member);
        }
      }
      // If we've received a greater term, update the term and transition back to follower.
      else if (response.term() > raft.getTerm()) {
        raft.setTerm(response.term());
        raft.setLeader(null);
        raft.transition(RaftServer.Role.FOLLOWER);
      }
      // If the response failed, the follower should have provided the correct last index in their log. This helps
      // us converge on the matchIndex faster than by simply decrementing nextIndex one index at a time.
      else {
        resetMatchIndex(member, response);
        resetNextIndex(member, response);
  
        // If there are more entries to send then attempt to send another commit.
        if (response.lastLogIndex() != request.prevLogIndex() && hasMoreEntries(member)) {
          appendEntries(member);
        }
      }
    }