garbageman 0.2.6 → 0.2.7

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- NTU0OGJhZGVmOGJhNDE4MTBlODA0ODBmZTgyOTkxNDhlMjJiOGVjMA==
4
+ NmM0NDc0NGU5MTVhODlkZDM5ZTkyNzE5NDI5MDk2NjFjYTRjNWRiZA==
5
5
  data.tar.gz: !binary |-
6
- NmFjYWYzMDdkNjUwYWQ3YjhiMzk1MDMyMjJkYjFjMTViZjlkYmRkMw==
6
+ MTE2NWEyYTUwMmQ3ZDI4ZmQzMWEyNmM5YWVmNzFmYjk2M2ZiNGM1ZA==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- M2JhZjkzNjdlNTg5YmFmZmMzOTQzYzFkMjFjYTE3NzZmNTdlMTY5ZTg4OThh
10
- ZjgxZDYwZjRlNjAxNjliYzIyYmFmNWE3ZmRkZjZjYzNjZTdjMTJjY2QyZTcx
11
- NWMwMDNmYTg3MzY3ZTMyNzUyMTk2ZDA2ZTViNzFkMmQ4YmQxOTM=
9
+ YmNjNzNkODUxYzJkYzQ0ODVjYzVkMjBkM2FlMDE1Y2JmZDEyNjY1OTE0NmVl
10
+ MmIzNzRjMmY3OTI3MjRjMTE3ZmJmZjQzM2RmYmY5ZGU4MjBiZjc5YzgyMGUw
11
+ MDNjMmU0ZTNmMTI1YTVlMmZhZjFmNjdmYTY5N2EwMzFkMjAxNDk=
12
12
  data.tar.gz: !binary |-
13
- ZDIwMjZlZTU3ZTk1OGUwMjlmZjhhY2NkZmFmNWVhNTg4ZjY1ZGMzZjQ3ZGI3
14
- ZDg1YzJmYjU3MjllNDNhOGUyYjNmMjAzMWM1YzU1OGMwMjJmOTg4NGRhYTY5
15
- MGVmYjBlYWQ2YmJjMDlkNmM5MDYxN2EzZmEzNjBhZmE1NjYwMDM=
13
+ ZGJjZjVlZTk2NTYxZjE5ZDA3NTQ2ZTU1YWNlZmRiMWNiZWE4Y2RhZThlNmZk
14
+ M2M1ODI1NDFmMGExMDM4YzdkMjJiYzdhYmI5ZjgyYjY4MzdiZjFiMTBmYmM2
15
+ ZWRiNzIzNjFlZDM4ZjRmNDk0YzI3ZjUyYmQ0ZThmMmM4ZjRiZjU=
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.6
1
+ 0.2.7
data/garbageman.gemspec CHANGED
@@ -2,14 +2,16 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
+ # stub: garbageman 0.2.7 ruby lib
5
6
 
6
7
  Gem::Specification.new do |s|
7
8
  s.name = "garbageman"
8
- s.version = "0.2.6"
9
+ s.version = "0.2.7"
9
10
 
10
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
+ s.require_paths = ["lib"]
11
13
  s.authors = ["Doug Youch"]
12
- s.date = "2014-02-20"
14
+ s.date = "2015-07-29"
13
15
  s.description = "Disable GC while processing requests. By using nginx upstream health checks to garbage collect when no one is there."
14
16
  s.email = "doug@sessionm.com"
15
17
  s.extra_rdoc_files = [
@@ -39,12 +41,11 @@ Gem::Specification.new do |s|
39
41
  ]
40
42
  s.homepage = "http://github.com/dyouch5@yahoo.com/garbageman"
41
43
  s.licenses = ["MIT"]
42
- s.require_paths = ["lib"]
43
- s.rubygems_version = "1.8.23"
44
+ s.rubygems_version = "2.4.6"
44
45
  s.summary = "Process requests without garbage collection"
45
46
 
46
47
  if s.respond_to? :specification_version then
47
- s.specification_version = 3
48
+ s.specification_version = 4
48
49
 
49
50
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
50
51
  s.add_development_dependency(%q<rdoc>, ["~> 3.12"])
@@ -20,12 +20,13 @@ module GarbageMan
20
20
  WAITED_TOO_LONG = "waited %.2f seconds to gc"
21
21
  DISABLE_GC = "disabling gc"
22
22
  CANT_TURN_OFF = "enabling gc, can not turn off"
23
+ CONNECTIONS_DID_NOT_DRAIN_IN_TIME = 'connections did not drain in time'
23
24
  end
24
25
 
25
26
  include Messages
26
27
 
27
28
  attr_accessor :request_count, :will_collect, :will_select_next_server, :show_gc_times
28
- attr_reader :fiber_poll, :last_gc_finished_at, :before_gc_callbacks, :after_gc_callbacks
29
+ attr_reader :fiber_poll, :last_gc_finished_at, :before_gc_callbacks, :after_gc_callbacks, :selected_to_collect_at
29
30
 
30
31
  def initialize
31
32
  @show_gc_times = true
@@ -57,6 +58,7 @@ module GarbageMan
57
58
  end
58
59
 
59
60
  if should_collect?
61
+ @selected_to_collect_at ||= Time.now
60
62
  write_gc_yaml server_index, WILL_COLLECT
61
63
  false
62
64
  else
@@ -74,8 +76,15 @@ module GarbageMan
74
76
  GC.enable
75
77
  end
76
78
 
77
- return unless can_collect?
78
-
79
+ unless can_collect?
80
+ return unless will_collect # return unless been selected to gc
81
+ if waited_too_long_for_connections_to_drain?
82
+ warn CONNECTIONS_DID_NOT_DRAIN_IN_TIME
83
+ else
84
+ return
85
+ end
86
+ end
87
+
79
88
  before_gc_callbacks.each(&:call)
80
89
 
81
90
  write_gc_yaml server_index, STARTING
@@ -159,6 +168,7 @@ module GarbageMan
159
168
  @request_count = 0
160
169
  @will_collect = false
161
170
  @will_select_next_server = false
171
+ @selected_to_collect_at = nil
162
172
  end
163
173
 
164
174
  def busy?
@@ -233,6 +243,10 @@ module GarbageMan
233
243
  return false unless @last_gc_finished_at
234
244
  (Time.now - @last_gc_finished_at) >= Config.max_time_without_gc
235
245
  end
246
+
247
+ def waited_too_long_for_connections_to_drain?
248
+ @selected_to_collect_at && (Time.now - @selected_to_collect_at) >= Config.max_connection_drain_time
249
+ end
236
250
  end
237
251
  end
238
252
 
@@ -47,5 +47,10 @@ module GarbageMan
47
47
  @@max_time_without_gc = 60
48
48
  def self.max_time_without_gc; @@max_time_without_gc; end
49
49
  def self.max_time_without_gc=(time); @@max_time_without_gc = time; end
50
+
51
+ # max time to wait for connections to drain
52
+ @@max_connection_drain_time = 60
53
+ def self.max_connection_drain_time; @@max_connection_drain_time; end
54
+ def self.max_connection_drain_time=(time); @@max_connection_drain_time = time; end
50
55
  end
51
56
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: garbageman
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.6
4
+ version: 0.2.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Doug Youch
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-02-20 00:00:00.000000000 Z
11
+ date: 2015-07-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rdoc
@@ -100,8 +100,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
100
100
  version: '0'
101
101
  requirements: []
102
102
  rubyforge_project:
103
- rubygems_version: 2.2.2
103
+ rubygems_version: 2.4.6
104
104
  signing_key:
105
- specification_version: 3
105
+ specification_version: 4
106
106
  summary: Process requests without garbage collection
107
107
  test_files: []