From 1d07743bfa9b4413098836d7ccec99d7f4f56ea9 Mon Sep 17 00:00:00 2001 From: Dmitry Bochkarev Date: Fri, 17 Feb 2017 11:47:50 +0500 Subject: [PATCH] =?UTF-8?q?fix:=20=D0=B8=D0=BD=D1=82=D0=B5=D0=B3=D1=80?= =?UTF-8?q?=D0=B0=D1=86=D0=B8=D1=8F=20unique=20=D0=B8=20resque-retry(?= =?UTF-8?q?=D1=81=D0=BE=D1=85=D1=80=D0=B0=D0=BD=D0=B5=D0=BD=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=20=D1=87=D0=B8=D1=81=D0=BB=D0=B0=20=D0=BF=D0=B5=D1=80?= =?UTF-8?q?=D0=B5=D0=B7=D0=B0=D0=BF=D1=83=D1=81=D0=BA=D0=BE=D0=B2)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit https://jira.railsc.ru/browse/SERVICES-1192 --- lib/resque/integration/unique.rb | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/lib/resque/integration/unique.rb b/lib/resque/integration/unique.rb index 542ccdc..9941e4e 100644 --- a/lib/resque/integration/unique.rb +++ b/lib/resque/integration/unique.rb @@ -50,11 +50,27 @@ def scheduled(queue, klass, *args) # Метод вызывает resque-retry когда ставить отложенное задание # здесь мы убираем meta_id из аргументов - def retry_args(*args) - args.shift + def retry_args(meta_id, *args) args end + # Метод вызывает resque-retry, когда записывает/читает число перезапусков + # - во время работы воркера первым аргументом передается meta_id; + # - во время чтения из вебинтерфейса, meta_id не передается, т.к. она выкидывается во время перепостановки + # джоба(см retry_args); + # - если метод вызывается в пользовательском коде(и @meta_id отсутствует), то meta_id нельзя передавать. + def retry_identifier(*args) + if args.size > 0 && @meta_id.is_a?(String) && @meta_id.length > 0 && @meta_id == args.first + args.shift + end + + return if args.empty? + + args = [*args[0..-2], args.last.with_indifferent_access] if args.last.is_a?(Hash) + + Digest::SHA1.hexdigest(obj_to_string(lock_on[*args])) + end + # Get or set proc returning unique arguments def lock_on(&block) if block_given?