Commit 12257b62 authored by Mikołaj Wawrzyniak's avatar Mikołaj Wawrzyniak

Merge branch '356794_distribute_github_import_workload' into 'master'

Distribute GitHub import workload

See merge request gitlab-org/gitlab!83616
parents 41a6b2c3 4cb458c9
---
name: distribute_github_parallel_import
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/83616
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/356800
milestone: '14.10'
type: development
group: group::source code
default_enabled: false
...@@ -209,7 +209,11 @@ module Gitlab ...@@ -209,7 +209,11 @@ module Gitlab
# Default batch settings for parallel import (can be redefined in Importer classes) # Default batch settings for parallel import (can be redefined in Importer classes)
# Example: { size: 100, delay: 1.minute } # Example: { size: 100, delay: 1.minute }
def parallel_import_batch def parallel_import_batch
{} if Feature.enabled?(:distribute_github_parallel_import, default_enabled: :yaml)
{ size: 1000, delay: 1.minute }
else
{}
end
end end
def abort_on_failure def abort_on_failure
......
...@@ -98,9 +98,9 @@ RSpec.describe Gitlab::GithubImport::Importer::DiffNotesImporter do ...@@ -98,9 +98,9 @@ RSpec.describe Gitlab::GithubImport::Importer::DiffNotesImporter do
.to receive(:each_object_to_import) .to receive(:each_object_to_import)
.and_yield(github_comment) .and_yield(github_comment)
expect(Gitlab::GithubImport::ImportDiffNoteWorker) expect(Gitlab::GithubImport::ImportDiffNoteWorker).to receive(:bulk_perform_in).with(1.second, [
.to receive(:perform_async) [project.id, an_instance_of(Hash), an_instance_of(String)]
.with(project.id, an_instance_of(Hash), an_instance_of(String)) ], batch_size: 1000, batch_delay: 1.minute)
waiter = importer.parallel_import waiter = importer.parallel_import
......
...@@ -91,9 +91,9 @@ RSpec.describe Gitlab::GithubImport::Importer::IssuesImporter do ...@@ -91,9 +91,9 @@ RSpec.describe Gitlab::GithubImport::Importer::IssuesImporter do
.to receive(:each_object_to_import) .to receive(:each_object_to_import)
.and_yield(github_issue) .and_yield(github_issue)
expect(Gitlab::GithubImport::ImportIssueWorker) expect(Gitlab::GithubImport::ImportIssueWorker).to receive(:bulk_perform_in).with(1.second, [
.to receive(:perform_async) [project.id, an_instance_of(Hash), an_instance_of(String)]
.with(project.id, an_instance_of(Hash), an_instance_of(String)) ], batch_size: 1000, batch_delay: 1.minute)
waiter = importer.parallel_import waiter = importer.parallel_import
......
...@@ -118,9 +118,9 @@ RSpec.describe Gitlab::GithubImport::Importer::LfsObjectsImporter do ...@@ -118,9 +118,9 @@ RSpec.describe Gitlab::GithubImport::Importer::LfsObjectsImporter do
expect(service).to receive(:execute).and_return([lfs_download_object]) expect(service).to receive(:execute).and_return([lfs_download_object])
end end
expect(Gitlab::GithubImport::ImportLfsObjectWorker) expect(Gitlab::GithubImport::ImportLfsObjectWorker).to receive(:bulk_perform_in).with(1.second, [
.to receive(:perform_async) [project.id, an_instance_of(Hash), an_instance_of(String)]
.with(project.id, an_instance_of(Hash), an_instance_of(String)) ], batch_size: 1000, batch_delay: 1.minute)
waiter = importer.parallel_import waiter = importer.parallel_import
......
...@@ -84,9 +84,9 @@ RSpec.describe Gitlab::GithubImport::Importer::NotesImporter do ...@@ -84,9 +84,9 @@ RSpec.describe Gitlab::GithubImport::Importer::NotesImporter do
.to receive(:each_object_to_import) .to receive(:each_object_to_import)
.and_yield(github_comment) .and_yield(github_comment)
expect(Gitlab::GithubImport::ImportNoteWorker) expect(Gitlab::GithubImport::ImportNoteWorker).to receive(:bulk_perform_in).with(1.second, [
.to receive(:perform_async) [project.id, an_instance_of(Hash), an_instance_of(String)]
.with(project.id, an_instance_of(Hash), an_instance_of(String)) ], batch_size: 1000, batch_delay: 1.minute)
waiter = importer.parallel_import waiter = importer.parallel_import
......
...@@ -22,10 +22,6 @@ RSpec.describe Gitlab::GithubImport::ParallelScheduling do ...@@ -22,10 +22,6 @@ RSpec.describe Gitlab::GithubImport::ParallelScheduling do
def collection_method def collection_method
:issues :issues
end end
def parallel_import_batch
{ size: 10, delay: 1.minute }
end
end end
end end
...@@ -261,7 +257,7 @@ RSpec.describe Gitlab::GithubImport::ParallelScheduling do ...@@ -261,7 +257,7 @@ RSpec.describe Gitlab::GithubImport::ParallelScheduling do
let(:repr_class) { double(:representation) } let(:repr_class) { double(:representation) }
let(:worker_class) { double(:worker) } let(:worker_class) { double(:worker) }
let(:object) { double(:object) } let(:object) { double(:object) }
let(:batch_size) { 200 } let(:batch_size) { 1000 }
let(:batch_delay) { 1.minute } let(:batch_delay) { 1.minute }
before do before do
...@@ -281,7 +277,6 @@ RSpec.describe Gitlab::GithubImport::ParallelScheduling do ...@@ -281,7 +277,6 @@ RSpec.describe Gitlab::GithubImport::ParallelScheduling do
context 'with multiple objects' do context 'with multiple objects' do
before do before do
allow(importer).to receive(:parallel_import_batch) { { size: batch_size, delay: batch_delay } }
expect(importer).to receive(:each_object_to_import).and_yield(object).and_yield(object).and_yield(object) expect(importer).to receive(:each_object_to_import).and_yield(object).and_yield(object).and_yield(object)
end end
...@@ -295,6 +290,25 @@ RSpec.describe Gitlab::GithubImport::ParallelScheduling do ...@@ -295,6 +290,25 @@ RSpec.describe Gitlab::GithubImport::ParallelScheduling do
importer.parallel_import importer.parallel_import
end end
end end
context 'when distribute_github_parallel_import feature flag is disabled' do
before do
stub_feature_flags(distribute_github_parallel_import: false)
end
it 'imports data in parallel' do
expect(importer)
.to receive(:each_object_to_import)
.and_yield(object)
expect(worker_class)
.to receive(:perform_async)
.with(project.id, { title: 'Foo' }, an_instance_of(String))
expect(importer.parallel_import)
.to be_an_instance_of(Gitlab::JobWaiter)
end
end
end end
describe '#each_object_to_import' do describe '#each_object_to_import' do
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment