class SidekiqRobustJob::UniquenessStrategy::Base

Attributes

jobs_repository[R]
lock_ttl_proc[R]
locker[R]
memory_monitor[R]

Public Class Methods

new(locker:, lock_ttl_proc:, jobs_repository:, memory_monitor:) click to toggle source
# File lib/sidekiq_robust_job/uniqueness_strategy/base.rb, line 7
def initialize(locker:, lock_ttl_proc:,  jobs_repository:, memory_monitor:)
  @locker = locker
  @lock_ttl_proc = lock_ttl_proc
  @jobs_repository = jobs_repository
  @memory_monitor = memory_monitor
end

Public Instance Methods

execute(_job) click to toggle source
# File lib/sidekiq_robust_job/uniqueness_strategy/base.rb, line 14
def execute(_job)
  raise "implement me"
end

Private Instance Methods

drop_unprocessed_jobs(job) click to toggle source
# File lib/sidekiq_robust_job/uniqueness_strategy/base.rb, line 33
def drop_unprocessed_jobs(job)
  jobs_repository.drop_unprocessed_jobs_by_digest(
    dropped_by_job_id: job.id,
    digest: job.digest,
    exclude_id: job.id
  )
end
lock(job) { |locked| ... } click to toggle source
# File lib/sidekiq_robust_job/uniqueness_strategy/base.rb, line 41
def lock(job)
  locker.lock(job.digest, lock_ttl_proc.call(job)) { |locked| yield locked }
end
perform_job_and_finalize(job) click to toggle source
# File lib/sidekiq_robust_job/uniqueness_strategy/base.rb, line 20
def perform_job_and_finalize(job)
  begin
    job.call
  rescue StandardError => error
    job.failed(error)
    jobs_repository.save(job)
    raise
  end

  job.completed(memory_monitor: memory_monitor)
  jobs_repository.save(job)
end