Add hooks to ActiveJob around retries and discards
This commit is contained in:
parent
7e881a18d9
commit
26dc9bc8ee
|
@ -1,3 +1,7 @@
|
||||||
|
* Added `enqueue_retry.active_job`, `retry_stopped.active_job`, and `discard.active_job` hooks.
|
||||||
|
|
||||||
|
*steves*
|
||||||
|
|
||||||
* Allow `assert_performed_with` to be called without a block.
|
* Allow `assert_performed_with` to be called without a block.
|
||||||
|
|
||||||
*bogdanvlviv*
|
*bogdanvlviv*
|
||||||
|
|
|
@ -44,12 +44,22 @@ module ActiveJob
|
||||||
# end
|
# end
|
||||||
def retry_on(*exceptions, wait: 3.seconds, attempts: 5, queue: nil, priority: nil)
|
def retry_on(*exceptions, wait: 3.seconds, attempts: 5, queue: nil, priority: nil)
|
||||||
rescue_from(*exceptions) do |error|
|
rescue_from(*exceptions) do |error|
|
||||||
|
payload = {
|
||||||
|
job: self,
|
||||||
|
adapter: self.class.queue_adapter,
|
||||||
|
error: error,
|
||||||
|
}
|
||||||
|
|
||||||
if executions < attempts
|
if executions < attempts
|
||||||
logger.error "Retrying #{self.class} in #{wait} seconds, due to a #{error.class}. The original exception was #{error.cause.inspect}."
|
ActiveSupport::Notifications.instrument("enqueue_retry.active_job", payload) do
|
||||||
retry_job wait: determine_delay(wait), queue: queue, priority: priority
|
logger.error "Retrying #{self.class} in #{wait} seconds, due to a #{error.class}. The original exception was #{error.cause.inspect}."
|
||||||
|
retry_job wait: determine_delay(wait), queue: queue, priority: priority
|
||||||
|
end
|
||||||
else
|
else
|
||||||
if block_given?
|
if block_given?
|
||||||
yield self, error
|
ActiveSupport::Notifications.instrument("retry_stopped.active_job", payload) do
|
||||||
|
yield self, error
|
||||||
|
end
|
||||||
else
|
else
|
||||||
logger.error "Stopped retrying #{self.class} due to a #{error.class}, which reoccurred on #{executions} attempts. The original exception was #{error.cause.inspect}."
|
logger.error "Stopped retrying #{self.class} due to a #{error.class}, which reoccurred on #{executions} attempts. The original exception was #{error.cause.inspect}."
|
||||||
raise error
|
raise error
|
||||||
|
@ -78,10 +88,18 @@ module ActiveJob
|
||||||
# end
|
# end
|
||||||
def discard_on(*exceptions)
|
def discard_on(*exceptions)
|
||||||
rescue_from(*exceptions) do |error|
|
rescue_from(*exceptions) do |error|
|
||||||
if block_given?
|
payload = {
|
||||||
yield self, error
|
job: self,
|
||||||
else
|
adapter: self.class.queue_adapter,
|
||||||
logger.error "Discarded #{self.class} due to a #{error.class}. The original exception was #{error.cause.inspect}."
|
error: error,
|
||||||
|
}
|
||||||
|
|
||||||
|
ActiveSupport::Notifications.instrument("discard.active_job", payload) do
|
||||||
|
if block_given?
|
||||||
|
yield self, error
|
||||||
|
else
|
||||||
|
logger.error "Discarded #{self.class} due to a #{error.class}. The original exception was #{error.cause.inspect}."
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -458,6 +458,14 @@ Active Job
|
||||||
| `:adapter` | QueueAdapter object processing the job |
|
| `:adapter` | QueueAdapter object processing the job |
|
||||||
| `:job` | Job object |
|
| `:job` | Job object |
|
||||||
|
|
||||||
|
### enqueue_retry.active_job
|
||||||
|
|
||||||
|
| Key | Value |
|
||||||
|
| ------------ | -------------------------------------- |
|
||||||
|
| `:job` | Job object |
|
||||||
|
| `:adapter` | QueueAdapter object processing the job |
|
||||||
|
| `:error` | The error that caused the retry |
|
||||||
|
|
||||||
### perform_start.active_job
|
### perform_start.active_job
|
||||||
|
|
||||||
| Key | Value |
|
| Key | Value |
|
||||||
|
@ -472,6 +480,22 @@ Active Job
|
||||||
| `:adapter` | QueueAdapter object processing the job |
|
| `:adapter` | QueueAdapter object processing the job |
|
||||||
| `:job` | Job object |
|
| `:job` | Job object |
|
||||||
|
|
||||||
|
### retry_stopped.active_job
|
||||||
|
|
||||||
|
| Key | Value |
|
||||||
|
| ------------ | -------------------------------------- |
|
||||||
|
| `:adapter` | QueueAdapter object processing the job |
|
||||||
|
| `:job` | Job object |
|
||||||
|
| `:error` | The error that caused the retry |
|
||||||
|
|
||||||
|
### discard.active_job
|
||||||
|
|
||||||
|
| Key | Value |
|
||||||
|
| ------------ | -------------------------------------- |
|
||||||
|
| `:adapter` | QueueAdapter object processing the job |
|
||||||
|
| `:job` | Job object |
|
||||||
|
| `:error` | The error that caused the discard |
|
||||||
|
|
||||||
Action Cable
|
Action Cable
|
||||||
------------
|
------------
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue