resque-director 2.2.1 → 2.2.2
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/VERSION +1 -1
- data/lib/resque/plugins/director/scaler.rb +9 -6
- data/resque-director.gemspec +3 -3
- data/spec/resque/plugins/director/scaler_spec.rb +38 -9
- metadata +12 -12
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
2.2.
|
|
1
|
+
2.2.2
|
|
@@ -26,22 +26,25 @@ module Resque
|
|
|
26
26
|
end
|
|
27
27
|
|
|
28
28
|
def scale_within_requirements
|
|
29
|
-
|
|
29
|
+
tracker = WorkerTracker.new
|
|
30
|
+
number_of_workers = tracker.total_for_requirements
|
|
30
31
|
if number_of_workers > 0
|
|
31
|
-
|
|
32
|
+
set_last_scaled unless start(number_of_workers) == false
|
|
32
33
|
elsif number_of_workers < 0
|
|
33
|
-
|
|
34
|
+
set_last_scaled unless stop(tracker, number_of_workers * -1) == false
|
|
34
35
|
end
|
|
35
36
|
end
|
|
36
37
|
|
|
37
38
|
def scaling(number_of_workers=1)
|
|
38
39
|
return unless time_to_scale? && number_of_workers > 0
|
|
39
|
-
unless yield == false
|
|
40
|
-
Resque.redis.set("last_scaled_#{[Config.queue].flatten.join('')}", Time.now.utc.to_i)
|
|
41
|
-
end
|
|
40
|
+
set_last_scaled unless yield == false
|
|
42
41
|
end
|
|
43
42
|
|
|
44
43
|
private
|
|
44
|
+
|
|
45
|
+
def set_last_scaled
|
|
46
|
+
Resque.redis.set("last_scaled_#{[Config.queue].flatten.join('')}", Time.now.utc.to_i)
|
|
47
|
+
end
|
|
45
48
|
|
|
46
49
|
def time_to_scale?
|
|
47
50
|
last_time = Resque.redis.get("last_scaled_#{[Config.queue].flatten.join('')}")
|
data/resque-director.gemspec
CHANGED
|
@@ -5,11 +5,11 @@
|
|
|
5
5
|
|
|
6
6
|
Gem::Specification.new do |s|
|
|
7
7
|
s.name = %q{resque-director}
|
|
8
|
-
s.version = "2.2.
|
|
8
|
+
s.version = "2.2.2"
|
|
9
9
|
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
|
11
11
|
s.authors = [%q{Nolan Frausto}]
|
|
12
|
-
s.date = %q{2011-09-
|
|
12
|
+
s.date = %q{2011-09-09}
|
|
13
13
|
s.description = %q{resque plugin for automatically scaling workers based on the amount of time it takes a job to go through the queue and/or the length of the queue }
|
|
14
14
|
s.email = %q{nrfrausto@gmail.com}
|
|
15
15
|
s.extra_rdoc_files = [
|
|
@@ -42,7 +42,7 @@ Gem::Specification.new do |s|
|
|
|
42
42
|
s.homepage = %q{http://github.com/frausto/resque-director}
|
|
43
43
|
s.licenses = [%q{MIT}]
|
|
44
44
|
s.require_paths = [%q{lib}]
|
|
45
|
-
s.rubygems_version = %q{1.8.
|
|
45
|
+
s.rubygems_version = %q{1.8.8}
|
|
46
46
|
s.summary = %q{A resque plugin for automatically scaling workers}
|
|
47
47
|
|
|
48
48
|
if s.respond_to? :specification_version then
|
|
@@ -232,32 +232,61 @@ describe Resque::Plugins::Director::Scaler do
|
|
|
232
232
|
describe "#scale_within_requirements" do
|
|
233
233
|
it "should not scale up workers if the minumum number or greater are already running" do
|
|
234
234
|
Resque::Worker.new(:test).register_worker
|
|
235
|
-
subject.should_not_receive(:
|
|
235
|
+
subject.should_not_receive(:start)
|
|
236
|
+
subject.should_not_receive(:stop)
|
|
236
237
|
subject.scale_within_requirements
|
|
237
238
|
end
|
|
238
239
|
|
|
239
240
|
it "should scale up the minimum number of workers if non are running" do
|
|
240
241
|
Resque::Plugins::Director::Config.setup :min_workers => 2
|
|
241
|
-
subject.should_receive(:
|
|
242
|
+
subject.should_receive(:start).with(2)
|
|
242
243
|
subject.scale_within_requirements
|
|
243
244
|
end
|
|
244
245
|
|
|
246
|
+
it "should scale workers ignoring the last scaled time" do
|
|
247
|
+
Resque::Plugins::Director::Config.setup :min_workers => 2, :wait_time => 60
|
|
248
|
+
subject.scaling { true }
|
|
249
|
+
subject.should_receive(:start).with(2)
|
|
250
|
+
subject.scale_within_requirements
|
|
251
|
+
end
|
|
252
|
+
|
|
253
|
+
it "should set the last scaled time if scaling up" do
|
|
254
|
+
@now = Time.now
|
|
255
|
+
Time.stub(:now => @now)
|
|
256
|
+
Resque::Plugins::Director::Config.setup :min_workers => 1, :wait_time => 60
|
|
257
|
+
subject.should_receive(:start)
|
|
258
|
+
subject.scale_within_requirements
|
|
259
|
+
Resque.redis.get("last_scaled_test").to_i.should == @now.utc.to_i
|
|
260
|
+
end
|
|
261
|
+
|
|
262
|
+
it "should set the last scaled time if scaling down" do
|
|
263
|
+
@now = Time.now
|
|
264
|
+
Time.stub(:now => @now)
|
|
265
|
+
Resque::Plugins::Director::Config.setup :max_workers => 1, :wait_time => 60
|
|
266
|
+
workers = 2.times.map { Resque::Worker.new(:test) }
|
|
267
|
+
Resque.should_receive(:workers).and_return(workers)
|
|
268
|
+
subject.should_receive(:stop)
|
|
269
|
+
|
|
270
|
+
subject.scale_within_requirements
|
|
271
|
+
Resque.redis.get("last_scaled_test").to_i.should == @now.utc.to_i
|
|
272
|
+
end
|
|
273
|
+
|
|
245
274
|
it "should ensure at least one worker is running if min_workers is less than zero" do
|
|
246
275
|
Resque::Plugins::Director::Config.setup :min_workers => -10
|
|
247
|
-
subject.should_receive(:
|
|
276
|
+
subject.should_receive(:start).with(1)
|
|
248
277
|
subject.scale_within_requirements
|
|
249
278
|
end
|
|
250
279
|
|
|
251
280
|
it "should ensure at least one worker is running if min_workers is zero" do
|
|
252
281
|
Resque::Plugins::Director::Config.setup :min_workers => 0
|
|
253
|
-
subject.should_receive(:
|
|
282
|
+
subject.should_receive(:start).with(1)
|
|
254
283
|
subject.scale_within_requirements
|
|
255
284
|
end
|
|
256
285
|
|
|
257
286
|
it "should scale up the minimum number of workers if less than the minimum are running" do
|
|
258
287
|
Resque::Plugins::Director::Config.setup :min_workers => 2
|
|
259
288
|
Resque::Worker.new(:test).register_worker
|
|
260
|
-
subject.should_receive(:
|
|
289
|
+
subject.should_receive(:start).with(1)
|
|
261
290
|
subject.scale_within_requirements
|
|
262
291
|
end
|
|
263
292
|
|
|
@@ -266,7 +295,7 @@ describe Resque::Plugins::Director::Scaler do
|
|
|
266
295
|
workers = 2.times.map { Resque::Worker.new(:test) }
|
|
267
296
|
Resque.should_receive(:workers).and_return(workers)
|
|
268
297
|
|
|
269
|
-
subject.should_receive(:
|
|
298
|
+
subject.should_receive(:stop).with(anything, 1)
|
|
270
299
|
subject.scale_within_requirements
|
|
271
300
|
end
|
|
272
301
|
|
|
@@ -275,19 +304,19 @@ describe Resque::Plugins::Director::Scaler do
|
|
|
275
304
|
workers = 1.times.map { Resque::Worker.new(:test) }
|
|
276
305
|
Resque.should_receive(:workers).and_return(workers)
|
|
277
306
|
|
|
278
|
-
subject.should_not_receive(:
|
|
307
|
+
subject.should_not_receive(:stop)
|
|
279
308
|
subject.scale_within_requirements
|
|
280
309
|
end
|
|
281
310
|
|
|
282
311
|
it "should ignore workers from other queues" do
|
|
283
312
|
Resque::Worker.new(:other).register_worker
|
|
284
|
-
subject.should_receive(:
|
|
313
|
+
subject.should_receive(:start).with(1)
|
|
285
314
|
subject.scale_within_requirements
|
|
286
315
|
end
|
|
287
316
|
|
|
288
317
|
it "should ignore workers on multiple queues" do
|
|
289
318
|
Resque::Worker.new(:test, :other).register_worker
|
|
290
|
-
subject.should_receive(:
|
|
319
|
+
subject.should_receive(:start).with(1)
|
|
291
320
|
subject.scale_within_requirements
|
|
292
321
|
end
|
|
293
322
|
end
|
metadata
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: resque-director
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
hash:
|
|
4
|
+
hash: 3
|
|
5
5
|
prerelease:
|
|
6
6
|
segments:
|
|
7
7
|
- 2
|
|
8
8
|
- 2
|
|
9
|
-
-
|
|
10
|
-
version: 2.2.
|
|
9
|
+
- 2
|
|
10
|
+
version: 2.2.2
|
|
11
11
|
platform: ruby
|
|
12
12
|
authors:
|
|
13
13
|
- Nolan Frausto
|
|
@@ -15,10 +15,9 @@ autorequire:
|
|
|
15
15
|
bindir: bin
|
|
16
16
|
cert_chain: []
|
|
17
17
|
|
|
18
|
-
date: 2011-09-
|
|
18
|
+
date: 2011-09-09 00:00:00 Z
|
|
19
19
|
dependencies:
|
|
20
20
|
- !ruby/object:Gem::Dependency
|
|
21
|
-
type: :runtime
|
|
22
21
|
requirement: &id001 !ruby/object:Gem::Requirement
|
|
23
22
|
none: false
|
|
24
23
|
requirements:
|
|
@@ -32,8 +31,8 @@ dependencies:
|
|
|
32
31
|
version_requirements: *id001
|
|
33
32
|
name: resque
|
|
34
33
|
prerelease: false
|
|
34
|
+
type: :runtime
|
|
35
35
|
- !ruby/object:Gem::Dependency
|
|
36
|
-
type: :development
|
|
37
36
|
requirement: &id002 !ruby/object:Gem::Requirement
|
|
38
37
|
none: false
|
|
39
38
|
requirements:
|
|
@@ -48,8 +47,8 @@ dependencies:
|
|
|
48
47
|
version_requirements: *id002
|
|
49
48
|
name: rspec
|
|
50
49
|
prerelease: false
|
|
51
|
-
- !ruby/object:Gem::Dependency
|
|
52
50
|
type: :development
|
|
51
|
+
- !ruby/object:Gem::Dependency
|
|
53
52
|
requirement: &id003 !ruby/object:Gem::Requirement
|
|
54
53
|
none: false
|
|
55
54
|
requirements:
|
|
@@ -64,8 +63,8 @@ dependencies:
|
|
|
64
63
|
version_requirements: *id003
|
|
65
64
|
name: bundler
|
|
66
65
|
prerelease: false
|
|
67
|
-
- !ruby/object:Gem::Dependency
|
|
68
66
|
type: :development
|
|
67
|
+
- !ruby/object:Gem::Dependency
|
|
69
68
|
requirement: &id004 !ruby/object:Gem::Requirement
|
|
70
69
|
none: false
|
|
71
70
|
requirements:
|
|
@@ -80,8 +79,8 @@ dependencies:
|
|
|
80
79
|
version_requirements: *id004
|
|
81
80
|
name: jeweler
|
|
82
81
|
prerelease: false
|
|
83
|
-
- !ruby/object:Gem::Dependency
|
|
84
82
|
type: :development
|
|
83
|
+
- !ruby/object:Gem::Dependency
|
|
85
84
|
requirement: &id005 !ruby/object:Gem::Requirement
|
|
86
85
|
none: false
|
|
87
86
|
requirements:
|
|
@@ -94,8 +93,8 @@ dependencies:
|
|
|
94
93
|
version_requirements: *id005
|
|
95
94
|
name: rcov
|
|
96
95
|
prerelease: false
|
|
97
|
-
- !ruby/object:Gem::Dependency
|
|
98
96
|
type: :development
|
|
97
|
+
- !ruby/object:Gem::Dependency
|
|
99
98
|
requirement: &id006 !ruby/object:Gem::Requirement
|
|
100
99
|
none: false
|
|
101
100
|
requirements:
|
|
@@ -110,8 +109,8 @@ dependencies:
|
|
|
110
109
|
version_requirements: *id006
|
|
111
110
|
name: yajl-ruby
|
|
112
111
|
prerelease: false
|
|
113
|
-
- !ruby/object:Gem::Dependency
|
|
114
112
|
type: :development
|
|
113
|
+
- !ruby/object:Gem::Dependency
|
|
115
114
|
requirement: &id007 !ruby/object:Gem::Requirement
|
|
116
115
|
none: false
|
|
117
116
|
requirements:
|
|
@@ -126,6 +125,7 @@ dependencies:
|
|
|
126
125
|
version_requirements: *id007
|
|
127
126
|
name: json
|
|
128
127
|
prerelease: false
|
|
128
|
+
type: :development
|
|
129
129
|
description: "resque plugin for automatically scaling workers based on the amount of time it takes a job to go through the queue and/or the length of the queue "
|
|
130
130
|
email: nrfrausto@gmail.com
|
|
131
131
|
executables: []
|
|
@@ -186,7 +186,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
186
186
|
requirements: []
|
|
187
187
|
|
|
188
188
|
rubyforge_project:
|
|
189
|
-
rubygems_version: 1.8.
|
|
189
|
+
rubygems_version: 1.8.8
|
|
190
190
|
signing_key:
|
|
191
191
|
specification_version: 3
|
|
192
192
|
summary: A resque plugin for automatically scaling workers
|