Class: ActiveJob::Uniqueness::Strategies::Base
- Inherits:
-
Object
- Object
- ActiveJob::Uniqueness::Strategies::Base
- Defined in:
- lib/active_job/uniqueness/strategies/base.rb
Overview
Base strategy is not supposed to actually be used as uniqueness strategy.
Direct Known Subclasses
UntilAndWhileExecuting, UntilExecuted, UntilExecuting, UntilExpired, WhileExecuting
Defined Under Namespace
Modules: LockingOnEnqueue
Constant Summary collapse
- ACTIVEJOB_SUPPORTS_THROW_ABORT =
ActiveJob.gem_version >= Gem::Version.new('5.0')
Instance Attribute Summary collapse
-
#job ⇒ Object
readonly
Returns the value of attribute job.
-
#lock_key ⇒ Object
readonly
Returns the value of attribute lock_key.
-
#lock_ttl ⇒ Object
readonly
Returns the value of attribute lock_ttl.
-
#on_conflict ⇒ Object
readonly
Returns the value of attribute on_conflict.
-
#on_redis_connection_error ⇒ Object
readonly
Returns the value of attribute on_redis_connection_error.
Class Method Summary collapse
-
.locks_on_enqueue? ⇒ Boolean
Whether the strategy acquires its #lock_key at enqueue time.
Instance Method Summary collapse
- #after_perform ⇒ Object
- #around_enqueue(block) ⇒ Object
- #around_perform(block) ⇒ Object
- #before_enqueue ⇒ Object
- #before_perform ⇒ Object
-
#initialize(job:) ⇒ Base
constructor
A new instance of Base.
- #lock(resource:, ttl:, event: :lock) ⇒ Object
- #unlock(resource:, event: :unlock) ⇒ Object
Constructor Details
#initialize(job:) ⇒ Base
Returns a new instance of Base.
28 29 30 31 32 33 34 |
# File 'lib/active_job/uniqueness/strategies/base.rb', line 28 def initialize(job:) @lock_key = job.lock_key @lock_ttl = (job.[:lock_ttl] || config.lock_ttl).to_i * 1000 # ms @on_conflict = job.[:on_conflict] || config.on_conflict @on_redis_connection_error = job.[:on_redis_connection_error] || config.on_redis_connection_error @job = job end |
Instance Attribute Details
#job ⇒ Object (readonly)
Returns the value of attribute job.
14 15 16 |
# File 'lib/active_job/uniqueness/strategies/base.rb', line 14 def job @job end |
#lock_key ⇒ Object (readonly)
Returns the value of attribute lock_key.
14 15 16 |
# File 'lib/active_job/uniqueness/strategies/base.rb', line 14 def lock_key @lock_key end |
#lock_ttl ⇒ Object (readonly)
Returns the value of attribute lock_ttl.
14 15 16 |
# File 'lib/active_job/uniqueness/strategies/base.rb', line 14 def lock_ttl @lock_ttl end |
#on_conflict ⇒ Object (readonly)
Returns the value of attribute on_conflict.
14 15 16 |
# File 'lib/active_job/uniqueness/strategies/base.rb', line 14 def on_conflict @on_conflict end |
#on_redis_connection_error ⇒ Object (readonly)
Returns the value of attribute on_redis_connection_error.
14 15 16 |
# File 'lib/active_job/uniqueness/strategies/base.rb', line 14 def on_redis_connection_error @on_redis_connection_error end |
Class Method Details
.locks_on_enqueue? ⇒ Boolean
Whether the strategy acquires its #lock_key at enqueue time.
Sidekiq queue/set cleanup only releases enqueue locks, so a strategy whose #lock_key is instead a runtime guard (e.g. :while_executing) must report false to avoid freeing the guard of a currently executing instance. Built-in enqueue-locking strategies signal this by including LockingOnEnqueue; a custom strategy that locks on enqueue by other means can override this method to return true.
24 25 26 |
# File 'lib/active_job/uniqueness/strategies/base.rb', line 24 def self.locks_on_enqueue? include?(LockingOnEnqueue) end |
Instance Method Details
#after_perform ⇒ Object
66 67 68 |
# File 'lib/active_job/uniqueness/strategies/base.rb', line 66 def after_perform # Expected to be overriden in the descendant strategy end |
#around_enqueue(block) ⇒ Object
56 57 58 59 |
# File 'lib/active_job/uniqueness/strategies/base.rb', line 56 def around_enqueue(block) # Expected to be overriden in the descendant strategy block.call end |
#around_perform(block) ⇒ Object
61 62 63 64 |
# File 'lib/active_job/uniqueness/strategies/base.rb', line 61 def around_perform(block) # Expected to be overriden in the descendant strategy block.call end |
#before_enqueue ⇒ Object
48 49 50 |
# File 'lib/active_job/uniqueness/strategies/base.rb', line 48 def before_enqueue # Expected to be overriden in the descendant strategy end |
#before_perform ⇒ Object
52 53 54 |
# File 'lib/active_job/uniqueness/strategies/base.rb', line 52 def before_perform # Expected to be overriden in the descendant strategy end |
#lock(resource:, ttl:, event: :lock) ⇒ Object
36 37 38 39 40 |
# File 'lib/active_job/uniqueness/strategies/base.rb', line 36 def lock(resource:, ttl:, event: :lock) lock_manager.lock(resource, ttl).tap do |result| instrument(event, resource: resource, ttl: ttl) if result end end |
#unlock(resource:, event: :unlock) ⇒ Object
42 43 44 45 46 |
# File 'lib/active_job/uniqueness/strategies/base.rb', line 42 def unlock(resource:, event: :unlock) lock_manager.delete_lock(resource).tap do instrument(event, resource: resource) end end |