Class: OnlineMigrations::ExponentialLockRetrier
- Inherits:
-
LockRetrier
- Object
- LockRetrier
- OnlineMigrations::ExponentialLockRetrier
- Defined in:
- lib/online_migrations/lock_retrier.rb
Overview
LockRetrier
implementation that uses exponential delay with jitter between tries
and constant lock timeout for each try
Instance Attribute Summary collapse
-
#attempts ⇒ Integer
readonly
LockRetrier API implementation.
Instance Method Summary collapse
-
#delay(attempt) ⇒ Numeric
LockRetrier API implementation.
-
#initialize(attempts:, base_delay:, max_delay:, lock_timeout: nil) ⇒ ExponentialLockRetrier
constructor
Create a new ExponentialLockRetrier instance.
-
#lock_timeout(_attempt) ⇒ Numeric
LockRetrier API implementation.
Methods inherited from LockRetrier
Constructor Details
#initialize(attempts:, base_delay:, max_delay:, lock_timeout: nil) ⇒ ExponentialLockRetrier
Create a new ExponentialLockRetrier instance
194 195 196 197 198 199 200 |
# File 'lib/online_migrations/lock_retrier.rb', line 194 def initialize(attempts:, base_delay:, max_delay:, lock_timeout: nil) super() @attempts = attempts @base_delay = base_delay @max_delay = max_delay @lock_timeout = lock_timeout end |
Instance Attribute Details
#attempts ⇒ Integer (readonly)
LockRetrier API implementation
185 186 187 |
# File 'lib/online_migrations/lock_retrier.rb', line 185 def attempts @attempts end |
Instance Method Details
#delay(attempt) ⇒ Numeric
LockRetrier API implementation
217 218 219 |
# File 'lib/online_migrations/lock_retrier.rb', line 217 def delay(attempt) (rand * [@max_delay, @base_delay * (2**(attempt - 1))].min).ceil end |
#lock_timeout(_attempt) ⇒ Numeric
LockRetrier API implementation
207 208 209 |
# File 'lib/online_migrations/lock_retrier.rb', line 207 def lock_timeout(_attempt) @lock_timeout end |