From 1408ded7299803e388d0b15a43f58cbd721268aa Mon Sep 17 00:00:00 2001 From: Myron Marston Date: Fri, 8 Mar 2013 12:29:14 -0800 Subject: [PATCH] Fix worker de-registration so it works against latest master. - The script name changed (deregister_worker => deregister_workers) - Add a better interface (Qless::Client#deregister_workers). - Deal with the fact that one worker can be talking to many clients. --- lib/qless.rb | 7 ++++++- lib/qless/worker.rb | 11 +++++++++-- spec/integration/qless_spec.rb | 2 +- spec/unit/worker_spec.rb | 2 +- 4 files changed, 17 insertions(+), 5 deletions(-) diff --git a/lib/qless.rb b/lib/qless.rb index a1c7a6ca..520e1bca 100644 --- a/lib/qless.rb +++ b/lib/qless.rb @@ -162,7 +162,7 @@ def initialize(options = {}) @config = Config.new(self) ['cancel', 'config', 'complete', 'depends', 'fail', 'failed', 'get', 'heartbeat', 'jobs', 'peek', 'pop', 'priority', 'put', 'queues', 'recur', 'retry', 'stats', 'tag', 'track', 'workers', 'pause', 'unpause', - 'deregister_worker'].each do |f| + 'deregister_workers'].each do |f| self.instance_variable_set("@_#{f}", Qless.lua_script_cache.script_for(f, @redis)) end @@ -193,6 +193,11 @@ def untrack(jid) def tags(offset=0, count=100) JSON.parse(@_tag.call([], ['top', offset, count])) end + + def deregister_workers(*worker_names) + _deregister_workers.call([], worker_names) + end + private def assert_minimum_redis_version(version) diff --git a/lib/qless/worker.rb b/lib/qless/worker.rb index 1eb5f638..ba13dee4 100644 --- a/lib/qless/worker.rb +++ b/lib/qless/worker.rb @@ -104,7 +104,7 @@ def work(interval = 5.0) end end ensure - #make sure the worker deregisters on shutdown + # make sure the worker deregisters on shutdown deregister end @@ -147,8 +147,15 @@ def unpause_processing end private + def deregister - @client._deregister_workers.call([],[Qless.worker_name]) + uniq_clients.each do |client| + client.deregister_workers(Qless.worker_name) + end + end + + def uniq_clients + @uniq_clients ||= @job_reserver.queues.map(&:client).uniq end def retryable_exception_classes(job) diff --git a/spec/integration/qless_spec.rb b/spec/integration/qless_spec.rb index 7f74c9ce..2307c2a0 100644 --- a/spec/integration/qless_spec.rb +++ b/spec/integration/qless_spec.rb @@ -1704,7 +1704,7 @@ def registered_worker_names q.pop expect { - client._deregister_workers.call([], [q.worker_name]) + client.deregister_workers(q.worker_name) }.to change { registered_worker_names }.from([q.worker_name]).to([]) end diff --git a/spec/unit/worker_spec.rb b/spec/unit/worker_spec.rb index 38c8cbde..3b3c2810 100644 --- a/spec/unit/worker_spec.rb +++ b/spec/unit/worker_spec.rb @@ -4,7 +4,7 @@ module Qless describe Worker do - let(:reserver) { fire_double("Qless::JobReservers::Ordered", description: "job reserver") } + let(:reserver) { fire_double("Qless::JobReservers::Ordered", description: "job reserver", queues: []) } let(:client ) { stub.as_null_object } def procline