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