code: synchronized void becomeFollower(long newCurrentTerm, @Nullable String newLeader) throws StorageException {
          long currentTerm = store.getCurrentTerm();
  
          checkArgument(currentTerm < newCurrentTerm, "currentTerm:%s newCurrentTerm:%s", currentTerm, newCurrentTerm);
  
          logRoleChange(newCurrentTerm, role, Role.FOLLOWER);
  
          stopHeartbeatTimeout();
  
          store.setCurrentTerm(newCurrentTerm);
  
          setFollowerState(newLeader);
      }
docs: Transition this server from {@link Role#CANDIDATE} or {@link Role#LEADER} to {@link Role#FOLLOWER}.
  <p/>
  <strong>This method is package-private for testing
  reasons only!</strong> It should <strong>never</strong>
  be called in a non-test context!
  
  @param newCurrentTerm new election term for this {@code RaftAlgorithm} instance
  @param newLeader unique id of the leader server if known. {@code null} otherwise