good_job 3.27.2 → 3.27.3
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 +8 -0
- data/lib/good_job/adapter.rb +1 -1
- data/lib/good_job/dependencies.rb +29 -0
- data/lib/good_job/engine.rb +15 -10
- data/lib/good_job/version.rb +1 -1
- data/lib/good_job.rb +2 -5
- 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: 31870d7c454658e1b6b3865535a8af35898f6ac3a1b4e9112da7a485a97506a1
|
|
4
|
+
data.tar.gz: 9776e26adab4e551c10351b33ef223c16340440ad9e9189eecff533aa5583d62
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 2e8cd2f1e317f5f6421a4a50ce5a3c0af8f0e51199eb5a0c8db0d93f9f5a1d7ded7d621cf79498e756e7c9dbe7c72da24830706975e59a20c0c0b6852c3d60b9
|
|
7
|
+
data.tar.gz: a852a1e0de8dbfaac4b00baa4aa74672846364b617fb392d12a3bbdb0394be1e8183d9cf44d1ced788ba79b05bbe7ab3a986b57dfa67d38873d82cf627ae098a
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [v3.27.3](https://github.com/bensheldon/good_job/tree/v3.27.3) (2024-03-29)
|
|
4
|
+
|
|
5
|
+
[Full Changelog](https://github.com/bensheldon/good_job/compare/v3.27.2...v3.27.3)
|
|
6
|
+
|
|
7
|
+
**Merged pull requests:**
|
|
8
|
+
|
|
9
|
+
- Revert "Start async adapters `after_initialize` instead of once Active Job and Active Record are loaded and Rails initialized?" [\#1303](https://github.com/bensheldon/good_job/pull/1303) ([bensheldon](https://github.com/bensheldon))
|
|
10
|
+
|
|
3
11
|
## [v3.27.2](https://github.com/bensheldon/good_job/tree/v3.27.2) (2024-03-27)
|
|
4
12
|
|
|
5
13
|
[Full Changelog](https://github.com/bensheldon/good_job/compare/v3.27.1...v3.27.2)
|
data/lib/good_job/adapter.rb
CHANGED
|
@@ -30,7 +30,7 @@ module GoodJob
|
|
|
30
30
|
GoodJob::Configuration.validate_execution_mode(@_execution_mode_override) if @_execution_mode_override
|
|
31
31
|
@capsule = _capsule
|
|
32
32
|
|
|
33
|
-
start_async if GoodJob.
|
|
33
|
+
start_async if GoodJob.async_ready?
|
|
34
34
|
self.class.instances << self
|
|
35
35
|
end
|
|
36
36
|
|
|
@@ -0,0 +1,29 @@
|
|
|
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
|
+
mattr_accessor :_framework_ready, default: false
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
class_methods do
|
|
13
|
+
# Whether Rails framework has sufficiently initialized to enable Async execution.
|
|
14
|
+
def async_ready?
|
|
15
|
+
Rails.application.initialized? || _framework_ready
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def _start_async_adapters
|
|
19
|
+
return unless async_ready?
|
|
20
|
+
|
|
21
|
+
ActiveJob::Base.queue_adapter # Ensure Active Job is initialized
|
|
22
|
+
GoodJob::Adapter.instances
|
|
23
|
+
.select(&:execute_async?)
|
|
24
|
+
.reject(&:async_started?)
|
|
25
|
+
.each(&:start_async)
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
data/lib/good_job/engine.rb
CHANGED
|
@@ -49,17 +49,22 @@ module GoodJob
|
|
|
49
49
|
end
|
|
50
50
|
|
|
51
51
|
initializer "good_job.start_async" do
|
|
52
|
+
# This hooks into the hookable places during Rails boot, which is unfortunately not Rails.application.initialized?
|
|
53
|
+
# If an Adapter is initialized during boot, we want to want to start async executors once the framework dependencies have loaded.
|
|
54
|
+
# When exactly that happens is out of our control because gems or application code may touch things earlier than expected.
|
|
55
|
+
# For example, as of Rails 6.1, if an ActiveRecord model is touched during boot, that triggers ActiveRecord to load,
|
|
56
|
+
# which touches DestroyAssociationAsyncJob, which loads ActiveJob, which may initialize a GoodJob::Adapter, all of which
|
|
57
|
+
# happens _before_ ActiveRecord finishes loading. GoodJob will deadlock if an async executor is started in the middle of
|
|
58
|
+
# ActiveRecord loading.
|
|
52
59
|
config.after_initialize do
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
.reject(&:async_started?)
|
|
62
|
-
.each(&:start_async)
|
|
60
|
+
ActiveSupport.on_load(:active_record) do
|
|
61
|
+
ActiveSupport.on_load(:active_job) do
|
|
62
|
+
GoodJob._framework_ready = true
|
|
63
|
+
GoodJob._start_async_adapters
|
|
64
|
+
end
|
|
65
|
+
GoodJob._start_async_adapters
|
|
66
|
+
end
|
|
67
|
+
GoodJob._start_async_adapters
|
|
63
68
|
end
|
|
64
69
|
end
|
|
65
70
|
end
|
data/lib/good_job/version.rb
CHANGED
data/lib/good_job.rb
CHANGED
|
@@ -25,6 +25,7 @@ require_relative "good_job/configuration"
|
|
|
25
25
|
require_relative "good_job/cron_manager"
|
|
26
26
|
require_relative "good_job/current_thread"
|
|
27
27
|
require_relative "good_job/daemon"
|
|
28
|
+
require_relative "good_job/dependencies"
|
|
28
29
|
require_relative "good_job/job_performer"
|
|
29
30
|
require_relative "good_job/job_performer/metrics"
|
|
30
31
|
require_relative "good_job/log_subscriber"
|
|
@@ -45,6 +46,7 @@ require_relative "good_job/thread_status"
|
|
|
45
46
|
#
|
|
46
47
|
# +GoodJob+ is the top-level namespace and exposes configuration attributes.
|
|
47
48
|
module GoodJob
|
|
49
|
+
include GoodJob::Dependencies
|
|
48
50
|
include GoodJob::ThreadStatus
|
|
49
51
|
|
|
50
52
|
# Default, null, blank value placeholder.
|
|
@@ -112,11 +114,6 @@ module GoodJob
|
|
|
112
114
|
# @return [GoodJob::Capsule, nil]
|
|
113
115
|
mattr_accessor :capsule, default: GoodJob::Capsule.new(configuration: configuration)
|
|
114
116
|
|
|
115
|
-
mattr_accessor :_async_ready, default: false
|
|
116
|
-
def self._async_ready?
|
|
117
|
-
_async_ready
|
|
118
|
-
end
|
|
119
|
-
|
|
120
117
|
# Called with exception when a GoodJob thread raises an exception
|
|
121
118
|
# @param exception [Exception] Exception that was raised
|
|
122
119
|
# @return [void]
|
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: 3.27.
|
|
4
|
+
version: 3.27.3
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Ben Sheldon
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2024-03-
|
|
11
|
+
date: 2024-03-29 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: activejob
|
|
@@ -404,6 +404,7 @@ files:
|
|
|
404
404
|
- lib/good_job/cron_manager.rb
|
|
405
405
|
- lib/good_job/current_thread.rb
|
|
406
406
|
- lib/good_job/daemon.rb
|
|
407
|
+
- lib/good_job/dependencies.rb
|
|
407
408
|
- lib/good_job/engine.rb
|
|
408
409
|
- lib/good_job/interrupt_error.rb
|
|
409
410
|
- lib/good_job/job_performer.rb
|