diff options
Diffstat (limited to 'lib/gitlab/github_import/importer/single_endpoint_issue_notes_importer.rb')
-rw-r--r-- | lib/gitlab/github_import/importer/single_endpoint_issue_notes_importer.rb | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/lib/gitlab/github_import/importer/single_endpoint_issue_notes_importer.rb b/lib/gitlab/github_import/importer/single_endpoint_issue_notes_importer.rb new file mode 100644 index 00000000000..49569ed52d8 --- /dev/null +++ b/lib/gitlab/github_import/importer/single_endpoint_issue_notes_importer.rb @@ -0,0 +1,54 @@ +# frozen_string_literal: true + +# This importer is used when `github_importer_single_endpoint_notes_import` +# feature flag is on and replaces `IssuesImporter` issue notes import. +# +# It fetches 1 issue's comments at a time using `issue_comments` endpoint, which is +# slower than `NotesImporter` but it makes sure all notes are imported, +# as it can sometimes not be the case for `NotesImporter`, because +# `issues_comments` endpoint it uses can be limited by GitHub API +# to not return all available pages. +module Gitlab + module GithubImport + module Importer + class SingleEndpointIssueNotesImporter + include ParallelScheduling + include SingleEndpointNotesImporting + + def importer_class + NoteImporter + end + + def representation_class + Representation::Note + end + + def sidekiq_worker_class + ImportNoteWorker + end + + def object_type + :note + end + + def collection_method + :issue_comments + end + + private + + def noteables + project.issues.where.not(iid: already_imported_noteables) # rubocop: disable CodeReuse/ActiveRecord + end + + def page_counter_id(issue) + "issue/#{issue.id}/#{collection_method}" + end + + def notes_imported_cache_key + "github-importer/issue/notes/already-imported/#{project.id}" + end + end + end + end +end |