From 05338784de0b5c38f5dac2671d6aceedee557a04 Mon Sep 17 00:00:00 2001 From: Artem Napolskih Date: Thu, 11 Jul 2019 12:53:39 +0500 Subject: [PATCH 1/4] fix nil error in ensure block which hides exceptions https://github.com/seomoz/qless/pull/201/commits/e3c41e0c492ebe44553401a23ccb0b737cf083d3 --- lib/qless/worker/base.rb | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/qless/worker/base.rb b/lib/qless/worker/base.rb index c91e72bd..dcb26dab 100644 --- a/lib/qless/worker/base.rb +++ b/lib/qless/worker/base.rb @@ -200,6 +200,9 @@ def on_current_job_lock_lost(&block) end def listen_for_lost_lock + # Ensure we always have an array + # for the ensure block + subscribers = [] subscribers = uniq_clients.map do |client| Subscriber.start(client, "ql:w:#{client.worker_name}", log: @log) do |_, message| if message['event'] == 'lock_lost' From 73a57e5bdab602e92ba90580c5d0bbf8fa7faa07 Mon Sep 17 00:00:00 2001 From: Artem Napolskih Date: Thu, 11 Jul 2019 13:01:58 +0500 Subject: [PATCH 2/4] Subscriber deadlock when redis returns an error. Fixes a deadlock in the start method when the thread fails to connect to the channel for various reasons. https://github.com/seomoz/qless/pull/201/commits/f171d24bd111e0cd26c1ce965abf0db08454d8f6 --- lib/qless/subscriber.rb | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/lib/qless/subscriber.rb b/lib/qless/subscriber.rb index 35a17598..ceabd170 100644 --- a/lib/qless/subscriber.rb +++ b/lib/qless/subscriber.rb @@ -29,18 +29,28 @@ def start queue = ::Queue.new @thread = Thread.start do - @listener_redis.subscribe(@channel, @my_channel) do |on| - on.subscribe do |channel| - queue.push(:subscribed) if channel == @channel - end + begin + @listener_redis.subscribe(@channel, @my_channel) do |on| + on.subscribe do |channel| + # insert nil into the queue to indicate we've + # successfully subscribed + queue << nil if channel == @channel + end - on.message do |channel, message| - handle_message(channel, message) + on.message do |channel, message| + handle_message(channel, message) + end end + # Watch for any exceptions so we don't block forever if + # subscribing to the channel fails + rescue Exception => e + queue << e end end - queue.pop + if (exception = queue.pop) + raise exception + end end def stop From 786d6933b29e48e298f447b559a283e097a73b84 Mon Sep 17 00:00:00 2001 From: Artem Napolskih Date: Thu, 11 Jul 2019 13:32:58 +0500 Subject: [PATCH 3/4] Add Ruby 2.5 to Travis --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 617a4097..96d67538 100644 --- a/.travis.yml +++ b/.travis.yml @@ -15,3 +15,4 @@ rvm: - 2.2.7 - 2.3.5 - 2.4.2 + - 2.5 From 686fca69094e2e9912c54d98d3c2ecfa64287ed5 Mon Sep 17 00:00:00 2001 From: Artem Napolskih Date: Thu, 11 Jul 2019 13:39:30 +0500 Subject: [PATCH 4/4] Remove bundled with --- Gemfile | 2 - Gemfile.lock | 167 -------------------------------------------------- qless.gemspec | 16 ++--- 3 files changed, 9 insertions(+), 176 deletions(-) delete mode 100644 Gemfile.lock diff --git a/Gemfile b/Gemfile index 93910527..270a49b5 100644 --- a/Gemfile +++ b/Gemfile @@ -14,8 +14,6 @@ group :development do gem 'pry' gem 'pry-byebug', :platforms => [:ruby_20, :ruby_21] gem 'pry-stack_explorer' - gem 'rake' - gem 'rspec' gem 'rspec-fire' gem 'rubocop' gem 'simplecov' diff --git a/Gemfile.lock b/Gemfile.lock deleted file mode 100644 index 3d3ce390..00000000 --- a/Gemfile.lock +++ /dev/null @@ -1,167 +0,0 @@ -PATH - remote: . - specs: - qless (0.11.0) - metriks (~> 0.9) - redis (>= 2.2, < 4.0.0.rc1) - rusage (~> 0.2.0) - sentry-raven (~> 0.15.6) - sinatra (>= 1.3, < 2.1) - statsd-ruby (~> 1.3) - thin (~> 1.6) - thor (~> 0.19.1) - vegas (~> 0.1.11) - -GEM - remote: http://rubygems.org/ - specs: - ast (2.3.0) - atomic (1.1.99) - avl_tree (1.2.1) - atomic (~> 1.1) - binding_of_caller (0.7.2) - debug_inspector (>= 0.0.1) - byebug (2.7.0) - columnize (~> 0.3) - debugger-linecache (~> 1.2) - cane (2.6.2) - parallel - capybara (1.1.4) - mime-types (>= 1.16) - nokogiri (>= 1.3.3) - rack (>= 1.0.0) - rack-test (>= 0.5.4) - selenium-webdriver (~> 2.0) - xpath (~> 0.1.4) - childprocess (0.8.0) - ffi (~> 1.0, >= 1.0.11) - coderay (1.1.0) - columnize (0.3.6) - daemons (1.2.3) - debug_inspector (0.0.2) - debugger (1.6.2) - columnize (>= 0.3.1) - debugger-linecache (~> 1.2.0) - debugger-ruby_core_source (~> 1.2.3) - debugger-linecache (1.2.0) - debugger-ruby_core_source (1.2.3) - diff-lcs (1.2.4) - eventmachine (1.0.9.1) - faraday (0.13.1) - multipart-post (>= 1.2, < 3) - faye-websocket (0.4.7) - eventmachine (>= 0.12.0) - ffi (1.9.18) - hitimes (1.2.6) - http_parser.rb (0.5.3) - method_source (0.8.2) - metriks (0.9.9.8) - atomic (~> 1.0) - avl_tree (~> 1.2.0) - hitimes (~> 1.1) - mime-types (1.25) - mini_portile (0.5.1) - multi_json (1.12.2) - multipart-post (2.0.0) - nokogiri (1.6.0) - mini_portile (~> 0.5.0) - parallel (1.4.1) - parser (2.4.0.2) - ast (~> 2.3) - poltergeist (1.0.3) - capybara (~> 1.1) - childprocess (~> 0.3) - faye-websocket (~> 0.4.4) - http_parser.rb (~> 0.5.3) - multi_json (~> 1.0) - powerpack (0.1.1) - pry (0.10.1) - coderay (~> 1.1.0) - method_source (~> 0.8.1) - slop (~> 3.4) - pry-byebug (1.3.3) - byebug (~> 2.7) - pry (~> 0.10) - pry-stack_explorer (0.4.9.2) - binding_of_caller (>= 0.7) - pry (>= 0.9.11) - rack (1.6.4) - rack-protection (1.5.3) - rack - rack-test (0.6.2) - rack (>= 1.0) - rainbow (2.2.2) - rake - rake (10.1.0) - redis (3.3.5) - rspec (2.14.1) - rspec-core (~> 2.14.0) - rspec-expectations (~> 2.14.0) - rspec-mocks (~> 2.14.0) - rspec-core (2.14.5) - rspec-expectations (2.14.3) - diff-lcs (>= 1.1.3, < 2.0) - rspec-fire (1.2.0) - rspec (~> 2.11) - rspec-mocks (2.14.3) - rubocop (0.48.1) - parser (>= 2.3.3.1, < 3.0) - powerpack (~> 0.1) - rainbow (>= 1.99.1, < 3.0) - ruby-progressbar (~> 1.7) - unicode-display_width (~> 1.0, >= 1.0.1) - ruby-progressbar (1.9.0) - rubyzip (1.2.1) - rusage (0.2.0) - selenium-webdriver (2.53.4) - childprocess (~> 0.5) - rubyzip (~> 1.0) - websocket (~> 1.0) - sentry-raven (0.15.6) - faraday (>= 0.7.6) - simplecov (0.7.1) - multi_json (~> 1.0) - simplecov-html (~> 0.7.1) - simplecov-html (0.7.1) - sinatra (1.4.8) - rack (~> 1.5) - rack-protection (~> 1.4) - tilt (>= 1.3, < 3) - slop (3.6.0) - statsd-ruby (1.4.0) - thin (1.6.4) - daemons (~> 1.0, >= 1.0.9) - eventmachine (~> 1.0, >= 1.0.4) - rack (~> 1.0) - thor (0.19.4) - tilt (2.0.8) - timecop (0.7.1) - unicode-display_width (1.3.0) - vegas (0.1.11) - rack (>= 1.0.0) - websocket (1.2.5) - xpath (0.1.4) - nokogiri (~> 1.3) - -PLATFORMS - ruby - -DEPENDENCIES - byebug - cane - debugger - poltergeist (~> 1.0.0) - pry - pry-byebug - pry-stack_explorer - qless! - rake - rspec - rspec-fire - rubocop - simplecov - thin - timecop - -BUNDLED WITH - 1.16.0 diff --git a/qless.gemspec b/qless.gemspec index c49419dd..8a6c76b1 100644 --- a/qless.gemspec +++ b/qless.gemspec @@ -36,14 +36,16 @@ language-specific extension will also remain up to date. s.test_files = s.files.grep(/^(test|spec|features)\//) s.require_paths = ['lib'] - s.add_dependency 'metriks', '~> 0.9' + s.add_dependency 'metriks', '>= 0.9' s.add_dependency 'redis', ['>= 2.2', '< 4.0.0.rc1'] - s.add_dependency 'rusage', '~> 0.2.0' - s.add_dependency 'sentry-raven', '~> 0.15.6' + s.add_dependency 'rusage', '>= 0.2.0' + s.add_dependency 'sentry-raven', '>= 0.15.6' s.add_dependency 'sinatra', ['>= 1.3', '< 2.1'] - s.add_dependency 'statsd-ruby', '~> 1.3' - s.add_dependency 'thin', '~> 1.6' - s.add_dependency 'thor', '~> 0.19.1' - s.add_dependency 'vegas', '~> 0.1.11' + s.add_dependency 'statsd-ruby', '>= 1.3' + s.add_dependency 'thin', '>= 1.6' + s.add_dependency 'thor', '>= 0.19.1' + s.add_dependency 'vegas', '>= 0.1.11' + s.add_development_dependency 'rake', '~> 10.1' + s.add_development_dependency 'rspec', '~> 2.14' end