lib/resque/plugins/retry.rb in resque-retry-0.0.1 vs lib/resque/plugins/retry.rb in resque-retry-0.0.2
- old
+ new
@@ -5,20 +5,22 @@
# If you want your job to retry on failure, simply extend your module/class
# with this module:
#
# class DeliverWebHook
# extend Resque::Plugins::Retry # allows 1 retry by default.
+ # @queue = :web_hooks
#
# def self.perform(url, hook_id, hmac_key)
# heavy_lifting
# end
# end
#
# Easily do something custom:
#
# class DeliverWebHook
# extend Resque::Plugins::Retry
+ # @queue = :web_hooks
#
# @retry_limit = 8 # default: 1
# @retry_delay = 60 # default: 0
#
# # used to build redis key, for counting job attempts.
@@ -41,11 +43,12 @@
# is used as part of the redis key.
#
# @param [Array] args job arguments
# @return [String] job identifier
def identifier(*args)
- args.join('-')
+ args_string = args.join('-')
+ args_string.empty? ? nil : args_string
end
##
# Builds the redis key to be used for keeping state of the job
# attempts.
@@ -128,19 +131,16 @@
retry_exception?(exception.class)
end
##
# Will retry the job.
- #
- # n.b. If your not using the resque-scheduler plugin your job will block
- # your worker, while it sleeps for `retry_delay`.
def try_again(*args)
- if Resque.respond_to?(:enqueue_in) && retry_delay > 0
- Resque.enqueue_in(retry_delay, self, *args_for_retry(*args))
- else
- sleep(retry_delay) if retry_delay > 0
+ if retry_delay <= 0
+ # If the delay is 0, no point passing it through the scheduler
Resque.enqueue(self, *args_for_retry(*args))
+ else
+ Resque.enqueue_in(retry_delay, self, *args_for_retry(*args))
end
end
##
# Resque before_perform hook.
@@ -167,10 +167,10 @@
# Otherwise the retry attempt count is deleted from Redis.
def on_failure_retry(exception, *args)
if retry_criteria_valid?(exception, *args)
try_again(*args)
else
- delete_retry_redis_key(*args)
+ Resque.redis.del(redis_retry_key(*args))
end
end
end
end
\ No newline at end of file