garbageman 0.1.14 → 0.1.15

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.14
1
+ 0.1.15
data/garbageman.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "garbageman"
8
- s.version = "0.1.14"
8
+ s.version = "0.1.15"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Doug Youch"]
12
- s.date = "2013-06-13"
12
+ s.date = "2013-06-19"
13
13
  s.description = "Disable GC while processing requests. By using nginx upstream health checks to garbage collect when no one is there."
14
14
  s.email = "doug@sessionm.com"
15
15
  s.extra_rdoc_files = [
@@ -14,7 +14,7 @@ module GarbageMan
14
14
  include Status
15
15
 
16
16
  attr_accessor :request_count, :will_collect, :will_select_next_server, :show_gc_times
17
- attr_reader :fiber_poll
17
+ attr_reader :fiber_poll, :last_gc_finished_at
18
18
 
19
19
  def initialize
20
20
  @show_gc_times = true
@@ -66,7 +66,8 @@ module GarbageMan
66
66
  starts = Time.now
67
67
  GC.enable
68
68
  GC.start
69
- diff = (Time.now - starts) * 1000
69
+ @last_gc_finished_at = Time.now
70
+ diff = (@last_gc_finished_at - starts) * 1000
70
71
  info "GC took #{'%.2f' % diff}ms for #{@request_count} requests" if @show_gc_times
71
72
  write_gc_yaml server_index, NEXT_SERVER
72
73
 
@@ -174,8 +175,16 @@ module GarbageMan
174
175
  ! forcing_gc?
175
176
  end
176
177
 
178
+ def uses_sockets?
179
+ Config.thin_config.has_key?('socket')
180
+ end
181
+
177
182
  def can_disable?
178
- Config.thin_config.has_key?('socket') && not_queuing? && not_forcing_gc? && enough_running_servers?
183
+ uses_sockets? &&
184
+ not_queuing? &&
185
+ have_not_waited_too_long_to_gc? &&
186
+ not_forcing_gc? &&
187
+ enough_running_servers?
179
188
  end
180
189
 
181
190
  def num_running_servers
@@ -194,6 +203,15 @@ module GarbageMan
194
203
  def socket_file(index)
195
204
  Config.thin_config['socket'].sub '.sock', ".#{index}.sock"
196
205
  end
206
+
207
+ def waited_too_long_to_gc?
208
+ return false unless @last_gc_finished_at
209
+ (Time.now - @last_gc_finished_at) >= Config.max_time_without_gc
210
+ end
211
+
212
+ def have_not_waited_too_long_to_gc?
213
+ ! waited_too_long_to_gc?
214
+ end
197
215
  end
198
216
  end
199
217
 
@@ -25,5 +25,7 @@ module GarbageMan
25
25
  # absolutely make sure we are in the pool again before selecting next server
26
26
  def self.num_request_before_selecting_next_server; 10; end
27
27
  def self.min_servers_to_disable_gc; 2; end
28
+ # if we have not GC in 20 seconds turn back on GC
29
+ def self.max_time_without_gc; 20; end
28
30
  end
29
31
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: garbageman
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.14
4
+ version: 0.1.15
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-06-13 00:00:00.000000000 Z
12
+ date: 2013-06-19 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rdoc
@@ -102,7 +102,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
102
102
  version: '0'
103
103
  segments:
104
104
  - 0
105
- hash: 533476601492460822
105
+ hash: -2750624905344639858
106
106
  required_rubygems_version: !ruby/object:Gem::Requirement
107
107
  none: false
108
108
  requirements: