resque-multi-step 1.1.0 → 1.1.1
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.
- data/Rakefile +2 -1
- data/VERSION +1 -1
- data/lib/resque/plugins/multi_step_task.rb +13 -11
- data/lib/resque/plugins/multi_step_task/finalization_job.rb +0 -1
- data/resque-multi-step.gemspec +8 -5
- data/spec/acceptance/job_handling_spec.rb +11 -9
- data/spec/resque/plugins/multi_step_task_spec.rb +2 -1
- metadata +28 -15
data/Rakefile
CHANGED
@@ -13,7 +13,8 @@ begin
|
|
13
13
|
|
14
14
|
gem.add_development_dependency "rspec", ">= 1.2.9"
|
15
15
|
|
16
|
-
gem.add_dependency 'redis-namespace', '
|
16
|
+
gem.add_dependency 'redis-namespace', '>= 0.8.0', '<= 0.10.0'
|
17
|
+
gem.add_dependency 'yajl-ruby'
|
17
18
|
gem.add_dependency 'resque', '~> 1.10'
|
18
19
|
gem.add_dependency 'resque-fairly', '~> 1.0'
|
19
20
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.1.
|
1
|
+
1.1.1
|
@@ -4,18 +4,19 @@ require 'resque/plugins/multi_step_task/assure_finalization'
|
|
4
4
|
require 'resque/plugins/multi_step_task/finalization_job'
|
5
5
|
require 'resque/plugins/multi_step_task/constantization'
|
6
6
|
require 'resque/plugins/multi_step_task/atomic_counters'
|
7
|
+
require 'logger'
|
8
|
+
require 'yajl'
|
7
9
|
|
8
10
|
module Resque
|
9
11
|
module Plugins
|
12
|
+
# @attr_reader normal_job_count
|
13
|
+
# @attr_reader finalize_job_count
|
14
|
+
# @attr_reader completed_count
|
15
|
+
# @attr_reader failed_count
|
10
16
|
class MultiStepTask
|
11
17
|
class NoSuchMultiStepTask < StandardError; end
|
12
18
|
class NotReadyForFinalization < StandardError; end
|
13
19
|
class FinalizationAlreadyBegun < StandardError; end
|
14
|
-
class StdOutLogger
|
15
|
-
def warn(*args); puts args; end
|
16
|
-
def info(*args); puts args; end
|
17
|
-
def debug(*args); puts args; end
|
18
|
-
end
|
19
20
|
|
20
21
|
class << self
|
21
22
|
include Constantization
|
@@ -62,7 +63,7 @@ module Resque
|
|
62
63
|
redis.sadd("active-tasks", task_id)
|
63
64
|
redis.sismember("active-tasks", task_id)
|
64
65
|
if block_given?
|
65
|
-
yield
|
66
|
+
yield mst
|
66
67
|
mst.finalizable!
|
67
68
|
end
|
68
69
|
|
@@ -94,14 +95,13 @@ module Resque
|
|
94
95
|
def perform_without_maybe_finalize(task_id, job_module_name, *args)
|
95
96
|
task = MultiStepTask.find(task_id)
|
96
97
|
begin
|
97
|
-
|
98
|
-
|
99
|
-
logger.debug("[Resque Multi-Step-Task] Executing #{job_module_name} job for #{task_id} at #{Time.now} (args: #{args})")
|
98
|
+
start_time = Time.now
|
99
|
+
logger.debug("[Resque Multi-Step-Task] Executing #{job_module_name} job for #{task_id} at #{start_time} (args: #{args})")
|
100
100
|
|
101
101
|
# perform the task
|
102
102
|
constantize(job_module_name).perform(*args)
|
103
103
|
|
104
|
-
logger.debug("[Resque Multi-Step-Task] Finished executing #{job_module_name} job for #{task_id} at #{Time.now}, taking #{(Time.now -
|
104
|
+
logger.debug("[Resque Multi-Step-Task] Finished executing #{job_module_name} job for #{task_id} at #{Time.now}, taking #{(Time.now - start_time)} seconds.")
|
105
105
|
rescue Exception => e
|
106
106
|
logger.error("[Resque Multi-Step-Task] #{job_module_name} job failed for #{task_id} at #{Time.now} (args: #{args})")
|
107
107
|
task.increment_failed_count
|
@@ -120,7 +120,7 @@ module Resque
|
|
120
120
|
end
|
121
121
|
|
122
122
|
def logger
|
123
|
-
@@logger ||=
|
123
|
+
@@logger ||= Logger.new(STDERR)
|
124
124
|
end
|
125
125
|
|
126
126
|
# Normally jobs that are part of a multi-step task are run
|
@@ -154,9 +154,11 @@ module Resque
|
|
154
154
|
extend AtomicCounters
|
155
155
|
|
156
156
|
counter :normal_job_count
|
157
|
+
|
157
158
|
counter :finalize_job_count
|
158
159
|
|
159
160
|
counter :completed_count
|
161
|
+
|
160
162
|
counter :failed_count
|
161
163
|
|
162
164
|
|
data/resque-multi-step.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{resque-multi-step}
|
8
|
-
s.version = "1.1.
|
8
|
+
s.version = "1.1.1"
|
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"]
|
12
|
-
s.date = %q{2011-02-
|
12
|
+
s.date = %q{2011-02-28}
|
13
13
|
s.description = %q{Provides multi-step tasks with finalization and progress tracking}
|
14
14
|
s.email = %q{pezra@barelyenough.org}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -59,18 +59,21 @@ Gem::Specification.new do |s|
|
|
59
59
|
|
60
60
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
61
61
|
s.add_development_dependency(%q<rspec>, [">= 1.2.9"])
|
62
|
-
s.add_runtime_dependency(%q<redis-namespace>, ["
|
62
|
+
s.add_runtime_dependency(%q<redis-namespace>, [">= 0.8.0", "<= 0.10.0"])
|
63
|
+
s.add_runtime_dependency(%q<yajl-ruby>, [">= 0"])
|
63
64
|
s.add_runtime_dependency(%q<resque>, ["~> 1.10"])
|
64
65
|
s.add_runtime_dependency(%q<resque-fairly>, ["~> 1.0"])
|
65
66
|
else
|
66
67
|
s.add_dependency(%q<rspec>, [">= 1.2.9"])
|
67
|
-
s.add_dependency(%q<redis-namespace>, ["
|
68
|
+
s.add_dependency(%q<redis-namespace>, [">= 0.8.0", "<= 0.10.0"])
|
69
|
+
s.add_dependency(%q<yajl-ruby>, [">= 0"])
|
68
70
|
s.add_dependency(%q<resque>, ["~> 1.10"])
|
69
71
|
s.add_dependency(%q<resque-fairly>, ["~> 1.0"])
|
70
72
|
end
|
71
73
|
else
|
72
74
|
s.add_dependency(%q<rspec>, [">= 1.2.9"])
|
73
|
-
s.add_dependency(%q<redis-namespace>, ["
|
75
|
+
s.add_dependency(%q<redis-namespace>, [">= 0.8.0", "<= 0.10.0"])
|
76
|
+
s.add_dependency(%q<yajl-ruby>, [">= 0"])
|
74
77
|
s.add_dependency(%q<resque>, ["~> 1.10"])
|
75
78
|
s.add_dependency(%q<resque-fairly>, ["~> 1.0"])
|
76
79
|
end
|
@@ -89,22 +89,24 @@ end
|
|
89
89
|
|
90
90
|
describe "Acceptance: Task with retried finalization failure" do
|
91
91
|
let(:task) {
|
92
|
-
|
92
|
+
@counter_key = "testing-counter-#{Time.now.to_i}"
|
93
|
+
@fin_key = "fin-key-#{Time.now.to_i}"
|
94
|
+
Resque.redis.del @counter_key
|
95
|
+
Resque.redis.del @fin_key
|
93
96
|
Resque::Plugins::MultiStepTask.create("testing") do |task|
|
94
|
-
task.add_finalization_job MultiStepAcceptance::FailOnceJob,
|
95
|
-
task.add_finalization_job MultiStepAcceptance::CounterJob,
|
97
|
+
task.add_finalization_job MultiStepAcceptance::FailOnceJob, @fin_key
|
98
|
+
task.add_finalization_job MultiStepAcceptance::CounterJob, @counter_key
|
96
99
|
end
|
97
100
|
}
|
98
101
|
|
99
102
|
before do
|
100
103
|
Resque::Failure.clear
|
101
|
-
|
102
|
-
|
104
|
+
|
103
105
|
task
|
104
|
-
sleep
|
105
|
-
|
106
|
+
sleep 5
|
107
|
+
|
106
108
|
Resque::Failure.requeue 0
|
107
|
-
sleep
|
109
|
+
sleep 5
|
108
110
|
end
|
109
111
|
|
110
112
|
it "completes task" do
|
@@ -115,7 +117,7 @@ describe "Acceptance: Task with retried finalization failure" do
|
|
115
117
|
|
116
118
|
|
117
119
|
it "runs following finalization jobs" do
|
118
|
-
Resque.redis.get(
|
120
|
+
Resque.redis.get(@counter_key).should == "1"
|
119
121
|
end
|
120
122
|
|
121
123
|
end
|
@@ -123,7 +123,8 @@ module Resque::Plugins
|
|
123
123
|
task.add_finalization_job(MyFinalJob, "final", "args")
|
124
124
|
task.add_job(TestJob, "my", "args") rescue nil
|
125
125
|
task.finalizable!
|
126
|
-
|
126
|
+
|
127
|
+
task.should be_incomplete_because_of_error
|
127
128
|
end
|
128
129
|
|
129
130
|
it "knows it has failed if a finalized job raises an exception" do
|
metadata
CHANGED
@@ -1,13 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: resque-multi-step
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash: 19
|
5
4
|
prerelease: false
|
6
5
|
segments:
|
7
6
|
- 1
|
8
7
|
- 1
|
9
|
-
-
|
10
|
-
version: 1.1.
|
8
|
+
- 1
|
9
|
+
version: 1.1.1
|
11
10
|
platform: ruby
|
12
11
|
authors:
|
13
12
|
- Peter Williams
|
@@ -16,7 +15,7 @@ autorequire:
|
|
16
15
|
bindir: bin
|
17
16
|
cert_chain: []
|
18
17
|
|
19
|
-
date: 2011-02-
|
18
|
+
date: 2011-02-28 00:00:00 -07:00
|
20
19
|
default_executable:
|
21
20
|
dependencies:
|
22
21
|
- !ruby/object:Gem::Dependency
|
@@ -27,7 +26,6 @@ dependencies:
|
|
27
26
|
requirements:
|
28
27
|
- - ">="
|
29
28
|
- !ruby/object:Gem::Version
|
30
|
-
hash: 13
|
31
29
|
segments:
|
32
30
|
- 1
|
33
31
|
- 2
|
@@ -41,46 +39,63 @@ dependencies:
|
|
41
39
|
requirement: &id002 !ruby/object:Gem::Requirement
|
42
40
|
none: false
|
43
41
|
requirements:
|
44
|
-
- -
|
42
|
+
- - ">="
|
45
43
|
- !ruby/object:Gem::Version
|
46
|
-
hash: 63
|
47
44
|
segments:
|
48
45
|
- 0
|
49
46
|
- 8
|
50
47
|
- 0
|
51
48
|
version: 0.8.0
|
49
|
+
- - <=
|
50
|
+
- !ruby/object:Gem::Version
|
51
|
+
segments:
|
52
|
+
- 0
|
53
|
+
- 10
|
54
|
+
- 0
|
55
|
+
version: 0.10.0
|
52
56
|
type: :runtime
|
53
57
|
version_requirements: *id002
|
54
58
|
- !ruby/object:Gem::Dependency
|
55
|
-
name:
|
59
|
+
name: yajl-ruby
|
56
60
|
prerelease: false
|
57
61
|
requirement: &id003 !ruby/object:Gem::Requirement
|
62
|
+
none: false
|
63
|
+
requirements:
|
64
|
+
- - ">="
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
segments:
|
67
|
+
- 0
|
68
|
+
version: "0"
|
69
|
+
type: :runtime
|
70
|
+
version_requirements: *id003
|
71
|
+
- !ruby/object:Gem::Dependency
|
72
|
+
name: resque
|
73
|
+
prerelease: false
|
74
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
58
75
|
none: false
|
59
76
|
requirements:
|
60
77
|
- - ~>
|
61
78
|
- !ruby/object:Gem::Version
|
62
|
-
hash: 27
|
63
79
|
segments:
|
64
80
|
- 1
|
65
81
|
- 10
|
66
82
|
version: "1.10"
|
67
83
|
type: :runtime
|
68
|
-
version_requirements: *
|
84
|
+
version_requirements: *id004
|
69
85
|
- !ruby/object:Gem::Dependency
|
70
86
|
name: resque-fairly
|
71
87
|
prerelease: false
|
72
|
-
requirement: &
|
88
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
73
89
|
none: false
|
74
90
|
requirements:
|
75
91
|
- - ~>
|
76
92
|
- !ruby/object:Gem::Version
|
77
|
-
hash: 15
|
78
93
|
segments:
|
79
94
|
- 1
|
80
95
|
- 0
|
81
96
|
version: "1.0"
|
82
97
|
type: :runtime
|
83
|
-
version_requirements: *
|
98
|
+
version_requirements: *id005
|
84
99
|
description: Provides multi-step tasks with finalization and progress tracking
|
85
100
|
email: pezra@barelyenough.org
|
86
101
|
executables: []
|
@@ -126,7 +141,6 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
126
141
|
requirements:
|
127
142
|
- - ">="
|
128
143
|
- !ruby/object:Gem::Version
|
129
|
-
hash: 3
|
130
144
|
segments:
|
131
145
|
- 0
|
132
146
|
version: "0"
|
@@ -135,7 +149,6 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
135
149
|
requirements:
|
136
150
|
- - ">="
|
137
151
|
- !ruby/object:Gem::Version
|
138
|
-
hash: 3
|
139
152
|
segments:
|
140
153
|
- 0
|
141
154
|
version: "0"
|