workhorse 0.3.8 → 0.3.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -0
- data/LICENSE +1 -1
- data/README.md +1 -1
- data/VERSION +1 -1
- data/lib/workhorse/poller.rb +10 -8
- data/test/workhorse/poller_test.rb +20 -0
- data/test/workhorse/worker_test.rb +3 -3
- data/workhorse.gemspec +4 -4
- metadata +3 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4bcaee406798a7da933fd0a48c7e556447a589a6be42f73d259902ae3a69b339
|
4
|
+
data.tar.gz: 2201639a37267a0980b873d0398222fbd0da0ac0a672244180a37b7e0b5265aa
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4f7813c2d5945df4a9a4757b2dd3ac2f270da19888b5d47cff50a3e5321bef65ded194d0775b30719754b20018c4050dc46ee0f602f445871661edf400a4afda
|
7
|
+
data.tar.gz: db1da7961291a3eefd8c066fe9b36e8e0d4ce0fcb673968229b364b79e5fbe37e06574f506f1a1024487dbb1d73d667b92a14726d9adcce8791962a850505d8a
|
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,11 @@
|
|
2
2
|
|
3
3
|
## Unreleased
|
4
4
|
|
5
|
+
## 0.3.9 – 2019-03-09
|
6
|
+
|
7
|
+
* Fixed error where jobs without queue were blocked by a locked/running job
|
8
|
+
that also was without a queue
|
9
|
+
|
5
10
|
## 0.3.8 – 2018-12-19
|
6
11
|
|
7
12
|
* Fixed incompatibility in the combination of Oracle DB and Arel < 7.0.0
|
data/LICENSE
CHANGED
data/README.md
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.3.
|
1
|
+
0.3.9
|
data/lib/workhorse/poller.rb
CHANGED
@@ -187,21 +187,23 @@ module Workhorse
|
|
187
187
|
# Returns an Array of queue names for which a job may be posted
|
188
188
|
#
|
189
189
|
# This is done in multiple steps. First, all queues with jobs that are in
|
190
|
-
# progress are removed
|
191
|
-
# post jobs. Third, extract the
|
192
|
-
# return them in an Array.
|
190
|
+
# progress are removed, with the exception of the nil queue. Second, we
|
191
|
+
# restrict to only queues for which we may post jobs. Third, we extract the
|
192
|
+
# queue names of the remaining queues and return them in an Array.
|
193
193
|
#
|
194
194
|
# @return [Array] an array of unique queue names
|
195
195
|
def valid_queues
|
196
196
|
select = valid_ordered_select_id
|
197
197
|
|
198
|
-
# Restrict queues that are currently in progress
|
198
|
+
# Restrict queues that are currently in progress, except for the nil
|
199
|
+
# queue, where jobs may run in parallel
|
199
200
|
bad_states = [Workhorse::DbJob::STATE_LOCKED, Workhorse::DbJob::STATE_STARTED]
|
200
|
-
|
201
|
-
|
201
|
+
bad_queues_select = table.project(table[:queue])
|
202
|
+
.where(table[:queue].not_eq(nil))
|
203
|
+
.where(table[:state].in(bad_states))
|
202
204
|
# .distinct is not chainable in older Arel versions
|
203
|
-
|
204
|
-
select = select.where(table[:queue].not_in(
|
205
|
+
bad_queues_select.distinct
|
206
|
+
select = select.where(table[:queue].not_in(bad_queues_select))
|
205
207
|
|
206
208
|
# Restrict queues to valid ones as indicated by the options given to the
|
207
209
|
# worker
|
@@ -47,4 +47,24 @@ class Workhorse::PollerTest < WorkhorseTest
|
|
47
47
|
|
48
48
|
assert_equal %w[q1 q2], w.poller.send(:valid_queues)
|
49
49
|
end
|
50
|
+
|
51
|
+
def test_no_queues
|
52
|
+
w = Workhorse::Worker.new(polling_interval: 60)
|
53
|
+
assert_equal [], w.poller.send(:valid_queues)
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_nil_queues
|
57
|
+
w = Workhorse::Worker.new(pool_size: 2, polling_interval: 60)
|
58
|
+
|
59
|
+
3.times do
|
60
|
+
Workhorse.enqueue BasicJob.new(sleep_time: 2)
|
61
|
+
end
|
62
|
+
jobs = Workhorse::DbJob.all
|
63
|
+
|
64
|
+
assert_equal [nil], w.poller.send(:valid_queues)
|
65
|
+
|
66
|
+
jobs[0].mark_locked!(42)
|
67
|
+
|
68
|
+
assert_equal [nil], w.poller.send(:valid_queues)
|
69
|
+
end
|
50
70
|
end
|
@@ -162,10 +162,10 @@ class Workhorse::WorkerTest < WorkhorseTest
|
|
162
162
|
end
|
163
163
|
|
164
164
|
def test_polling_interval
|
165
|
-
|
166
|
-
|
165
|
+
assert Workhorse::Worker.new(polling_interval: 1)
|
166
|
+
assert Workhorse::Worker.new(polling_interval: 1.1)
|
167
167
|
err = assert_raises do
|
168
|
-
|
168
|
+
Workhorse::Worker.new(polling_interval: 1.12)
|
169
169
|
end
|
170
170
|
assert_equal 'Polling interval must be a multiple of 0.1.', err.message
|
171
171
|
end
|
data/workhorse.gemspec
CHANGED
@@ -1,16 +1,16 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
-
# stub: workhorse 0.3.
|
2
|
+
# stub: workhorse 0.3.9 ruby lib
|
3
3
|
|
4
4
|
Gem::Specification.new do |s|
|
5
5
|
s.name = "workhorse".freeze
|
6
|
-
s.version = "0.3.
|
6
|
+
s.version = "0.3.9"
|
7
7
|
|
8
8
|
s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
|
9
9
|
s.require_paths = ["lib".freeze]
|
10
10
|
s.authors = ["Sitrox".freeze]
|
11
|
-
s.date = "
|
11
|
+
s.date = "2019-04-09"
|
12
12
|
s.files = [".gitignore".freeze, ".releaser_config".freeze, ".rubocop.yml".freeze, ".travis.yml".freeze, "CHANGELOG.md".freeze, "FAQ.md".freeze, "Gemfile".freeze, "LICENSE".freeze, "README.md".freeze, "RUBY_VERSION".freeze, "Rakefile".freeze, "VERSION".freeze, "bin/rubocop".freeze, "lib/generators/workhorse/install_generator.rb".freeze, "lib/generators/workhorse/templates/bin/workhorse.rb".freeze, "lib/generators/workhorse/templates/config/initializers/workhorse.rb".freeze, "lib/generators/workhorse/templates/create_table_jobs.rb".freeze, "lib/workhorse.rb".freeze, "lib/workhorse/daemon.rb".freeze, "lib/workhorse/daemon/shell_handler.rb".freeze, "lib/workhorse/db_job.rb".freeze, "lib/workhorse/enqueuer.rb".freeze, "lib/workhorse/jobs/cleanup_succeeded_jobs.rb".freeze, "lib/workhorse/jobs/run_rails_op.rb".freeze, "lib/workhorse/performer.rb".freeze, "lib/workhorse/poller.rb".freeze, "lib/workhorse/pool.rb".freeze, "lib/workhorse/worker.rb".freeze, "test/lib/db_schema.rb".freeze, "test/lib/jobs.rb".freeze, "test/lib/test_helper.rb".freeze, "test/workhorse/enqueuer_test.rb".freeze, "test/workhorse/performer_test.rb".freeze, "test/workhorse/poller_test.rb".freeze, "test/workhorse/pool_test.rb".freeze, "test/workhorse/worker_test.rb".freeze, "workhorse.gemspec".freeze]
|
13
|
-
s.rubygems_version = "
|
13
|
+
s.rubygems_version = "3.0.3".freeze
|
14
14
|
s.summary = "Multi-threaded job backend with database queuing for ruby.".freeze
|
15
15
|
s.test_files = ["test/lib/db_schema.rb".freeze, "test/lib/jobs.rb".freeze, "test/lib/test_helper.rb".freeze, "test/workhorse/enqueuer_test.rb".freeze, "test/workhorse/performer_test.rb".freeze, "test/workhorse/poller_test.rb".freeze, "test/workhorse/pool_test.rb".freeze, "test/workhorse/worker_test.rb".freeze]
|
16
16
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: workhorse
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sitrox
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-04-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -211,8 +211,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
211
211
|
- !ruby/object:Gem::Version
|
212
212
|
version: '0'
|
213
213
|
requirements: []
|
214
|
-
|
215
|
-
rubygems_version: 2.7.7
|
214
|
+
rubygems_version: 3.0.3
|
216
215
|
signing_key:
|
217
216
|
specification_version: 4
|
218
217
|
summary: Multi-threaded job backend with database queuing for ruby.
|