Class: SidekiqUniqueJobs::Middleware::Server::UniqueJobs

Inherits:
Object
  • Object
show all
Defined in:
lib/sidekiq_unique_jobs/middleware/server/unique_jobs.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#redis_poolObject (readonly)

Returns the value of attribute redis_pool.



8
9
10
# File 'lib/sidekiq_unique_jobs/middleware/server/unique_jobs.rb', line 8

def redis_pool
  @redis_pool
end

#unlock_orderObject (readonly)

Returns the value of attribute unlock_order.



8
9
10
# File 'lib/sidekiq_unique_jobs/middleware/server/unique_jobs.rb', line 8

def unlock_order
  @unlock_order
end

Instance Method Details

#after_yield?Boolean

Returns:

  • (Boolean)


45
46
47
# File 'lib/sidekiq_unique_jobs/middleware/server/unique_jobs.rb', line 45

def after_yield?
  unlock_order == :after_yield
end

#before_yield?Boolean

Returns:

  • (Boolean)


41
42
43
# File 'lib/sidekiq_unique_jobs/middleware/server/unique_jobs.rb', line 41

def before_yield?
  unlock_order == :before_yield
end

#call(worker, item, _queue, redis_pool = nil) ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/sidekiq_unique_jobs/middleware/server/unique_jobs.rb', line 10

def call(worker, item, _queue, redis_pool = nil)
  @redis_pool = redis_pool

  decide_unlock_order(worker.class)
  lock_key = payload_hash(item)
  unlocked = before_yield? ? unlock(lock_key).inspect : 0

  yield
ensure
  if after_yield? || !defined? unlocked || unlocked != 1
    unlock(lock_key)
  end
end

#decide_unlock_order(klass) ⇒ Object



24
25
26
27
28
29
30
# File 'lib/sidekiq_unique_jobs/middleware/server/unique_jobs.rb', line 24

def decide_unlock_order(klass)
  @unlock_order = if unlock_order_configured?(klass)
                    klass.get_sidekiq_options['unique_unlock_order']
                  else
                    default_unlock_order
                  end
end

#default_unlock_orderObject



37
38
39
# File 'lib/sidekiq_unique_jobs/middleware/server/unique_jobs.rb', line 37

def default_unlock_order
  SidekiqUniqueJobs.config.default_unlock_order
end

#unlock_order_configured?(klass) ⇒ Boolean

Returns:

  • (Boolean)


32
33
34
35
# File 'lib/sidekiq_unique_jobs/middleware/server/unique_jobs.rb', line 32

def unlock_order_configured?(klass)
  klass.respond_to?(:get_sidekiq_options) &&
    !klass.get_sidekiq_options['unique_unlock_order'].nil?
end