diff options
author | Nick Thomas <nick@gitlab.com> | 2017-11-28 12:46:39 +0000 |
---|---|---|
committer | Nick Thomas <nick@gitlab.com> | 2017-11-28 12:46:39 +0000 |
commit | 0185d7800b23daecd44abe8e9a0b2672a831e8be (patch) | |
tree | af69f53cbc9842246dd5c67f0985aaea69cbc40a /app/workers | |
parent | 85ff313a1ecf3fc0ffbf1989533d4fa38bd8daf8 (diff) | |
parent | 58f32622ce9c2d08001da7b91065942cdc5a0f4a (diff) | |
download | gitlab-ce-0185d7800b23daecd44abe8e9a0b2672a831e8be.tar.gz |
Merge branch 'hashed-storage-attachments-migration-path' into 'master'
Hashed storage attachments migration path
See merge request gitlab-org/gitlab-ce!15352
Diffstat (limited to 'app/workers')
-rw-r--r-- | app/workers/project_migrate_hashed_storage_worker.rb | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/app/workers/project_migrate_hashed_storage_worker.rb b/app/workers/project_migrate_hashed_storage_worker.rb index ca276d7801c..127aa6b9d7d 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 = lease_for(project_id).try_obtain + if uuid + ::Projects::HashedStorageMigrationService.new(project, logger).execute + else + false + end + rescue => ex + cancel_lease_for(project_id, uuid) if uuid + raise ex + end + + def lease_for(project_id) + Gitlab::ExclusiveLease.new(lease_key(project_id), timeout: LEASE_TIMEOUT) + end + + private + + 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 |