good_job 2.9.0 → 2.9.1
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 +13 -0
- data/README.md +1 -1
- data/lib/good_job/adapter.rb +1 -1
- data/lib/good_job/dependencies.rb +50 -0
- data/lib/good_job/railtie.rb +20 -1
- data/lib/good_job/version.rb +1 -1
- data/lib/good_job.rb +2 -0
- metadata +3 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: f99dea9840ebbfd8eda79dd1c06a94b7c9d8185835d6f9991e94d5a86fc5ffea
|
|
4
|
+
data.tar.gz: 148b147b8f76c74f0362dcc8b26381631e1582eae4e7ab929021a291fa7d24fa
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: fe4926720862cb1e42581aa612b92c46ed9a00ea183b66a6c9ee4836165a7f77aa10b78ed32c80399bdc39189f76cd5f48e7b98e3b9b7da93b0de71c8b3cd0c7
|
|
7
|
+
data.tar.gz: 1e47650d6bbdca91983bce0df607e4e4845cd26339d87798086a85f89be822987c2c41cfab08aba164f89195c55d10b3129e593b873b95dfb4075d452e3541c2
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,18 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [v2.9.1](https://github.com/bensheldon/good_job/tree/v2.9.1) (2022-01-13)
|
|
4
|
+
|
|
5
|
+
[Full Changelog](https://github.com/bensheldon/good_job/compare/v2.9.0...v2.9.1)
|
|
6
|
+
|
|
7
|
+
**Closed issues:**
|
|
8
|
+
|
|
9
|
+
- Graceful fallback to polling when LISTEN/NOTIFY isn't available [\#482](https://github.com/bensheldon/good_job/issues/482)
|
|
10
|
+
- Long running locks on latest good job [\#480](https://github.com/bensheldon/good_job/issues/480)
|
|
11
|
+
|
|
12
|
+
**Merged pull requests:**
|
|
13
|
+
|
|
14
|
+
- Start async adapters once `ActiveRecord` and `ActiveJob` have loaded, potentially before `Rails.application.initialized?` [\#483](https://github.com/bensheldon/good_job/pull/483) ([bensheldon](https://github.com/bensheldon))
|
|
15
|
+
|
|
3
16
|
## [v2.9.0](https://github.com/bensheldon/good_job/tree/v2.9.0) (2022-01-09)
|
|
4
17
|
|
|
5
18
|
[Full Changelog](https://github.com/bensheldon/good_job/compare/v2.8.1...v2.9.0)
|
data/README.md
CHANGED
|
@@ -142,7 +142,7 @@ For more of the story of GoodJob, read the [introductory blog post](https://isla
|
|
|
142
142
|
## Compatibility
|
|
143
143
|
|
|
144
144
|
- **Ruby on Rails:** 5.2+
|
|
145
|
-
- **Ruby:** MRI 2.5+. JRuby 9.2.13+
|
|
145
|
+
- **Ruby:** MRI 2.5+. JRuby 9.2.13+
|
|
146
146
|
- **Postgres:** 9.6+
|
|
147
147
|
|
|
148
148
|
## Configuration
|
data/lib/good_job/adapter.rb
CHANGED
|
@@ -27,7 +27,7 @@ module GoodJob
|
|
|
27
27
|
# @param queues [String, nil] determines which queues to execute jobs from when +execution_mode+ is set to +:async+. See {file:README.md#optimize-queues-threads-and-processes} for more details on the format of this string. You can also set this with the environment variable +GOOD_JOB_QUEUES+. Defaults to +"*"+.
|
|
28
28
|
# @param poll_interval [Integer, nil] sets the number of seconds between polls for jobs when +execution_mode+ is set to +:async+. You can also set this with the environment variable +GOOD_JOB_POLL_INTERVAL+. Defaults to +1+.
|
|
29
29
|
# @param start_async_on_initialize [Boolean] whether to start the async scheduler when the adapter is initialized.
|
|
30
|
-
def initialize(execution_mode: nil, queues: nil, max_threads: nil, poll_interval: nil, start_async_on_initialize:
|
|
30
|
+
def initialize(execution_mode: nil, queues: nil, max_threads: nil, poll_interval: nil, start_async_on_initialize: GoodJob.async_ready?)
|
|
31
31
|
@configuration = GoodJob::Configuration.new(
|
|
32
32
|
{
|
|
33
33
|
execution_mode: execution_mode,
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module GoodJob # :nodoc:
|
|
4
|
+
# Extends GoodJob module to track Rails boot dependencies.
|
|
5
|
+
module Dependencies
|
|
6
|
+
extend ActiveSupport::Concern
|
|
7
|
+
|
|
8
|
+
included do
|
|
9
|
+
# @!attribute [rw] _rails_after_initialize_hook_called
|
|
10
|
+
# @!scope class
|
|
11
|
+
# Whether Railtie.after_initialize has been called yet (default: +false+).
|
|
12
|
+
# This will be set on but before +Rails.application.initialize?+ is +true+.
|
|
13
|
+
# @return [Boolean]
|
|
14
|
+
mattr_accessor :_rails_after_initialize_hook_called, default: false
|
|
15
|
+
|
|
16
|
+
# @!attribute [rw] _active_job_loaded
|
|
17
|
+
# @!scope class
|
|
18
|
+
# Whether ActiveJob has loaded (default: +false+).
|
|
19
|
+
# @return [Boolean]
|
|
20
|
+
mattr_accessor :_active_job_loaded, default: false
|
|
21
|
+
|
|
22
|
+
# @!attribute [rw] _active_record_loaded
|
|
23
|
+
# @!scope class
|
|
24
|
+
# Whether ActiveRecord has loaded (default: +false+).
|
|
25
|
+
# @return [Boolean]
|
|
26
|
+
mattr_accessor :_active_record_loaded, default: false
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
class_methods do
|
|
30
|
+
# Whether GoodJob's has been initialized as of the calling of +Railtie.after_initialize+.
|
|
31
|
+
# @return [Boolean]
|
|
32
|
+
def async_ready?
|
|
33
|
+
Rails.application.initialized? || (
|
|
34
|
+
_rails_after_initialize_hook_called &&
|
|
35
|
+
_active_job_loaded &&
|
|
36
|
+
_active_record_loaded
|
|
37
|
+
)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def start_async_adapters
|
|
41
|
+
return unless async_ready?
|
|
42
|
+
|
|
43
|
+
GoodJob::Adapter.instances
|
|
44
|
+
.select(&:execute_async?)
|
|
45
|
+
.reject(&:async_started?)
|
|
46
|
+
.each(&:start_async)
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
data/lib/good_job/railtie.rb
CHANGED
|
@@ -34,8 +34,27 @@ module GoodJob
|
|
|
34
34
|
end
|
|
35
35
|
|
|
36
36
|
initializer "good_job.start_async" do
|
|
37
|
+
# This hooks into the hookable places during Rails boot, which is unfortunately not Rails.application.initialized?
|
|
38
|
+
# If an Adapter is initialized during boot, we want to want to start its async executors once the framework dependencies have loaded.
|
|
39
|
+
# When exactly that happens is out of our control because gems or application code may touch things earlier than expected.
|
|
40
|
+
# For example, as of Rails 6.1, if an ActiveRecord model is touched during boot, that triggers ActiveRecord to load,
|
|
41
|
+
# which touches DestroyAssociationAsyncJob, which loads ActiveJob, which may initialize a GoodJob::Adapter, all of which
|
|
42
|
+
# happens _before_ ActiveRecord finishes loading. GoodJob will deadlock if an async executor is started in the middle of
|
|
43
|
+
# ActiveRecord loading.
|
|
44
|
+
|
|
37
45
|
config.after_initialize do
|
|
38
|
-
|
|
46
|
+
ActiveSupport.on_load(:active_record) do
|
|
47
|
+
GoodJob._active_record_loaded = true
|
|
48
|
+
GoodJob.start_async_adapters
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
ActiveSupport.on_load(:active_job) do
|
|
52
|
+
GoodJob._active_job_loaded = true
|
|
53
|
+
GoodJob.start_async_adapters
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
GoodJob._rails_after_initialize_hook_called = true
|
|
57
|
+
GoodJob.start_async_adapters
|
|
39
58
|
end
|
|
40
59
|
end
|
|
41
60
|
end
|
data/lib/good_job/version.rb
CHANGED
data/lib/good_job.rb
CHANGED
|
@@ -18,6 +18,8 @@ require "good_job/railtie"
|
|
|
18
18
|
#
|
|
19
19
|
# +GoodJob+ is the top-level namespace and exposes configuration attributes.
|
|
20
20
|
module GoodJob
|
|
21
|
+
include GoodJob::Dependencies
|
|
22
|
+
|
|
21
23
|
DEFAULT_LOGGER = ActiveSupport::TaggedLogging.new(ActiveSupport::Logger.new($stdout))
|
|
22
24
|
|
|
23
25
|
# @!attribute [rw] active_record_parent_class
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: good_job
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 2.9.
|
|
4
|
+
version: 2.9.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Ben Sheldon
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2022-01-
|
|
11
|
+
date: 2022-01-13 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: activejob
|
|
@@ -421,6 +421,7 @@ files:
|
|
|
421
421
|
- lib/good_job/cron_manager.rb
|
|
422
422
|
- lib/good_job/current_thread.rb
|
|
423
423
|
- lib/good_job/daemon.rb
|
|
424
|
+
- lib/good_job/dependencies.rb
|
|
424
425
|
- lib/good_job/execution.rb
|
|
425
426
|
- lib/good_job/execution_result.rb
|
|
426
427
|
- lib/good_job/filterable.rb
|