good_job 3.16.1 → 3.16.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 +28 -0
- data/README.md +3 -1
- data/app/models/concerns/good_job/error_events.rb +26 -9
- data/app/models/good_job/base_execution.rb +3 -0
- data/app/models/good_job/execution.rb +1 -5
- data/app/models/good_job/job.rb +12 -7
- data/app/views/good_job/batches/_jobs.erb +1 -1
- data/app/views/good_job/jobs/_table.erb +1 -1
- data/app/views/good_job/jobs/show.html.erb +1 -1
- data/lib/good_job/adapter.rb +9 -1
- data/lib/good_job/version.rb +1 -1
- data/lib/good_job.rb +9 -0
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 3929d3de9d0c69de6aa34b238573dd19eabb0b6753b28a06b186cfc6972b621b
|
|
4
|
+
data.tar.gz: d927b1cc39f993f64a4b07594cb7215975e02d55cb212b420122b2c672d5f2d4
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 34ac854233932322ad76eaea4d41879b9d97c08a204b6f689affedbe861b86bc5c83b6c02dd1132c267f7f9129d4e0ace042e9299f4fe522fdf9d590b6c0cf33
|
|
7
|
+
data.tar.gz: a8007ea55894eb72494935dff5269d1e54d157eab334b823769884cc3d83d1a37be3d9cb44e603ba5a132cb3993ba8dd8e306c4d3974f9a2bf4dc2603add5706
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,33 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [v3.16.3](https://github.com/bensheldon/good_job/tree/v3.16.3) (2023-07-18)
|
|
4
|
+
|
|
5
|
+
[Full Changelog](https://github.com/bensheldon/good_job/compare/v3.16.2...v3.16.3)
|
|
6
|
+
|
|
7
|
+
**Fixed bugs:**
|
|
8
|
+
|
|
9
|
+
- Fix bulk enqueue for unmigrated 'error\_event'; add `GoodJob.migrated?` check method; use custom enum implementation [\#1011](https://github.com/bensheldon/good_job/pull/1011) ([bensheldon](https://github.com/bensheldon))
|
|
10
|
+
|
|
11
|
+
**Closed issues:**
|
|
12
|
+
|
|
13
|
+
- GoodJob::Bulk.enqueue not handling missing migrations [\#1010](https://github.com/bensheldon/good_job/issues/1010)
|
|
14
|
+
|
|
15
|
+
**Merged pull requests:**
|
|
16
|
+
|
|
17
|
+
- Move shared `BaseExecution` concerns into the base class. [\#1009](https://github.com/bensheldon/good_job/pull/1009) ([dixpac](https://github.com/dixpac))
|
|
18
|
+
|
|
19
|
+
## [v3.16.2](https://github.com/bensheldon/good_job/tree/v3.16.2) (2023-07-13)
|
|
20
|
+
|
|
21
|
+
[Full Changelog](https://github.com/bensheldon/good_job/compare/v3.16.1...v3.16.2)
|
|
22
|
+
|
|
23
|
+
**Closed issues:**
|
|
24
|
+
|
|
25
|
+
- Support for customized job display name [\#956](https://github.com/bensheldon/good_job/issues/956)
|
|
26
|
+
|
|
27
|
+
**Merged pull requests:**
|
|
28
|
+
|
|
29
|
+
- Add `GoodJob::Job#display_name` to allow customizing dashboard job display [\#1008](https://github.com/bensheldon/good_job/pull/1008) ([paul](https://github.com/paul))
|
|
30
|
+
|
|
3
31
|
## [v3.16.1](https://github.com/bensheldon/good_job/tree/v3.16.1) (2023-07-11)
|
|
4
32
|
|
|
5
33
|
[Full Changelog](https://github.com/bensheldon/good_job/compare/v3.16.0...v3.16.1)
|
data/README.md
CHANGED
|
@@ -703,7 +703,9 @@ GoodJob follows semantic versioning, though updates may be encouraged through de
|
|
|
703
703
|
|
|
704
704
|
#### Upgrading minor versions
|
|
705
705
|
|
|
706
|
-
Upgrading between minor versions (e.g. v1.4 to v1.5) should not introduce breaking changes, but can introduce new deprecation warnings and database migration
|
|
706
|
+
Upgrading between minor versions (e.g. v1.4 to v1.5) should not introduce breaking changes, but can introduce new deprecation warnings and database migration warnings.
|
|
707
|
+
|
|
708
|
+
Database migrations introduced in minor releases are _not required_ to be applied until the next major release. If you would like apply newly introduced migrations immediately, assert `GoodJob.migrated?` in your application's test suite.
|
|
707
709
|
|
|
708
710
|
To perform upgrades to the GoodJob database tables:
|
|
709
711
|
|
|
@@ -14,15 +14,32 @@ module GoodJob
|
|
|
14
14
|
ERROR_EVENT_DISCARDED = 'discarded',
|
|
15
15
|
].freeze
|
|
16
16
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
17
|
+
ERROR_EVENT_ENUMS = {
|
|
18
|
+
ERROR_EVENT_INTERRUPTED => 0,
|
|
19
|
+
ERROR_EVENT_UNHANDLED => 1,
|
|
20
|
+
ERROR_EVENT_HANDLED => 2,
|
|
21
|
+
ERROR_EVENT_RETRIED => 3,
|
|
22
|
+
ERROR_EVENT_RETRY_STOPPED => 4,
|
|
23
|
+
ERROR_EVENT_DISCARDED => 5,
|
|
24
|
+
}.freeze
|
|
25
|
+
|
|
26
|
+
# TODO: GoodJob v4 can make this an `enum` once migrations are guaranteed.
|
|
27
|
+
def error_event
|
|
28
|
+
return unless self.class.columns_hash['error_event']
|
|
29
|
+
|
|
30
|
+
enum = super
|
|
31
|
+
return unless enum
|
|
32
|
+
|
|
33
|
+
ERROR_EVENT_ENUMS.key(enum)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def error_event=(event)
|
|
37
|
+
return unless self.class.columns_hash['error_event']
|
|
38
|
+
|
|
39
|
+
enum = ERROR_EVENT_ENUMS[event]
|
|
40
|
+
raise(ArgumentError, "Invalid error_event: #{event}") if event && !enum
|
|
41
|
+
|
|
42
|
+
super(enum)
|
|
26
43
|
end
|
|
27
44
|
end
|
|
28
45
|
end
|
|
@@ -3,10 +3,6 @@
|
|
|
3
3
|
module GoodJob
|
|
4
4
|
# ActiveRecord model that represents an +ActiveJob+ job.
|
|
5
5
|
class Execution < BaseExecution
|
|
6
|
-
include Lockable
|
|
7
|
-
include Filterable
|
|
8
|
-
include Reportable
|
|
9
|
-
|
|
10
6
|
# Raised if something attempts to execute a previously completed Execution again.
|
|
11
7
|
PreviouslyPerformedError = Class.new(StandardError)
|
|
12
8
|
|
|
@@ -384,7 +380,7 @@ module GoodJob
|
|
|
384
380
|
error: interrupt_error_string,
|
|
385
381
|
finished_at: Time.current,
|
|
386
382
|
}
|
|
387
|
-
discrete_execution_attrs[:error_event] = GoodJob::
|
|
383
|
+
discrete_execution_attrs[:error_event] = GoodJob::ErrorEvents::ERROR_EVENT_ENUMS[GoodJob::ErrorEvents::ERROR_EVENT_INTERRUPTED] if self.class.error_event_migrated?
|
|
388
384
|
discrete_executions.where(finished_at: nil).where.not(performed_at: nil).update_all(discrete_execution_attrs) # rubocop:disable Rails/SkipsModelValidations
|
|
389
385
|
end
|
|
390
386
|
end
|
data/app/models/good_job/job.rb
CHANGED
|
@@ -7,10 +7,6 @@ module GoodJob
|
|
|
7
7
|
# A single row from the +good_jobs+ table of executions is fetched to represent a Job.
|
|
8
8
|
#
|
|
9
9
|
class Job < BaseExecution
|
|
10
|
-
include Filterable
|
|
11
|
-
include Lockable
|
|
12
|
-
include Reportable
|
|
13
|
-
|
|
14
10
|
# Raised when an inappropriate action is applied to a Job based on its state.
|
|
15
11
|
ActionForStateMismatchError = Class.new(StandardError)
|
|
16
12
|
# Raised when an action requires GoodJob to be the ActiveJob Queue Adapter but GoodJob is not.
|
|
@@ -149,6 +145,12 @@ module GoodJob
|
|
|
149
145
|
})
|
|
150
146
|
end
|
|
151
147
|
|
|
148
|
+
# Used when displaying this job in the GoodJob dashboard.
|
|
149
|
+
# @return [String]
|
|
150
|
+
def display_name
|
|
151
|
+
job_class
|
|
152
|
+
end
|
|
153
|
+
|
|
152
154
|
# Tests whether the job is being executed right now.
|
|
153
155
|
# @return [Boolean]
|
|
154
156
|
def running?
|
|
@@ -222,9 +224,12 @@ module GoodJob
|
|
|
222
224
|
|
|
223
225
|
update_execution = proc do
|
|
224
226
|
execution.update(
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
227
|
+
{
|
|
228
|
+
finished_at: Time.current,
|
|
229
|
+
error: GoodJob::Execution.format_error(job_error),
|
|
230
|
+
}.tap do |attrs|
|
|
231
|
+
attrs[:error_event] = ERROR_EVENT_DISCARDED if self.class.error_event_migrated?
|
|
232
|
+
end
|
|
228
233
|
)
|
|
229
234
|
end
|
|
230
235
|
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
<div class="row align-items-center">
|
|
24
24
|
<div class="col-lg-4">
|
|
25
25
|
<%= tag.code link_to(job.id, job_path(job), class: "small text-muted text-decoration-none") %>
|
|
26
|
-
<%= tag.h5 tag.code(link_to(job.
|
|
26
|
+
<%= tag.h5 tag.code(link_to(job.display_name, job_path(job), class: "text-reset text-decoration-none")), class: "text-reset mb-0" %>
|
|
27
27
|
</div>
|
|
28
28
|
<div class="col-4 col-lg-1 text-lg-center">
|
|
29
29
|
<div class="d-lg-none small text-muted mt-1"><%=t "good_job.models.job.queue" %></div>
|
|
@@ -64,7 +64,7 @@
|
|
|
64
64
|
<%= check_box_tag 'job_ids[]', job.id, false, id: dom_id(job, :checkbox), data: { "checkbox-toggle-each": "job_ids" } %>
|
|
65
65
|
<div class="ms-2">
|
|
66
66
|
<%= tag.code link_to(job.id, job_path(job), class: "small text-muted text-decoration-none") %>
|
|
67
|
-
<%= tag.h5 tag.code(link_to(job.
|
|
67
|
+
<%= tag.h5 tag.code(link_to(job.display_name, job_path(job), class: "text-reset text-decoration-none")), class: "text-reset mb-0" %>
|
|
68
68
|
<% if job.error %>
|
|
69
69
|
<div class="mt-1 small">
|
|
70
70
|
<strong class="small"><%=t "good_job.shared.error" %>:</strong>
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
</nav>
|
|
14
14
|
<div class="row align-items-center">
|
|
15
15
|
<div class="col-md-5">
|
|
16
|
-
<h2 class="mb-2 mb-md-0"><%= tag.code @job.
|
|
16
|
+
<h2 class="mb-2 mb-md-0"><%= tag.code @job.display_name %></h2>
|
|
17
17
|
</div>
|
|
18
18
|
<div class="col-6 col-md-2">
|
|
19
19
|
<div class="small text-muted text-uppercase"><%= t "good_job.models.job.queue" %></div>
|
data/lib/good_job/adapter.rb
CHANGED
|
@@ -64,7 +64,15 @@ module GoodJob
|
|
|
64
64
|
|
|
65
65
|
inline_executions = []
|
|
66
66
|
GoodJob::Execution.transaction(requires_new: true, joinable: false) do
|
|
67
|
-
|
|
67
|
+
execution_attributes = executions.map do |execution|
|
|
68
|
+
if GoodJob::Execution.error_event_migrated?
|
|
69
|
+
execution.attributes
|
|
70
|
+
else
|
|
71
|
+
execution.attributes.except('error_event')
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
results = GoodJob::Execution.insert_all(execution_attributes, returning: %w[id active_job_id]) # rubocop:disable Rails/SkipsModelValidations
|
|
68
76
|
|
|
69
77
|
job_id_to_provider_job_id = results.each_with_object({}) { |result, hash| hash[result['active_job_id']] = result['id'] }
|
|
70
78
|
active_jobs.each do |active_job|
|
data/lib/good_job/version.rb
CHANGED
data/lib/good_job.rb
CHANGED
|
@@ -246,5 +246,14 @@ module GoodJob
|
|
|
246
246
|
end
|
|
247
247
|
end
|
|
248
248
|
|
|
249
|
+
# Whether all GoodJob migrations have been applied.
|
|
250
|
+
# For use in tests/CI to validate GoodJob is up-to-date.
|
|
251
|
+
# @return [Boolean]
|
|
252
|
+
def self.migrated?
|
|
253
|
+
# Always update with the most recent migration check
|
|
254
|
+
GoodJob::Execution.reset_column_information
|
|
255
|
+
GoodJob::Execution.error_event_migrated?
|
|
256
|
+
end
|
|
257
|
+
|
|
249
258
|
ActiveSupport.run_load_hooks(:good_job, self)
|
|
250
259
|
end
|
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.16.
|
|
4
|
+
version: 3.16.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: 2023-07-
|
|
11
|
+
date: 2023-07-18 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: activejob
|