summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorGabriel Mazetto <brodock@gmail.com>2017-11-22 06:35:53 +0100
committerGabriel Mazetto <brodock@gmail.com>2017-11-23 14:19:36 +0100
commit65bd6868d014e23c21e4d5ecff468124b2c72f4c (patch)
tree16a9413dfe0564e0454e924b5974308f7b5488c5 /app
parent4b87c1afaa652d72fa6aeeb4fe52fa3883e2f4c8 (diff)
downloadgitlab-ce-65bd6868d014e23c21e4d5ecff468124b2c72f4c.tar.gz
Codestyle changes and Added Exclusive Lease to hashed storage migration
Diffstat (limited to 'app')
-rw-r--r--app/services/projects/hashed_storage/migrate_attachments_service.rb2
-rw-r--r--app/workers/project_migrate_hashed_storage_worker.rb26
2 files changed, 26 insertions, 2 deletions
diff --git a/app/services/projects/hashed_storage/migrate_attachments_service.rb b/app/services/projects/hashed_storage/migrate_attachments_service.rb
index b58b6f57ed7..93f44110605 100644
--- a/app/services/projects/hashed_storage/migrate_attachments_service.rb
+++ b/app/services/projects/hashed_storage/migrate_attachments_service.rb
@@ -33,7 +33,7 @@ module Projects
end
# Create hashed storage base path folder
- FileUtils.mkdir_p(File.expand_path('..', new_path))
+ FileUtils.mkdir_p(File.dirname(new_path))
FileUtils.mv(old_path, new_path)
logger.info("Migrated project attachments from '#{old_path}' to '#{new_path}' (PROJECT_ID=#{project.id})")
diff --git a/app/workers/project_migrate_hashed_storage_worker.rb b/app/workers/project_migrate_hashed_storage_worker.rb
index ca276d7801c..e3ecd6bc950 100644
--- a/app/workers/project_migrate_hashed_storage_worker.rb
+++ b/app/workers/project_migrate_hashed_storage_worker.rb
@@ -2,10 +2,34 @@ class ProjectMigrateHashedStorageWorker
include Sidekiq::Worker
include DedicatedSidekiqQueue
+ LEASE_TIMEOUT = 30.seconds.to_i
+
def perform(project_id)
project = Project.find_by(id: project_id)
return if project.nil? || project.pending_delete?
- ::Projects::HashedStorageMigrationService.new(project, logger).execute
+ uuid = try_obtain_lease_for(project_id)
+ if uuid
+ ::Projects::HashedStorageMigrationService.new(project, logger).execute
+ else
+ false
+ end
+ rescue => ex
+ cancel_lease_for(project_id, uuid)
+ raise ex
+ end
+
+ private
+
+ def try_obtain_lease_for(project_id)
+ Gitlab::ExclusiveLease.new(lease_key(project_id), timeout: LEASE_TIMEOUT).try_obtain
+ end
+
+ def lease_key(project_id)
+ "project_migrate_hashed_storage_worker:#{project_id}"
+ end
+
+ def cancel_lease_for(project_id, uuid)
+ Gitlab::ExclusiveLease.cancel(lease_key(project_id), uuid)
end
end