private AlbumListResponse listAlbums(UUID jobId, TokensAndUrlAuthData authData, Optional<String> albumToken)
          throws FailedToListAlbumsException {
    if (retryingExecutor == null || !enableRetrying) {
      try {
        return getOrCreatePhotosInterface(authData).listAlbums(albumToken);
      } catch (IOException | InvalidTokenException | PermissionDeniedException e) {
        throw new FailedToListAlbumsException(e.getMessage(), e);
      }
    }

    try {
        return retryingExecutor.executeOrThrowException(
              format("%s: listAlbums(page=%s)", jobId, albumToken),
              format("listAlbums(page=%s)", albumToken),
              () -> getOrCreatePhotosInterface(authData).listAlbums(albumToken)
      );
    } catch (Exception e) {
      throw new FailedToListAlbumsException(e.getMessage(), e);
    }
  }
Tries to call PhotosInterface.listAlbums, and retries on failure. If unsuccessful, throws a
FailedToListAlbumsException.
extensions/data-transfer/portability-data-transfer-google/src/main/java/org/datatransferproject/datatransfer/google/media/GoogleMediaExporter.java