workhorse 1.2.6 → 1.2.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +15 -0
- data/VERSION +1 -1
- data/lib/generators/workhorse/templates/config/initializers/workhorse.rb +4 -0
- data/lib/workhorse/daemon/shell_handler.rb +11 -6
- data/lib/workhorse/daemon.rb +6 -6
- data/lib/workhorse.rb +6 -0
- data/test/active_job/queue_adapters/workhorse_adapter_test.rb +1 -1
- data/test/workhorse/pool_test.rb +3 -3
- data/workhorse.gemspec +3 -3
- 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: 9e82524a9a4ac0e41a41fe2a1947e3a9e1b58efc96f750f1dfa0ef5ebeeaad39
|
4
|
+
data.tar.gz: a31b41e50239da3e0b1bb416d2e5d1c649083ad7fc30b7b2747e4ec9bd877931
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bcf8c18e959ecfe4ea1db71b3e1cc59a88325b5d70be33220cfe4931f92fb982548514a0f47576f792a33659011a7956f6c0075544681f0f312816428c1f5f20
|
7
|
+
data.tar.gz: 557a630d4681f635bfde37da63838a900f6938b6a38f7b188e94a1c4c293972020e91a183dc173fbe02be4d08ddee9a868074c70d219af65a4a7408050211247
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,20 @@
|
|
1
1
|
# Workhorse Changelog
|
2
2
|
|
3
|
+
## 1.2.8 - 2022-11-23
|
4
|
+
|
5
|
+
* Add configuration option `lock_shell_commands`. This defaults to `true` to
|
6
|
+
retain backwards compatibility and allows turning off file locking for shell
|
7
|
+
commands (e.g. for cases where the locking is done outside of workhorse like
|
8
|
+
in a wrapper script).
|
9
|
+
|
10
|
+
Sitrox reference: #106900.
|
11
|
+
|
12
|
+
## 1.2.7 - 2022-04-07
|
13
|
+
|
14
|
+
* Adapt exit status of shell handler to return with exit code `2` when a worker
|
15
|
+
is in an unexpected status. Previously, this lead to exit code `1` and made it
|
16
|
+
hard to distinguish from fatal errors.
|
17
|
+
|
3
18
|
## 1.2.6 - 2022-01-11
|
4
19
|
|
5
20
|
* Add daemon command `restart-logging`, which sends a `HUP` interrupt to all
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.2.
|
1
|
+
1.2.8
|
@@ -12,6 +12,10 @@ Workhorse.setup do |config|
|
|
12
12
|
# ActiveRecord::Base.transaction(*args, &block)
|
13
13
|
# end
|
14
14
|
|
15
|
+
# Set this to false in order to disable file-based locking for the Workhorse
|
16
|
+
# shell handlers (all the commands such as 'start', 'stop', ...).
|
17
|
+
# config.lock_shell_commands = true
|
18
|
+
|
15
19
|
# Enable and configure this to specify a callback for handling worker
|
16
20
|
# exceptions:
|
17
21
|
#
|
@@ -6,9 +6,13 @@ module Workhorse
|
|
6
6
|
exit 99
|
7
7
|
end
|
8
8
|
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
if Workhorse.lock_shell_commands
|
10
|
+
lockfile_path = options.delete(:lockfile) || 'workhorse.lock'
|
11
|
+
lockfile = File.open(lockfile_path, 'a')
|
12
|
+
lockfile.flock(File::LOCK_EX || File::LOCK_NB)
|
13
|
+
else
|
14
|
+
lockfile = nil
|
15
|
+
end
|
12
16
|
|
13
17
|
daemon = Workhorse::Daemon.new(**options, &block)
|
14
18
|
|
@@ -40,7 +44,7 @@ module Workhorse
|
|
40
44
|
warn "#{e.message}\n#{e.backtrace.join("\n")}"
|
41
45
|
exit 99
|
42
46
|
ensure
|
43
|
-
lockfile
|
47
|
+
lockfile&.flock(File::LOCK_UN)
|
44
48
|
end
|
45
49
|
end
|
46
50
|
|
@@ -78,8 +82,9 @@ Options:
|
|
78
82
|
Show this message
|
79
83
|
|
80
84
|
Exit status:
|
81
|
-
0
|
82
|
-
1
|
85
|
+
0 if OK,
|
86
|
+
1 on fatal errors outside of workhorse,
|
87
|
+
2 if at least one worker has an unexpected status,
|
83
88
|
99 on all other errors.
|
84
89
|
USAGE
|
85
90
|
end
|
data/lib/workhorse/daemon.rb
CHANGED
@@ -46,7 +46,7 @@ module Workhorse
|
|
46
46
|
|
47
47
|
if pid_file && pid
|
48
48
|
warn "Worker ##{worker.id} (#{worker.name}): Already started (PID #{pid})" unless quiet
|
49
|
-
code =
|
49
|
+
code = 2
|
50
50
|
elsif pid_file
|
51
51
|
File.delete pid_file
|
52
52
|
puts "Worker ##{worker.id} (#{worker.name}): Starting (stale pid file)" unless quiet
|
@@ -74,7 +74,7 @@ module Workhorse
|
|
74
74
|
puts "Worker (#{worker.name}) ##{worker.id}: Already stopped (stale PID file)"
|
75
75
|
else
|
76
76
|
warn "Worker (#{worker.name}) ##{worker.id}: Already stopped"
|
77
|
-
code =
|
77
|
+
code = 2
|
78
78
|
end
|
79
79
|
end
|
80
80
|
|
@@ -91,10 +91,10 @@ module Workhorse
|
|
91
91
|
puts "Worker ##{worker.id} (#{worker.name}): Running" unless quiet
|
92
92
|
elsif pid_file
|
93
93
|
warn "Worker ##{worker.id} (#{worker.name}): Not running (stale PID file)" unless quiet
|
94
|
-
code =
|
94
|
+
code = 2
|
95
95
|
else
|
96
96
|
warn "Worker ##{worker.id} (#{worker.name}): Not running" unless quiet
|
97
|
-
code =
|
97
|
+
code = 2
|
98
98
|
end
|
99
99
|
end
|
100
100
|
|
@@ -124,14 +124,14 @@ module Workhorse
|
|
124
124
|
code = 0
|
125
125
|
|
126
126
|
for_each_worker do |worker|
|
127
|
-
|
127
|
+
_pid_file, pid = read_pid(worker)
|
128
128
|
|
129
129
|
begin
|
130
130
|
Process.kill 'HUP', pid
|
131
131
|
puts "Worker (#{worker.name}) ##{worker.id}: Sent signal for restart-logging"
|
132
132
|
rescue Errno::ESRCH
|
133
133
|
warn "Worker (#{worker.name}) ##{worker.id}: Could not send signal for restart-logging, process not found"
|
134
|
-
code =
|
134
|
+
code = 2
|
135
135
|
end
|
136
136
|
end
|
137
137
|
|
data/lib/workhorse.rb
CHANGED
@@ -31,6 +31,12 @@ module Workhorse
|
|
31
31
|
# ExceptionNotifier.notify_exception(exception)
|
32
32
|
end
|
33
33
|
|
34
|
+
# If set to `false`, shell handler (CLI) won't lock commands using a lockfile.
|
35
|
+
# You should generally only disable this if you are performing the locking
|
36
|
+
# yourself (e.g. in a wrapper script).
|
37
|
+
mattr_accessor :lock_shell_commands
|
38
|
+
self.lock_shell_commands = true
|
39
|
+
|
34
40
|
# If set to `true`, the defined `on_exception` will not be called when the
|
35
41
|
# poller encounters an exception and the worker has to be shut down. The
|
36
42
|
# exception will still be logged.
|
@@ -73,7 +73,7 @@ class ActiveJob::QueueAdapters::WorkhorseAdapterTest < WorkhorseTest
|
|
73
73
|
work 0.5, polling_interval: 0.1
|
74
74
|
assert_equal 'waiting', Workhorse::DbJob.first.state
|
75
75
|
|
76
|
-
work
|
76
|
+
work 3, polling_interval: 0.1
|
77
77
|
assert_equal 'succeeded', Workhorse::DbJob.first.reload.state
|
78
78
|
end
|
79
79
|
|
data/test/workhorse/pool_test.rb
CHANGED
@@ -61,16 +61,16 @@ class Workhorse::PoolTest < WorkhorseTest
|
|
61
61
|
|
62
62
|
assert_equal 0, on_idle_calls.value
|
63
63
|
|
64
|
-
p.post { sleep 0.2 }
|
65
64
|
p.post { sleep 0.4 }
|
65
|
+
p.post { sleep 0.8 }
|
66
66
|
|
67
67
|
sleep 0.1
|
68
68
|
assert_equal 0, on_idle_calls.value
|
69
69
|
|
70
|
-
sleep 0.
|
70
|
+
sleep 0.6
|
71
71
|
assert_equal 1, on_idle_calls.value
|
72
72
|
|
73
|
-
sleep 0.
|
73
|
+
sleep 0.9
|
74
74
|
assert_equal 2, on_idle_calls.value
|
75
75
|
end
|
76
76
|
end
|
data/workhorse.gemspec
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
-
# stub: workhorse 1.2.
|
2
|
+
# stub: workhorse 1.2.8 ruby lib
|
3
3
|
|
4
4
|
Gem::Specification.new do |s|
|
5
5
|
s.name = "workhorse".freeze
|
6
|
-
s.version = "1.2.
|
6
|
+
s.version = "1.2.8"
|
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 = "2022-
|
11
|
+
s.date = "2022-11-23"
|
12
12
|
s.files = [".github/workflows/ruby.yml".freeze, ".gitignore".freeze, ".releaser_config".freeze, ".rubocop.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/active_job/queue_adapters/workhorse_adapter.rb".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/detect_stale_jobs_job.rb".freeze, "lib/workhorse/jobs/run_active_job.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/scoped_env.rb".freeze, "lib/workhorse/worker.rb".freeze, "test/active_job/queue_adapters/workhorse_adapter_test.rb".freeze, "test/lib/db_schema.rb".freeze, "test/lib/jobs.rb".freeze, "test/lib/test_helper.rb".freeze, "test/workhorse/db_job_test.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
13
|
s.rubygems_version = "3.0.3".freeze
|
14
14
|
s.summary = "Multi-threaded job backend with database queuing for ruby.".freeze
|
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: 1.2.
|
4
|
+
version: 1.2.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sitrox
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-11-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -245,7 +245,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
245
245
|
- !ruby/object:Gem::Version
|
246
246
|
version: '0'
|
247
247
|
requirements: []
|
248
|
-
rubygems_version: 3.
|
248
|
+
rubygems_version: 3.3.11
|
249
249
|
signing_key:
|
250
250
|
specification_version: 4
|
251
251
|
summary: Multi-threaded job backend with database queuing for ruby.
|