workhorse 0.3.6 → 0.3.7
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/.travis.yml +1 -1
- data/CHANGELOG.md +10 -6
- data/VERSION +1 -1
- data/lib/workhorse/poller.rb +18 -14
- data/test/workhorse/worker_test.rb +1 -0
- data/workhorse.gemspec +4 -4
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3d89b887e87a7aad1c081461bd76a98dbf8b0e6f6b0aa6e221936d4d2fe7d745
|
4
|
+
data.tar.gz: 1786cfab5d08fd0c6d51158b2241db9766653e1410e391094b65587f17317fe5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d7563ef29ea4dde18f0b146f905296c0653710d04c0c539a7f50d3d86df48e8a2e82e97e478c46f884e812362d4332287630a44d901ff52e591232b5dceac266
|
7
|
+
data.tar.gz: 7727e7339918c20ab48c719174c4c90484dc723052a141c7bb1dd717e51adda9e6ff2fa622ce2fc555b7725ba9f08eaf369fb0019db5c821c88a3691a46ee1ce
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,31 +1,35 @@
|
|
1
1
|
# Workhorse Change log
|
2
2
|
|
3
|
-
## 0.3.
|
3
|
+
## 0.3.7 – 2018-12-17
|
4
|
+
|
5
|
+
* Fixed Oracle DB compatibility issues for jobs in multiple queues
|
6
|
+
|
7
|
+
## 0.3.6 – 2018-11-14
|
4
8
|
|
5
9
|
* Makes sure all exceptions are caught and handled properly, not only exceptions
|
6
10
|
deriving from `StandardError`. In previous releases, this prevented some
|
7
11
|
exceptions like syntax errors to be handled properly.
|
8
12
|
|
9
|
-
## 0.3.5
|
13
|
+
## 0.3.5 – 2018-10-22
|
10
14
|
|
11
15
|
* Adds global callback `on_exception` that allows custom exception handling /
|
12
16
|
exception notification.
|
13
17
|
|
14
|
-
## 0.3.4
|
18
|
+
## 0.3.4 – 2018-09-24
|
15
19
|
|
16
|
-
*
|
20
|
+
* Fixes #14
|
17
21
|
|
18
22
|
* Fixes crucial bug where multiple jobs of the same queue could be executed
|
19
23
|
simultaneously.
|
20
24
|
|
21
25
|
* Makes `Workhorse::DbJob` attributes accessible for earlier versions of rails.
|
22
26
|
|
23
|
-
## 0.3.3
|
27
|
+
## 0.3.3 – 2018-02-26
|
24
28
|
|
25
29
|
* Adds missing require for `concurrent` library that is required in some
|
26
30
|
versions of Rails
|
27
31
|
|
28
|
-
## 0.3.2
|
32
|
+
## 0.3.2 – 2018-02-23
|
29
33
|
|
30
34
|
* Fixes a migration bug
|
31
35
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.3.
|
1
|
+
0.3.7
|
data/lib/workhorse/poller.rb
CHANGED
@@ -95,7 +95,7 @@ module Workhorse
|
|
95
95
|
union_parts = []
|
96
96
|
valid_queues.each do |queue|
|
97
97
|
# Start with a fresh select, as we now know the allowed queues
|
98
|
-
select =
|
98
|
+
select = valid_ordered_select_id
|
99
99
|
select = select.where(table[:queue].eq(queue))
|
100
100
|
|
101
101
|
# Get the maximum amount possible for no-queue jobs. This gives us the
|
@@ -110,14 +110,17 @@ module Workhorse
|
|
110
110
|
|
111
111
|
# Combine the jobs of each queue in a giant UNION chain. Arel does not
|
112
112
|
# support this directly, as it does not generate parentheses around the
|
113
|
-
# subselects.
|
114
|
-
#
|
115
|
-
#
|
116
|
-
#
|
113
|
+
# subselects. The parentheses are necessary because of the order clauses
|
114
|
+
# contained within.
|
115
|
+
# Additionally, each of the subselects and the final union select is given
|
116
|
+
# an alias to comply with MySQL requirements.
|
117
|
+
# These aliases are added directly instead of using Arel `as`, because it
|
118
|
+
# uses the keyword 'AS' in SQL generated for Oracle, which is invalid for
|
119
|
+
# table aliases.
|
117
120
|
union_query_sql = '('
|
118
|
-
union_query_sql += '(' + union_parts.shift.to_sql + ')'
|
119
|
-
union_parts.
|
120
|
-
union_query_sql += ' UNION (' + part.to_sql +
|
121
|
+
union_query_sql += 'SELECT * FROM (' + union_parts.shift.to_sql + ') union_0'
|
122
|
+
union_parts.each_with_index do |part, idx|
|
123
|
+
union_query_sql += ' UNION SELECT * FROM (' + part.to_sql + ") union_#{idx + 1}"
|
121
124
|
end
|
122
125
|
union_query_sql += ') subselect'
|
123
126
|
|
@@ -127,7 +130,8 @@ module Workhorse
|
|
127
130
|
else
|
128
131
|
select = Arel::SelectManager.new(ActiveRecord::Base, Arel.sql(union_query_sql))
|
129
132
|
end
|
130
|
-
select =
|
133
|
+
select = table.project(Arel.star).where(table[:id].in(select.project(:id)))
|
134
|
+
select = order(select)
|
131
135
|
|
132
136
|
# Limit number of records
|
133
137
|
select = agnostic_limit(select, limit)
|
@@ -145,12 +149,12 @@ module Workhorse
|
|
145
149
|
return Workhorse::DbJob.find_by_sql(select.to_sql)
|
146
150
|
end
|
147
151
|
|
148
|
-
# Returns a fresh Arel select manager containing all waiting jobs,
|
149
|
-
# with {#order}.
|
152
|
+
# Returns a fresh Arel select manager containing the id of all waiting jobs,
|
153
|
+
# ordered with {#order}.
|
150
154
|
#
|
151
155
|
# @return [Arel::SelectManager] the select manager
|
152
|
-
def
|
153
|
-
select = table.project(table[
|
156
|
+
def valid_ordered_select_id
|
157
|
+
select = table.project(table[:id])
|
154
158
|
select = select.where(table[:state].eq(:waiting))
|
155
159
|
select = select.where(table[:perform_at].lteq(Time.now).or(table[:perform_at].eq(nil)))
|
156
160
|
return order(select)
|
@@ -185,7 +189,7 @@ module Workhorse
|
|
185
189
|
#
|
186
190
|
# @return [Array] an array of unique queue names
|
187
191
|
def valid_queues
|
188
|
-
select =
|
192
|
+
select = valid_ordered_select_id
|
189
193
|
|
190
194
|
# Restrict queues that are currently in progress
|
191
195
|
bad_states = [Workhorse::DbJob::STATE_LOCKED, Workhorse::DbJob::STATE_STARTED]
|
@@ -150,6 +150,7 @@ class Workhorse::WorkerTest < WorkhorseTest
|
|
150
150
|
def test_order_with_priorities
|
151
151
|
Workhorse.enqueue BasicJob.new(some_param: 6, sleep_time: 0), priority: 4
|
152
152
|
Workhorse.enqueue BasicJob.new(some_param: 4, sleep_time: 0), priority: 3
|
153
|
+
sleep 1
|
153
154
|
Workhorse.enqueue BasicJob.new(some_param: 5, sleep_time: 0), priority: 3
|
154
155
|
Workhorse.enqueue BasicJob.new(some_param: 3, sleep_time: 0), priority: 2
|
155
156
|
Workhorse.enqueue BasicJob.new(some_param: 2, sleep_time: 0), priority: 1
|
data/workhorse.gemspec
CHANGED
@@ -1,16 +1,16 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
-
# stub: workhorse 0.3.
|
2
|
+
# stub: workhorse 0.3.7 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.7"
|
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 = "2018-
|
11
|
+
s.date = "2018-12-17"
|
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 = "2.7.
|
13
|
+
s.rubygems_version = "2.7.7".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.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sitrox
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-12-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -212,7 +212,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
212
212
|
version: '0'
|
213
213
|
requirements: []
|
214
214
|
rubyforge_project:
|
215
|
-
rubygems_version: 2.7.
|
215
|
+
rubygems_version: 2.7.7
|
216
216
|
signing_key:
|
217
217
|
specification_version: 4
|
218
218
|
summary: Multi-threaded job backend with database queuing for ruby.
|