workhorse 1.2.13 → 1.2.14
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +6 -0
- data/README.md +51 -0
- data/VERSION +1 -1
- data/lib/workhorse/active_job_extension.rb +20 -0
- data/lib/workhorse/jobs/run_active_job.rb +6 -0
- data/lib/workhorse/performer.rb +5 -1
- data/lib/workhorse.rb +1 -0
- data/workhorse.gemspec +4 -4
- metadata +10 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0a1665e70227e5e6fad1115523a94c7457a9b9b7216e10d2092c0326817bfd44
|
4
|
+
data.tar.gz: f6a1d79bf0f55a8f2756934bb58ab3aefb83ef6369ffec7c783ef8cd6dfa50b0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8dde03d8f2a8f5c05307787433ef308c99c34ad2ab59d7c2edcc352c0428241a48ee5d0356f4a9a35a0de7dac876d60e1c09cd3c016915929f786a387a9e75e6
|
7
|
+
data.tar.gz: b380dff403c8c10df7c2472422e462d66d40bff3796cbee09e81c63c11eafe4ba4a0d0dd361828f5a984f738fe30744b6fcea3616b6a54a9d1f7df016b21219f
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,11 @@
|
|
1
1
|
# Workhorse Changelog
|
2
2
|
|
3
|
+
## 1.2.14 - 2023-08-23
|
4
|
+
|
5
|
+
* Add documentation for transaction handling.
|
6
|
+
|
7
|
+
* Add support for skipping transactions on a per-job basis
|
8
|
+
|
3
9
|
## 1.2.13 - 2023-02-20
|
4
10
|
|
5
11
|
* Add the `config.max_global_lock_fails` setting (defaults to 10). If a
|
data/README.md
CHANGED
@@ -278,6 +278,57 @@ polling interval.
|
|
278
278
|
This setting is recommended for all setups and may eventually be enabled by
|
279
279
|
default.
|
280
280
|
|
281
|
+
## Transactions
|
282
|
+
|
283
|
+
By default, each job is run in an individual database transaction. An exception
|
284
|
+
to this is when performing ActiveJob jobs using `perform_now`, where no
|
285
|
+
transaction is created.
|
286
|
+
|
287
|
+
### Transaction callback
|
288
|
+
|
289
|
+
By default, transactions are created using `ActiveRecord::Base.transaction { ...
|
290
|
+
}`. You can customize this using the setting `config.tx_callback` in your
|
291
|
+
`config/initializers/workhorse.rb` (see commented out section in the generated
|
292
|
+
configuration file).
|
293
|
+
|
294
|
+
### Turning off transactions
|
295
|
+
|
296
|
+
You can turn off transaction wrapping in the following ways:
|
297
|
+
|
298
|
+
- Globally using the setting `config.perform_jobs_in_tx = false` in your
|
299
|
+
`config/initializers/workhorse.rb`. This is not recommended as running jobs
|
300
|
+
without transactions can potentially be harmful.
|
301
|
+
|
302
|
+
- On a per-job basis. This is the recommended approach for jobs that either open
|
303
|
+
up their own transaction(s) or jobs that explicitly do not need a transaction
|
304
|
+
for whatever reason.
|
305
|
+
|
306
|
+
Usage of this feature depends on whether you are dealing with an ActiveJob job
|
307
|
+
or a plain Workhorse job class.
|
308
|
+
|
309
|
+
For ActiveJob:
|
310
|
+
|
311
|
+
1. Add the following mixin to your job class (usually `ApplicationJob`):
|
312
|
+
|
313
|
+
```ruby
|
314
|
+
class ApplicationJob
|
315
|
+
include Workhorse::ActiveJobExtension
|
316
|
+
end
|
317
|
+
```
|
318
|
+
|
319
|
+
2. Use the DSL-method `skip_tx` inside the job classes where you want to
|
320
|
+
disable transaction wrapping, e.g.:
|
321
|
+
|
322
|
+
```ruby
|
323
|
+
class MyJob < ApplicationJob
|
324
|
+
skip_tx
|
325
|
+
|
326
|
+
def perform
|
327
|
+
# Something without transaction
|
328
|
+
end
|
329
|
+
end
|
330
|
+
```
|
331
|
+
|
281
332
|
## Exception handling
|
282
333
|
|
283
334
|
Per default, exceptions occurring in a worker thread will only be visible in the
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.2.
|
1
|
+
1.2.14
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Workhorse
|
2
|
+
module ActiveJobExtension
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
|
5
|
+
included do
|
6
|
+
class_attribute :_skip_tx
|
7
|
+
self._skip_tx = false
|
8
|
+
end
|
9
|
+
|
10
|
+
module ClassMethods
|
11
|
+
def skip_tx
|
12
|
+
self._skip_tx = true
|
13
|
+
end
|
14
|
+
|
15
|
+
def skip_tx?
|
16
|
+
_skip_tx
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -1,9 +1,15 @@
|
|
1
1
|
module Workhorse::Jobs
|
2
2
|
class RunActiveJob
|
3
|
+
attr_reader :job_data
|
4
|
+
|
3
5
|
def initialize(job_data)
|
4
6
|
@job_data = job_data
|
5
7
|
end
|
6
8
|
|
9
|
+
def job_class
|
10
|
+
@job_data['job_class'].safe_constantize
|
11
|
+
end
|
12
|
+
|
7
13
|
def perform
|
8
14
|
ActiveJob::Base.execute(@job_data)
|
9
15
|
end
|
data/lib/workhorse/performer.rb
CHANGED
@@ -61,7 +61,11 @@ module Workhorse
|
|
61
61
|
log 'Performing', :info
|
62
62
|
log "Description: #{@db_job.description}", :info unless @db_job.description.blank?
|
63
63
|
|
64
|
-
|
64
|
+
inner_job_class = deserialized_job.try(:job_class) || deserialized_job.class
|
65
|
+
skip_tx = inner_job_class.try(:skip_tx?)
|
66
|
+
log "SKIP TX: #{skip_tx.inspect}".red, :error
|
67
|
+
|
68
|
+
if Workhorse.perform_jobs_in_tx && !skip_tx
|
65
69
|
Workhorse.tx_callback.call do
|
66
70
|
deserialized_job.perform
|
67
71
|
end
|
data/lib/workhorse.rb
CHANGED
data/workhorse.gemspec
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
-
# stub: workhorse 1.2.
|
2
|
+
# stub: workhorse 1.2.14 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.14"
|
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 = "2023-
|
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]
|
11
|
+
s.date = "2023-08-23"
|
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/active_job_extension.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
|
15
15
|
s.test_files = ["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]
|
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.14
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sitrox
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-08-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -178,8 +178,8 @@ dependencies:
|
|
178
178
|
- - ">="
|
179
179
|
- !ruby/object:Gem::Version
|
180
180
|
version: '0'
|
181
|
-
description:
|
182
|
-
email:
|
181
|
+
description:
|
182
|
+
email:
|
183
183
|
executables: []
|
184
184
|
extensions: []
|
185
185
|
extra_rdoc_files: []
|
@@ -203,6 +203,7 @@ files:
|
|
203
203
|
- lib/generators/workhorse/templates/config/initializers/workhorse.rb
|
204
204
|
- lib/generators/workhorse/templates/create_table_jobs.rb
|
205
205
|
- lib/workhorse.rb
|
206
|
+
- lib/workhorse/active_job_extension.rb
|
206
207
|
- lib/workhorse/daemon.rb
|
207
208
|
- lib/workhorse/daemon/shell_handler.rb
|
208
209
|
- lib/workhorse/db_job.rb
|
@@ -227,10 +228,10 @@ files:
|
|
227
228
|
- test/workhorse/pool_test.rb
|
228
229
|
- test/workhorse/worker_test.rb
|
229
230
|
- workhorse.gemspec
|
230
|
-
homepage:
|
231
|
+
homepage:
|
231
232
|
licenses: []
|
232
233
|
metadata: {}
|
233
|
-
post_install_message:
|
234
|
+
post_install_message:
|
234
235
|
rdoc_options: []
|
235
236
|
require_paths:
|
236
237
|
- lib
|
@@ -245,8 +246,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
245
246
|
- !ruby/object:Gem::Version
|
246
247
|
version: '0'
|
247
248
|
requirements: []
|
248
|
-
rubygems_version: 3.
|
249
|
-
signing_key:
|
249
|
+
rubygems_version: 3.4.10
|
250
|
+
signing_key:
|
250
251
|
specification_version: 4
|
251
252
|
summary: Multi-threaded job backend with database queuing for ruby.
|
252
253
|
test_files:
|