diff options
Diffstat (limited to 'app/workers/gitlab/jira_import/stage')
6 files changed, 150 insertions, 0 deletions
diff --git a/app/workers/gitlab/jira_import/stage/finish_import_worker.rb b/app/workers/gitlab/jira_import/stage/finish_import_worker.rb new file mode 100644 index 00000000000..5b1661d68c6 --- /dev/null +++ b/app/workers/gitlab/jira_import/stage/finish_import_worker.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true + +module Gitlab + module JiraImport + module Stage + class FinishImportWorker # rubocop:disable Scalability/IdempotentWorker + include Gitlab::JiraImport::ImportWorker + + private + + def import(project) + project.after_import + ensure + project.import_data.becomes(JiraImportData).finish_import! + project.import_data.save! + end + end + end + end +end diff --git a/app/workers/gitlab/jira_import/stage/import_attachments_worker.rb b/app/workers/gitlab/jira_import/stage/import_attachments_worker.rb new file mode 100644 index 00000000000..3b209a279b5 --- /dev/null +++ b/app/workers/gitlab/jira_import/stage/import_attachments_worker.rb @@ -0,0 +1,22 @@ +# frozen_string_literal: true + +module Gitlab + module JiraImport + module Stage + class ImportAttachmentsWorker # rubocop:disable Scalability/IdempotentWorker + include Gitlab::JiraImport::ImportWorker + + private + + def import(project) + # fake a attahcments import workers for now. + # new job waiter will have zero jobs_remaining by default, so it will just pass on to next stage + fake_waiter = JobWaiter.new + + project.import_state.refresh_jid_expiration + Gitlab::JiraImport::AdvanceStageWorker.perform_async(project.id, { fake_waiter.key => fake_waiter.jobs_remaining }, :notes) + end + end + end + end +end diff --git a/app/workers/gitlab/jira_import/stage/import_issues_worker.rb b/app/workers/gitlab/jira_import/stage/import_issues_worker.rb new file mode 100644 index 00000000000..79ed8e1f2da --- /dev/null +++ b/app/workers/gitlab/jira_import/stage/import_issues_worker.rb @@ -0,0 +1,22 @@ +# frozen_string_literal: true + +module Gitlab + module JiraImport + module Stage + class ImportIssuesWorker # rubocop:disable Scalability/IdempotentWorker + include Gitlab::JiraImport::ImportWorker + + private + + def import(project) + # fake issues import workers for now + # new job waiter will have zero jobs_remaining by default, so it will just pass on to next stage + jobs_waiter = JobWaiter.new + project.import_state.refresh_jid_expiration + + Gitlab::JiraImport::AdvanceStageWorker.perform_async(project.id, { jobs_waiter.key => jobs_waiter.jobs_remaining }, :attachments) + end + end + end + end +end diff --git a/app/workers/gitlab/jira_import/stage/import_labels_worker.rb b/app/workers/gitlab/jira_import/stage/import_labels_worker.rb new file mode 100644 index 00000000000..b96bb1bbdda --- /dev/null +++ b/app/workers/gitlab/jira_import/stage/import_labels_worker.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true + +module Gitlab + module JiraImport + module Stage + class ImportLabelsWorker # rubocop:disable Scalability/IdempotentWorker + include Gitlab::JiraImport::ImportWorker + + private + + def import(project) + # fake labels import workers for now + # new job waiter will have zero jobs_remaining by default, so it will just pass on to next stage + fake_waiter = JobWaiter.new + Gitlab::JiraImport::AdvanceStageWorker.perform_async(project.id, { fake_waiter.key => fake_waiter.jobs_remaining }, :issues) + end + end + end + end +end diff --git a/app/workers/gitlab/jira_import/stage/import_notes_worker.rb b/app/workers/gitlab/jira_import/stage/import_notes_worker.rb new file mode 100644 index 00000000000..9eef0d31a8c --- /dev/null +++ b/app/workers/gitlab/jira_import/stage/import_notes_worker.rb @@ -0,0 +1,22 @@ +# frozen_string_literal: true + +module Gitlab + module JiraImport + module Stage + class ImportNotesWorker # rubocop:disable Scalability/IdempotentWorker + include Gitlab::JiraImport::ImportWorker + + private + + def import(project) + # fake notes import workers for now + # new job waiter will have zero jobs_remaining by default, so it will just pass on to next stage + jobs_waiter = JobWaiter.new + project.import_state.refresh_jid_expiration + + Gitlab::JiraImport::AdvanceStageWorker.perform_async(project.id, { jobs_waiter.key => jobs_waiter.jobs_remaining }, :finish) + end + end + end + end +end diff --git a/app/workers/gitlab/jira_import/stage/start_import_worker.rb b/app/workers/gitlab/jira_import/stage/start_import_worker.rb new file mode 100644 index 00000000000..8abbfab647b --- /dev/null +++ b/app/workers/gitlab/jira_import/stage/start_import_worker.rb @@ -0,0 +1,44 @@ +# frozen_string_literal: true + +module Gitlab + module JiraImport + module Stage + class StartImportWorker # rubocop:disable Scalability/IdempotentWorker + include ApplicationWorker + include ProjectStartImport + include ProjectImportOptions + include Gitlab::JiraImport::QueueOptions + + attr_reader :project + + def perform(project_id) + @project = Project.find_by(id: project_id) # rubocop: disable CodeReuse/ActiveRecord + + return unless start_import + + Gitlab::Import::SetAsyncJid.set_jid(project) + + Gitlab::JiraImport::Stage::ImportLabelsWorker.perform_async(project.id) + end + + private + + def start_import + return false unless project + return false if Feature.disabled?(:jira_issue_import, project) + return true if start(project.import_state) + + Gitlab::Import::Logger.info( + { + project_id: project.id, + project_path: project.full_path, + state: project&.import_status, + message: 'inconsistent state while importing' + } + ) + false + end + end + end + end +end |