Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAhmad Sherif <me@ahmadsherif.com>2018-03-26 21:21:49 +0300
committerAhmad Sherif <me@ahmadsherif.com>2018-04-03 17:22:13 +0300
commitddfc661f794ca02654853a9e223b9a5f3fb983ab (patch)
tree36f308e8362e986f4990323216296c02a0eac6ff /app/workers
parent141748929dd006e4b506028e44e7dfdf3988c936 (diff)
Use shard name in Git::GitlabProjects instead of shard path
Closes gitaly#1110
Diffstat (limited to 'app/workers')
-rw-r--r--app/workers/repository_fork_worker.rb44
1 files changed, 33 insertions, 11 deletions
diff --git a/app/workers/repository_fork_worker.rb b/app/workers/repository_fork_worker.rb
index 712a63af532..51fad4faf36 100644
--- a/app/workers/repository_fork_worker.rb
+++ b/app/workers/repository_fork_worker.rb
@@ -1,28 +1,50 @@
-# Gitaly issue: https://gitlab.com/gitlab-org/gitaly/issues/1110
class RepositoryForkWorker
include ApplicationWorker
include Gitlab::ShellAdapter
include ProjectStartImport
include ProjectImportOptions
- def perform(project_id, forked_from_repository_storage_path, source_disk_path)
- project = Project.find(project_id)
+ def perform(*args)
+ target_project_id = args.shift
+ target_project = Project.find(target_project_id)
- return unless start_fork(project)
+ # By v10.8, we should've drained the queue of all jobs using the old arguments.
+ # We can remove the else clause if we're no longer logging the message in that clause.
+ # See https://gitlab.com/gitlab-org/gitaly/issues/1110
+ if args.empty?
+ source_project = target_project.forked_from_project
+ return target_project.mark_import_as_failed('Source project cannot be found.') unless source_project
- Gitlab::Metrics.add_event(:fork_repository,
- source_path: source_disk_path,
- target_path: project.disk_path)
+ fork_repository(target_project, source_project.repository_storage, source_project.disk_path)
+ else
+ Rails.logger.info("Project #{target_project.id} is being forked using old-style arguments.")
+
+ source_repository_storage_path, source_disk_path = *args
- result = gitlab_shell.fork_repository(forked_from_repository_storage_path, source_disk_path,
- project.repository_storage_path, project.disk_path)
- raise "Unable to fork project #{project_id} for repository #{source_disk_path} -> #{project.disk_path}" unless result
+ source_repository_storage_name = Gitlab.config.repositories.storages.find do |_, info|
+ info.legacy_disk_path == source_repository_storage_path
+ end&.first || raise("no shard found for path '#{source_repository_storage_path}'")
- project.after_import
+ fork_repository(target_project, source_repository_storage_name, source_disk_path)
+ end
end
private
+ def fork_repository(target_project, source_repository_storage_name, source_disk_path)
+ return unless start_fork(target_project)
+
+ Gitlab::Metrics.add_event(:fork_repository,
+ source_path: source_disk_path,
+ target_path: target_project.disk_path)
+
+ result = gitlab_shell.fork_repository(source_repository_storage_name, source_disk_path,
+ target_project.repository_storage, target_project.disk_path)
+ raise "Unable to fork project #{target_project.id} for repository #{source_disk_path} -> #{target_project.disk_path}" unless result
+
+ target_project.after_import
+ end
+
def start_fork(project)
return true if start(project)