our-eel-hacks 0.0.13 → 0.0.14

Sign up to get free protection for your applications and to get access to all the features.
@@ -99,6 +99,7 @@ module OurEelHacks
99
99
  logger.info{ "Autoscaler configured for #{flavor || "{{unknown flavor}}"}"}
100
100
 
101
101
  update_dynos(dyno_info.count, Time.now)
102
+ update_scaling_delay(0)
102
103
  end
103
104
 
104
105
  MILLIS_PER_DAY = 24 * 60 * 60 * 1000
@@ -152,7 +153,7 @@ module OurEelHacks
152
153
 
153
154
  set_dynos(target_dynos, moment)
154
155
 
155
- break_cadence(starting_wait)
156
+ update_scaling_delay(starting_wait)
156
157
  rescue => ex
157
158
  logger.warn{ "Problem scaling: #{ex.inspect} \t#{ex.backtrace.join("\t\n")}" }
158
159
  end
@@ -193,15 +194,15 @@ module OurEelHacks
193
194
  return 0
194
195
  end
195
196
 
196
- def break_cadence(starting_wait)
197
+ def update_scaling_delay(starting_wait)
198
+ @millis_til_next_scale = scaling_frequency * @dynos
197
199
  if starting_wait > millis_til_next_scale
198
- @millis_til_next_scale = rand((starting_wait..@millis_til_next_scale))
200
+ @millis_til_next_scale = rand((@millis_til_next_scale..starting_wait))
199
201
  end
200
202
  end
201
203
 
202
204
  def update_dynos(new_value, moment)
203
205
  if new_value != dynos
204
- @millis_til_next_scale = scaling_frequency * new_value
205
206
  @last_scaled = moment
206
207
  @entered_soft = moment
207
208
  end
@@ -56,10 +56,19 @@ describe OurEelHacks::Autoscaler do
56
56
  Time.now
57
57
  end
58
58
 
59
+ before :each do
60
+ @time_index = 0
61
+ end
62
+
59
63
  def time_adjust(millis)
64
+ @time_index = millis
60
65
  Time.stub!(:now).and_return(Time.at(starting_time, millis * 1000))
61
66
  end
62
67
 
68
+ def time_advance(millis)
69
+ time_adjust(@time_index + millis)
70
+ end
71
+
63
72
  let :logger do
64
73
  Logger.new($stdout).tap{|lgr| lgr.level = Logger::DEBUG }
65
74
  end
@@ -125,6 +134,24 @@ describe OurEelHacks::Autoscaler do
125
134
  heroku.should_receive(:ps_scale).with(app_name, hash_including(:qty => 2))
126
135
  autoscaler.scale(hard_low)
127
136
  end
137
+
138
+ it "should adjust its timing to break cadence after scaling down", :pending => "building VCR cassette" do
139
+ autoscaler.scale(hard_low)
140
+ autoscaler.millis_til_next_scale.should < expected_scale_frequency
141
+ autoscaler.millis_til_next_scale.should > 2 * scaling_freq
142
+
143
+ time_advance(autoscaler.millis_til_next_scale + 5)
144
+
145
+ autoscaler.scale(ideal_value)
146
+
147
+ autoscaler.millis_til_next_scale.should == 2 * scaling_freq
148
+
149
+ time_advance((2 * scaling_freq) + 5)
150
+
151
+ autoscaler.scale(hard_low)
152
+ autoscaler.millis_til_next_scale.should < 2 * scaling_freq
153
+ autoscaler.millis_til_next_scale.should > scaling_freq
154
+ end
128
155
  end
129
156
 
130
157
  describe "soft upper limit" do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: our-eel-hacks
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.13
4
+ version: 0.0.14
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2012-05-24 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: corundum
16
- requirement: &77444910 !ruby/object:Gem::Requirement
16
+ requirement: &81350710 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,18 +21,22 @@ dependencies:
21
21
  version: 0.0.1
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *77444910
24
+ version_requirements: *81350710
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: heroku
27
- requirement: &77444290 !ruby/object:Gem::Requirement
27
+ requirement: &81465420 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
31
31
  - !ruby/object:Gem::Version
32
32
  version: 2.25.0
33
+ segments:
34
+ - 2
35
+ - 25
36
+ - 0
33
37
  type: :runtime
34
38
  prerelease: false
35
- version_requirements: *77444290
39
+ version_requirements: *81465420
36
40
  description: ! " Middleware for Rack and Sidekiq to scale heroku.\n\n A heroku process
37
41
  knows everything it needs in order to scale itself. A little configuration, and
38
42
  you're set.\n"
@@ -64,7 +68,7 @@ rdoc_options:
64
68
  - --main
65
69
  - doc/README
66
70
  - --title
67
- - our-eel-hacks-0.0.13 RDoc
71
+ - our-eel-hacks-0.0.14 RDoc
68
72
  require_paths:
69
73
  - lib/
70
74
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -75,7 +79,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
75
79
  version: '0'
76
80
  segments:
77
81
  - 0
78
- hash: -783417567
82
+ hash: 962110657
79
83
  required_rubygems_version: !ruby/object:Gem::Requirement
80
84
  none: false
81
85
  requirements: