Presently, the retry_on
method allows you to pass a block to be executed after all permitted attempts have failed. I would like to propose expanding this to allow the block to be executed after each attempt.
This could be configurable, such as an additional parameter that allows a developer to specify execute_block_on: [:always|:final_failure|:before_final_failure]
(with better naming eventually) or could be done by passing an argument to the block indicating whether it’s the final failure or not like:
retry_on(SomeException, attempts: 5) do |job, exception, is_final_failure|
if is_final_failure
# do stuff when it's the last time
else
# do stuff after a failed attempt but before retrying
end
end
The specific use-case I have in mind for this is sending failure metrics to a stats system or custom logging for the failures.