resque-multi-step 2.0.6 → 2.0.8

Sign up to get free protection for your applications and to get access to all the features.
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