From 236379c29aefc4a8a7b4acdcf1e4466b5d465d3a Mon Sep 17 00:00:00 2001 From: Pavel Galkin Date: Tue, 5 Jun 2018 12:15:58 +0500 Subject: [PATCH] fix: add expiration time for retry counters MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit https://jira.railsc.ru/browse/PC4-21225 В тест тоже добавил, т.к. неизвестно очищается ли оттуда. --- lib/resque/integration.rb | 18 +++++++++++++++--- spec/resque/integration/unique_spec.rb | 1 + 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/lib/resque/integration.rb b/lib/resque/integration.rb index ccd94a6..1bf4f94 100644 --- a/lib/resque/integration.rb +++ b/lib/resque/integration.rb @@ -98,11 +98,22 @@ def priority? false end - # extend resque-retry + # Extend resque-retry. # # options - Hash - # :limit - Integer (default: 2) - # :delay - Integer (default: 60) + # + # :limit - Integer (default: 2) + # :delay - Integer (default: 60) + # :expire_retry_key_after - Integer (default: 3200), истечение ключа в секундах. Если + # + # t - среднее время выполнения одного джоба + # n - текущее кол-во джобов в очереди + # k - кол-во воркеров + # + # то expire_retry_key_after >= t * n / k + # + # Иначе ключ истечет, прежде чем джоб отработает. + # # # Returns nothing def retrys(options = {}) @@ -114,6 +125,7 @@ def retrys(options = {}) @retry_limit = options.fetch(:limit, 2) @retry_delay = options.fetch(:delay, 60) + @expire_retry_key_after = options.fetch(:expire_retry_key_after, 1.hour.seconds) end # Mark Job as ordered diff --git a/spec/resque/integration/unique_spec.rb b/spec/resque/integration/unique_spec.rb index 1f61614..2ae89ad 100644 --- a/spec/resque/integration/unique_spec.rb +++ b/spec/resque/integration/unique_spec.rb @@ -134,6 +134,7 @@ class JobUniqueWithRetry @retry_limit = 2 @retry_delay = 1 @retry_exceptions = [IOError] + @expire_retry_key_after = 300 unique do |foo_var, params| params[:foo]