From 1363ca12f1f07c634647cf55c4c16b7401098673 Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Wed, 18 Mar 2020 12:09:13 +0000 Subject: Add latest changes from gitlab-org/gitlab@master --- .../gitlab/github_import/advance_stage_worker.rb | 4 +- .../gitlab/jira_import/advance_stage_worker.rb | 26 +++++++++++++ .../jira_import/stage/finish_import_worker.rb | 20 ++++++++++ .../jira_import/stage/import_attachments_worker.rb | 22 +++++++++++ .../jira_import/stage/import_issues_worker.rb | 22 +++++++++++ .../jira_import/stage/import_labels_worker.rb | 20 ++++++++++ .../jira_import/stage/import_notes_worker.rb | 22 +++++++++++ .../jira_import/stage/start_import_worker.rb | 44 ++++++++++++++++++++++ 8 files changed, 178 insertions(+), 2 deletions(-) create mode 100644 app/workers/gitlab/jira_import/advance_stage_worker.rb create mode 100644 app/workers/gitlab/jira_import/stage/finish_import_worker.rb create mode 100644 app/workers/gitlab/jira_import/stage/import_attachments_worker.rb create mode 100644 app/workers/gitlab/jira_import/stage/import_issues_worker.rb create mode 100644 app/workers/gitlab/jira_import/stage/import_labels_worker.rb create mode 100644 app/workers/gitlab/jira_import/stage/import_notes_worker.rb create mode 100644 app/workers/gitlab/jira_import/stage/start_import_worker.rb (limited to 'app/workers/gitlab') diff --git a/app/workers/gitlab/github_import/advance_stage_worker.rb b/app/workers/gitlab/github_import/advance_stage_worker.rb index 8fbf88a1762..8bbfb10ed6e 100644 --- a/app/workers/gitlab/github_import/advance_stage_worker.rb +++ b/app/workers/gitlab/github_import/advance_stage_worker.rb @@ -13,8 +13,6 @@ module Gitlab sidekiq_options dead: false feature_category :importers - private - # The known importer stages and their corresponding Sidekiq workers. STAGES = { issues_and_diff_notes: Stage::ImportIssuesAndDiffNotesWorker, @@ -23,6 +21,8 @@ module Gitlab finish: Stage::FinishImportWorker }.freeze + private + def next_stage_worker(next_stage) STAGES.fetch(next_stage.to_sym) end diff --git a/app/workers/gitlab/jira_import/advance_stage_worker.rb b/app/workers/gitlab/jira_import/advance_stage_worker.rb new file mode 100644 index 00000000000..1b6fc54151e --- /dev/null +++ b/app/workers/gitlab/jira_import/advance_stage_worker.rb @@ -0,0 +1,26 @@ +# frozen_string_literal: true + +module Gitlab + module JiraImport + class AdvanceStageWorker # rubocop:disable Scalability/IdempotentWorker + include ApplicationWorker + include QueueOptions + include ::Gitlab::Import::AdvanceStage + + # The known importer stages and their corresponding Sidekiq workers. + STAGES = { + labels: Gitlab::JiraImport::Stage::ImportLabelsWorker, + issues: Gitlab::JiraImport::Stage::ImportIssuesWorker, + attachments: Gitlab::JiraImport::Stage::ImportAttachmentsWorker, + notes: Gitlab::JiraImport::Stage::ImportNotesWorker, + finish: Gitlab::JiraImport::Stage::FinishImportWorker + }.freeze + + private + + def next_stage_worker(next_stage) + STAGES.fetch(next_stage.to_sym) + end + end + end +end 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 -- cgit v1.2.3