good_job 3.14.0 → 3.14.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +19 -0
- data/app/models/good_job/execution.rb +7 -2
- data/app/models/good_job/job.rb +24 -4
- data/lib/good_job/version.rb +1 -1
- 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: 6dd3d98377de721a907a5f81384a6c7bda00ae90b08f4a0437bbbb8e453ce4df
|
4
|
+
data.tar.gz: 6e6a6f7762bf412b67004b03fc7dd9c0f4bf44917001f13cd5e4b8367329f128
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4379e0356bb07dd1b49abddc879c1d7005aeb7bf047c0d73843bf22e1d0de262972cd140f4cdd6de57bee2fb29f5ad11519d7f8adcf958bda8d9363343ecf809
|
7
|
+
data.tar.gz: 2b93aa27e6b037f5e8debefffdb883c94deb6998640bb21e00284f004a47ca4d41daaf7b4dc9c39a7545d70acd70be2d8532fad7b4057694d5cfbb575d1c769b
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,24 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## [v3.14.2](https://github.com/bensheldon/good_job/tree/v3.14.2) (2023-03-16)
|
4
|
+
|
5
|
+
[Full Changelog](https://github.com/bensheldon/good_job/compare/v3.14.1...v3.14.2)
|
6
|
+
|
7
|
+
**Merged pull requests:**
|
8
|
+
|
9
|
+
- Bump rack from 2.2.6.3 to 2.2.6.4 [\#893](https://github.com/bensheldon/good_job/pull/893) ([dependabot[bot]](https://github.com/apps/dependabot))
|
10
|
+
- Remove non-ActiveRecord::Base backed association [\#892](https://github.com/bensheldon/good_job/pull/892) ([rrunyon](https://github.com/rrunyon))
|
11
|
+
|
12
|
+
## [v3.14.1](https://github.com/bensheldon/good_job/tree/v3.14.1) (2023-03-14)
|
13
|
+
|
14
|
+
[Full Changelog](https://github.com/bensheldon/good_job/compare/v3.14.0...v3.14.1)
|
15
|
+
|
16
|
+
**Merged pull requests:**
|
17
|
+
|
18
|
+
- Allow joining executions to jobs scoped by state [\#886](https://github.com/bensheldon/good_job/pull/886) ([segiddins](https://github.com/segiddins))
|
19
|
+
- Add execution\_result to event payload for perform\_job.good\_job [\#885](https://github.com/bensheldon/good_job/pull/885) ([segiddins](https://github.com/segiddins))
|
20
|
+
- Bump rack from 2.2.6.2 to 2.2.6.3 [\#884](https://github.com/bensheldon/good_job/pull/884) ([dependabot[bot]](https://github.com/apps/dependabot))
|
21
|
+
|
3
22
|
## [v3.14.0](https://github.com/bensheldon/good_job/tree/v3.14.0) (2023-03-09)
|
4
23
|
|
5
24
|
[Full Changelog](https://github.com/bensheldon/good_job/compare/v3.13.0...v3.14.0)
|
@@ -70,7 +70,6 @@ module GoodJob
|
|
70
70
|
end
|
71
71
|
|
72
72
|
belongs_to :batch, class_name: 'GoodJob::BatchRecord', optional: true, inverse_of: :executions
|
73
|
-
belongs_to :batch_callback, class_name: 'GoodJob::Batch', optional: true
|
74
73
|
|
75
74
|
belongs_to :job, class_name: 'GoodJob::Job', foreign_key: 'active_job_id', primary_key: 'active_job_id', optional: true, inverse_of: :executions
|
76
75
|
after_destroy -> { self.class.active_job_id(active_job_id).delete_all }, if: -> { @_destroy_job }
|
@@ -336,7 +335,7 @@ module GoodJob
|
|
336
335
|
current_thread.execution_interrupted = performed_at if performed_at
|
337
336
|
update!(performed_at: Time.current)
|
338
337
|
|
339
|
-
ActiveSupport::Notifications.instrument("perform_job.good_job", { execution: self, process_id: current_thread.process_id, thread_name: current_thread.thread_name }) do
|
338
|
+
ActiveSupport::Notifications.instrument("perform_job.good_job", { execution: self, process_id: current_thread.process_id, thread_name: current_thread.thread_name }) do |instrument_payload|
|
340
339
|
value = ActiveJob::Base.execute(active_job_data)
|
341
340
|
|
342
341
|
if value.is_a?(Exception)
|
@@ -345,8 +344,14 @@ module GoodJob
|
|
345
344
|
end
|
346
345
|
handled_error ||= current_thread.error_on_retry || current_thread.error_on_discard
|
347
346
|
|
347
|
+
instrument_payload.merge!(
|
348
|
+
value: value,
|
349
|
+
handled_error: handled_error,
|
350
|
+
retried: current_thread.error_on_retry.present?
|
351
|
+
)
|
348
352
|
ExecutionResult.new(value: value, handled_error: handled_error, retried: current_thread.error_on_retry.present?)
|
349
353
|
rescue StandardError => e
|
354
|
+
instrument_payload[:unhandled_error] = e
|
350
355
|
ExecutionResult.new(value: nil, unhandled_error: e)
|
351
356
|
end
|
352
357
|
end
|
data/app/models/good_job/job.rb
CHANGED
@@ -23,6 +23,26 @@ module GoodJob
|
|
23
23
|
def table_name=(_value)
|
24
24
|
raise NotImplementedError, 'Assign GoodJob::Execution.table_name directly'
|
25
25
|
end
|
26
|
+
|
27
|
+
def json_string(json, attr)
|
28
|
+
Arel::Nodes::Grouping.new(Arel::Nodes::InfixOperation.new('->>', json, Arel::Nodes.build_quoted(attr)))
|
29
|
+
end
|
30
|
+
|
31
|
+
def params_job_class
|
32
|
+
json_string(arel_table['serialized_params'], 'job_class')
|
33
|
+
end
|
34
|
+
|
35
|
+
def params_execution_count
|
36
|
+
Arel::Nodes::InfixOperation.new(
|
37
|
+
'::',
|
38
|
+
json_string(arel_table['serialized_params'], 'executions'),
|
39
|
+
Arel.sql('integer')
|
40
|
+
)
|
41
|
+
end
|
42
|
+
|
43
|
+
def coalesce_scheduled_at_created_at
|
44
|
+
arel_table.coalesce(arel_table['scheduled_at'], arel_table['created_at'])
|
45
|
+
end
|
26
46
|
end
|
27
47
|
|
28
48
|
self.primary_key = 'active_job_id'
|
@@ -39,7 +59,7 @@ module GoodJob
|
|
39
59
|
# @!scope class
|
40
60
|
# @param string [String] Execution class name
|
41
61
|
# @return [ActiveRecord::Relation]
|
42
|
-
scope :job_class, ->(
|
62
|
+
scope :job_class, ->(name) { where(params_job_class.eq(name)) }
|
43
63
|
|
44
64
|
# Get Jobs finished before the given timestamp.
|
45
65
|
# @!method finished_before(timestamp)
|
@@ -49,11 +69,11 @@ module GoodJob
|
|
49
69
|
scope :finished_before, ->(timestamp) { where(arel_table['finished_at'].lteq(timestamp)) }
|
50
70
|
|
51
71
|
# First execution will run in the future
|
52
|
-
scope :scheduled, -> { where(finished_at: nil).where(
|
72
|
+
scope :scheduled, -> { where(finished_at: nil).where(coalesce_scheduled_at_created_at.gt(DateTime.current)).where(params_execution_count.lt(2)) }
|
53
73
|
# Execution errored, will run in the future
|
54
|
-
scope :retried, -> { where(finished_at: nil).where(
|
74
|
+
scope :retried, -> { where(finished_at: nil).where(coalesce_scheduled_at_created_at.gt(DateTime.current)).where(params_execution_count.gt(1)) }
|
55
75
|
# Immediate/Scheduled time to run has passed, waiting for an available thread run
|
56
|
-
scope :queued, -> { where(finished_at: nil).where(
|
76
|
+
scope :queued, -> { where(finished_at: nil).where(coalesce_scheduled_at_created_at.lteq(DateTime.current)).joins_advisory_locks.where(pg_locks: { locktype: nil }) }
|
57
77
|
# Advisory locked and executing
|
58
78
|
scope :running, -> { where(finished_at: nil).joins_advisory_locks.where.not(pg_locks: { locktype: nil }) }
|
59
79
|
# Finished executing (succeeded or discarded)
|
data/lib/good_job/version.rb
CHANGED
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.14.
|
4
|
+
version: 3.14.2
|
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-03-
|
11
|
+
date: 2023-03-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activejob
|
@@ -460,7 +460,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
460
460
|
- !ruby/object:Gem::Version
|
461
461
|
version: '0'
|
462
462
|
requirements: []
|
463
|
-
rubygems_version: 3.4.
|
463
|
+
rubygems_version: 3.4.8
|
464
464
|
signing_key:
|
465
465
|
specification_version: 4
|
466
466
|
summary: A multithreaded, Postgres-based ActiveJob backend for Ruby on Rails
|