delayed_job_groups_plugin 0.4.2 → 0.4.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c0754808400681b63e14fc299849af001fd1657bf492fdd56947e00519eaba89
4
- data.tar.gz: c30c2bde41bcb5a9c374cdb3bab3c9c75ebf7ea5d50e63696fba296600f13985
3
+ metadata.gz: 03a9f0066659dc667431ab9ebc586c2529832d1461258dd6d426f863e5f86d01
4
+ data.tar.gz: ab1c0829e4734e8582f59b403e51ae9caa2415afa1f871a1bab630b052cbae59
5
5
  SHA512:
6
- metadata.gz: 53c683f2825c99da19e8307c7a1d8b42f91dcad430f77a2f3fcd2cb90cef2ab5e1a2a4693166da75f3cc51e72a614688ae92edbdddcd39626c3b4bdf95a09722
7
- data.tar.gz: a6a273708961cbd9922382400c441c97f570768283db311c129120f27cfb414b1265227667895e65d2385a194f2bfc05b1e8d09f1489341fa85dc76309a10cda
6
+ metadata.gz: 3c268e4005abf1659599be599224e0ed2ff67e36f81bfaea8814de515384974ebecab3d60be9b6a985305294d9bb58ebd65c23a5a4ee5fe6300a15b46b7081a0
7
+ data.tar.gz: 55ab232adbd0e6f36d2dd36d2eab69210bdae606de95eee08de87f98545b650b4e37a9bc8dcf7838a925a3d6750e2cf7690664c0f81df23933eb7cd8bfa8d1ef
@@ -1,5 +1,8 @@
1
1
  # Changelog
2
2
 
3
+ ### 0.4.3
4
+ * Bugfix for `on_completion_job` when `failure_cancels_group` is set to false.
5
+
3
6
  ### 0.4.2
4
7
  * Add support for Rails 6.0.
5
8
 
data/README.md CHANGED
@@ -100,7 +100,8 @@ job_group.cancel
100
100
 
101
101
  Configuration to allow failed jobs not to cancel the group
102
102
  ```ruby
103
- # We can optionally pass options that will allow jobs to fail without cancelling the group
103
+ # We can optionally pass options that will allow jobs to fail without cancelling the group.
104
+ # This also allows the on_completion job to fire once all jobs have either succeeded or failed.
104
105
  job_group = Delayed::JobGroups::JobGroup.create!(failure_cancels_group: false)
105
106
  ```
106
107
 
@@ -28,8 +28,9 @@ module Delayed
28
28
 
29
29
  lifecycle.after(:perform) do |_worker, job|
30
30
  # Make sure we only check to see if the job group is complete
31
- # if the job succeeded
32
- if job.in_job_group? && job_completed?(job)
31
+ # if the job succeeded or the job has failed (maxed out retries) with failure_cancels_group
32
+ # set to false
33
+ if job.in_job_group? && (job_completed?(job) || job_acceptably_failed?(job))
33
34
  JobGroup.check_for_completion(job.job_group_id)
34
35
  end
35
36
  end
@@ -44,6 +45,12 @@ module Delayed
44
45
  # if it has completed
45
46
  job.destroyed?
46
47
  end
48
+
49
+ def self.job_acceptably_failed?(job)
50
+ # Job has set failed_at (retries have maxed out) and failure_cancels_group is false signaling
51
+ # that the group should complete despite failures.
52
+ job.failed_at.present? && job.job_group.present? && !job.job_group.failure_cancels_group?
53
+ end
47
54
  end
48
55
  end
49
56
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Delayed
4
4
  module JobGroups
5
- VERSION = '0.4.2'
5
+ VERSION = '0.4.3'
6
6
  end
7
7
  end
@@ -83,6 +83,7 @@ describe Delayed::JobGroups::Plugin do
83
83
 
84
84
  # Run the job which should fail and cancel the JobGroup
85
85
  Delayed::Worker.new.work_off(1)
86
+ # Completion job is not invoked
86
87
  expect(CompletionJob.invoked).to be(false)
87
88
  expect(failed_job_count).to eq 1
88
89
  expect(queued_job_count).to eq 0
@@ -109,6 +110,59 @@ describe Delayed::JobGroups::Plugin do
109
110
  expect(failed_job_count).to eq 1
110
111
  expect(queued_job_count).to eq 1
111
112
  expect(job_group_count).to eq 1
113
+
114
+ # Run the last job
115
+ Delayed::Worker.new.work_off(1)
116
+ expect(failed_job_count).to eq 1
117
+ expect(queued_job_count).to eq 1
118
+ expect(job_group_count).to eq 0
119
+
120
+ # Run the completion job
121
+ Delayed::Worker.new.work_off(1)
122
+ # Completion job is invoked
123
+ expect(CompletionJob.invoked).to be(true)
124
+ expect(failed_job_count).to eq 1
125
+ expect(queued_job_count).to eq 0
126
+ expect(job_group_count).to eq 0
127
+ end
128
+
129
+ it "runs completion job if last job failed" do
130
+ Delayed::Worker.max_attempts = 2
131
+
132
+ job_group.enqueue(NoOpJob.new)
133
+ job_group.enqueue(FailingJob.new)
134
+ job_group.mark_queueing_complete
135
+ expect(queued_job_count).to eq 2
136
+ expect(job_group_count).to eq 1
137
+
138
+ # Run the non failing job
139
+ Delayed::Worker.new.work_off(1)
140
+ expect(failed_job_count).to eq 0
141
+ expect(queued_job_count).to eq 1
142
+ expect(job_group_count).to eq 1
143
+
144
+ # Run the job which should error
145
+ Delayed::Worker.new.work_off(1)
146
+ # Completion job is not invoked
147
+ expect(CompletionJob.invoked).to be(false)
148
+ expect(failed_job_count).to eq 0
149
+ expect(queued_job_count).to eq 1
150
+ expect(job_group_count).to eq 1
151
+
152
+ # Run the job again which should fail
153
+ Timecop.travel(1.minute.from_now)
154
+ Delayed::Worker.new.work_off(1)
155
+ expect(failed_job_count).to eq 1
156
+ expect(queued_job_count).to eq 1
157
+ expect(job_group_count).to eq 0
158
+
159
+ # Run the completion job
160
+ Delayed::Worker.new.work_off(1)
161
+ # Completion job is invoked
162
+ expect(CompletionJob.invoked).to be(true)
163
+ expect(failed_job_count).to eq 1
164
+ expect(queued_job_count).to eq 0
165
+ expect(job_group_count).to eq 0
112
166
  end
113
167
  end
114
168
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: delayed_job_groups_plugin
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.2
4
+ version: 0.4.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joel Turkel
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2020-05-27 00:00:00.000000000 Z
12
+ date: 2020-06-09 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: delayed_job