Class: Gitlab::SidekiqMiddleware::DuplicateJobs::Strategies::UntilExecuted

Inherits:
DeduplicatesWhenScheduling show all
Defined in:
lib/gitlab/sidekiq_middleware/duplicate_jobs/strategies/until_executed.rb

Overview

This strategy takes a lock before scheduling the job in a queue and removes the lock after the job has executed preventing a new job to be queued while a job is still executing.

Instance Method Summary collapse

Methods inherited from DeduplicatesWhenScheduling

#initialize, #schedule

Methods included from Utils::Override

#extended, extensions, #included, #method_added, #override, #prepended, #queue_verification, verify!

Methods inherited from Base

#initialize, #schedule

Constructor Details

This class inherits a constructor from Gitlab::SidekiqMiddleware::DuplicateJobs::Strategies::DeduplicatesWhenScheduling

Instance Method Details

#perform(job) ⇒ Object



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/gitlab/sidekiq_middleware/duplicate_jobs/strategies/until_executed.rb', line 12

def perform(job)
  job_deleted = false

  super

  yield

  should_reschedule = duplicate_job.should_reschedule?
  # Deleting before rescheduling to make sure we don't deduplicate again.
  duplicate_job.delete!
  job_deleted = true
  duplicate_job.reschedule if should_reschedule
ensure
  duplicate_job.delete! unless job_deleted
end