Commit 100a7c6b authored by Douwe Maan's avatar Douwe Maan

Merge branch 'ee-38771-ce-backport' into 'master'

Backports EE 38771 changes to CE.

See merge request gitlab-org/gitlab-ce!14782
parents 99806914 5b32a4aa
module ProjectStartImport
def start(project)
if project.import_started? && project.import_jid == self.jid
return true
end
project.import_start
end
end
...@@ -4,6 +4,7 @@ class RepositoryForkWorker ...@@ -4,6 +4,7 @@ class RepositoryForkWorker
include Sidekiq::Worker include Sidekiq::Worker
include Gitlab::ShellAdapter include Gitlab::ShellAdapter
include DedicatedSidekiqQueue include DedicatedSidekiqQueue
include ProjectStartImport
sidekiq_options status_expiration: StuckImportJobsWorker::IMPORT_JOBS_EXPIRATION sidekiq_options status_expiration: StuckImportJobsWorker::IMPORT_JOBS_EXPIRATION
...@@ -37,7 +38,7 @@ class RepositoryForkWorker ...@@ -37,7 +38,7 @@ class RepositoryForkWorker
private private
def start_fork(project) def start_fork(project)
return true if project.import_start return true if start(project)
Rails.logger.info("Project #{project.full_path} was in inconsistent state (#{project.import_status}) while forking.") Rails.logger.info("Project #{project.full_path} was in inconsistent state (#{project.import_status}) while forking.")
false false
......
...@@ -4,6 +4,7 @@ class RepositoryImportWorker ...@@ -4,6 +4,7 @@ class RepositoryImportWorker
include Sidekiq::Worker include Sidekiq::Worker
include DedicatedSidekiqQueue include DedicatedSidekiqQueue
include ExceptionBacktrace include ExceptionBacktrace
include ProjectStartImport
sidekiq_options status_expiration: StuckImportJobsWorker::IMPORT_JOBS_EXPIRATION sidekiq_options status_expiration: StuckImportJobsWorker::IMPORT_JOBS_EXPIRATION
...@@ -34,7 +35,7 @@ class RepositoryImportWorker ...@@ -34,7 +35,7 @@ class RepositoryImportWorker
private private
def start_import(project) def start_import(project)
return true if project.import_start return true if start(project)
Rails.logger.info("Project #{project.full_path} was in inconsistent state (#{project.import_status}) while importing.") Rails.logger.info("Project #{project.full_path} was in inconsistent state (#{project.import_status}) while importing.")
false false
......
...@@ -12,6 +12,28 @@ describe RepositoryForkWorker do ...@@ -12,6 +12,28 @@ describe RepositoryForkWorker do
end end
describe "#perform" do describe "#perform" do
describe 'when a worker was reset without cleanup' do
let(:jid) { '12345678' }
let(:started_project) { create(:project, :repository, :import_started) }
it 'creates a new repository from a fork' do
allow(subject).to receive(:jid).and_return(jid)
expect(shell).to receive(:fork_repository).with(
'/test/path',
project.full_path,
project.repository_storage_path,
fork_project.namespace.full_path
).and_return(true)
subject.perform(
project.id,
'/test/path',
project.full_path,
fork_project.namespace.full_path)
end
end
it "creates a new repository from a fork" do it "creates a new repository from a fork" do
expect(shell).to receive(:fork_repository).with( expect(shell).to receive(:fork_repository).with(
'/test/path', '/test/path',
......
...@@ -6,6 +6,23 @@ describe RepositoryImportWorker do ...@@ -6,6 +6,23 @@ describe RepositoryImportWorker do
subject { described_class.new } subject { described_class.new }
describe '#perform' do describe '#perform' do
context 'when worker was reset without cleanup' do
let(:jid) { '12345678' }
let(:started_project) { create(:project, :import_started, import_jid: jid) }
it 'imports the project successfully' do
allow(subject).to receive(:jid).and_return(jid)
expect_any_instance_of(Projects::ImportService).to receive(:execute)
.and_return({ status: :ok })
expect_any_instance_of(Repository).to receive(:expire_emptiness_caches)
expect_any_instance_of(Project).to receive(:import_finish)
subject.perform(project.id)
end
end
context 'when the import was successful' do context 'when the import was successful' do
it 'imports a project' do it 'imports a project' do
expect_any_instance_of(Projects::ImportService).to receive(:execute) expect_any_instance_of(Projects::ImportService).to receive(:execute)
......
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