resque-multi-step 2.0.6 → 2.0.8

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
  SHA1:
3
- metadata.gz: 8a265877ea8a413f7070d24539c08d7cd63eab3f
4
- data.tar.gz: a132e3e4e8cef3b95b57ba84d000536f7cb003c7
3
+ metadata.gz: df39997beea740b98549e87d7405f1a17c95dd3b
4
+ data.tar.gz: 72cc72d49e4efc972b766c8666396c4f8cece360
5
5
  SHA512:
6
- metadata.gz: 32a9bd6de76fc719fdb5eeab19cd0b6c65ae8c88e11b07815e52cf258a3210eedc4354abf6e55fd8b6ad100b613ee6071a5ab069934a85b8ea9d3cdf565d0c84
7
- data.tar.gz: 198d5a3711bd30ad8986c196bd7ef9e165daa0743fcce09356487ffec67da78f2e36b210f16f0b5521e6a7188352a85623a745c3502b9cfb3b17fc290819d9d2
6
+ metadata.gz: 97523b06a455bebe45719e257107cc135d795cc3cee846646d4ae32038671dfff9b330ad96901117e6949de89e2b796e3c8a49aec9314a5843c9526eaa509e64
7
+ data.tar.gz: 89f819793f82d9eb02cadc2007fde22a9736c336c24dad5b06386ebcd9eba46a35032c8e603eae65aadb10e411c210e8d02e33c6194a695fb9c9941953fa4933
data/VERSION CHANGED
@@ -1 +1 @@
1
- 2.0.6
1
+ 2.0.8
@@ -69,7 +69,7 @@ module Resque
69
69
  mst.finalizable!
70
70
  end
71
71
 
72
- mst.start
72
+ mst
73
73
  end
74
74
 
75
75
  # Prevent calling MultiStepTask.new
@@ -160,7 +160,6 @@ module Resque
160
160
  include Constantization
161
161
 
162
162
  attr_reader :task_id
163
- attr_reader :started
164
163
  attr_accessor :logger
165
164
 
166
165
  extend AtomicCounters
@@ -179,8 +178,7 @@ module Resque
179
178
  # @param [String] task_id The UUID of the group of interest.
180
179
  def initialize(task_id)
181
180
  @task_id = task_id
182
- @started = @@synchronous
183
- redis.set 'start-time', Time.now.to_i
181
+ redis.setnx 'start-time', Time.now.to_i
184
182
  end
185
183
 
186
184
  def logger
@@ -217,8 +215,11 @@ module Resque
217
215
  increment_normal_job_count
218
216
  logger.debug("[Resque Multi-Step-Task] Adding #{job_type} job for #{task_id} (args: #{args})")
219
217
 
220
- redis.rpush 'normal_jobs', Yajl::Encoder.encode([job_type.to_s, *args])
221
- run_job job_type, *args if started
218
+ if synchronous?
219
+ self.class.perform(task_id, job_type.to_s, *args)
220
+ else
221
+ Resque::Job.create(queue_name, self.class, task_id, job_type.to_s, *args)
222
+ end
222
223
  end
223
224
 
224
225
  # Finalization jobs are performed after all the normal jobs
@@ -234,25 +235,6 @@ module Resque
234
235
  redis.rpush 'finalize_jobs', Yajl::Encoder.encode([job_type.to_s, *args])
235
236
  end
236
237
 
237
- def start
238
- unless started
239
- while nrm_job_info = redis.lpop('normal_jobs')
240
- job_class, *args = Yajl::Parser.parse(nrm_job_info)
241
- run_job(job_class, *args)
242
- end
243
- @started = true
244
- end
245
- self
246
- end
247
-
248
- def run_job(job_type, *args)
249
- if synchronous?
250
- self.class.perform(task_id, job_type.to_s, *args)
251
- else
252
- Resque::Job.create(queue_name, self.class, task_id, job_type.to_s, *args)
253
- end
254
- end
255
-
256
238
  # A multi-step task is finalizable when all the normal jobs (see
257
239
  # #add_job) have been registered. Finalization jobs will not be
258
240
  # executed until the task becomes finalizable regardless of the
@@ -270,7 +252,9 @@ module Resque
270
252
  # finalization happens after normal jobs, but in the wierd case where
271
253
  # there are only finalization jobs, we need to add a fake normal job
272
254
  # that just kicks off the finalization process
273
- assure_finalization if normal_job_count == 0
255
+ #
256
+ # due to race conditions, always assure finalization - DCM
257
+ assure_finalization #if normal_job_count == 0
274
258
  end
275
259
  end
276
260
 
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "resque-multi-step"
8
- s.version = "2.0.6"
8
+ s.version = "2.0.8"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Peter Williams", "Morgan Whitney", "Cameron Mauch"]
12
- s.date = "2014-09-10"
12
+ s.date = "2014-09-18"
13
13
  s.description = "Provides multi-step tasks with finalization and progress tracking"
14
14
  s.email = "pezra@barelyenough.org"
15
15
  s.extra_rdoc_files = [
@@ -168,3 +168,46 @@ describe "Acceptance: Finalization always runs" do
168
168
  Resque.redis.get("testing counter").to_i.should == 3
169
169
  end
170
170
  end
171
+
172
+ describe "Acceptance: Finalization always runs without block" do
173
+ let(:task) do
174
+ Resque::Plugins::MultiStepTask.create("testing")
175
+ end
176
+
177
+ before do
178
+ Resque.redis.del "testing"
179
+ task
180
+ task.add_job MultiStepAcceptance::CounterJob, "testing counter"
181
+ task.add_job MultiStepAcceptance::CounterJob, "testing counter"
182
+ task.add_finalization_job MultiStepAcceptance::CounterJob, "testing counter"
183
+ sleep 1
184
+ task.finalizable!
185
+ sleep 1
186
+ end
187
+
188
+ it 'should run normal jobs and finalization job' do
189
+ Resque.redis.get("testing counter").to_i.should == 3
190
+ end
191
+ end
192
+
193
+ describe "Acceptance: add job to multi step task via find" do
194
+ let(:task) do
195
+ Resque::Plugins::MultiStepTask.create("testing") do |task|
196
+ task.add_job MultiStepAcceptance::CounterJob, "testing add job"
197
+ task.add_job MultiStepAcceptance::WaitJob, 2
198
+ end
199
+ end
200
+
201
+ before do
202
+ Resque.redis.del "testing"
203
+ task
204
+ sleep 1
205
+ task2 = Resque::Plugins::MultiStepTask.find(task.task_id)
206
+ task2.add_job MultiStepAcceptance::CounterJob, "testing add job"
207
+ sleep 1
208
+ end
209
+
210
+ it 'should run added jobs' do
211
+ Resque.redis.get("testing add job").to_i.should == 2
212
+ end
213
+ end
@@ -44,7 +44,7 @@ module Resque::Plugins
44
44
  end
45
45
 
46
46
  describe MultiStepTask do
47
- let(:task) {MultiStepTask.create("some-task").start}
47
+ let(:task) {MultiStepTask.create("some-task")}
48
48
 
49
49
  it "allows jobs to be added to task" do
50
50
  lambda {
@@ -57,6 +57,11 @@ module Resque::Plugins
57
57
  task.add_job(TestJob)
58
58
  end
59
59
 
60
+ it "queues job when added to async task obtained via find" do
61
+ Resque::Job.should_receive(:create).with(task.queue_name, Resque::Plugins::MultiStepTask, task.task_id, 'TestJob')
62
+ Resque::Plugins::MultiStepTask.find(task.task_id).add_job(TestJob)
63
+ end
64
+
60
65
  it "allows finalization jobs to be added" do
61
66
  task.add_finalization_job(TestJob)
62
67
  end
@@ -86,7 +91,7 @@ module Resque::Plugins
86
91
  end
87
92
 
88
93
  describe MultiStepTask, "synchronous mode" do
89
- let(:task){MultiStepTask.create("some-task").start}
94
+ let(:task){MultiStepTask.create("some-task")}
90
95
 
91
96
  before do
92
97
  MultiStepTask.mode = :sync
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: resque-multi-step
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.6
4
+ version: 2.0.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter Williams
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2014-09-10 00:00:00.000000000 Z
13
+ date: 2014-09-18 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: resque-multi-step