spool 0.0.1 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: cd69246ea37212c4be4790fffcf8605c16f31e2b
4
- data.tar.gz: 556ff1e0891bd8e83407f837a522f1aa6bd770cc
3
+ metadata.gz: 0548f5c405ead7e5fa0f5b61fe9d715b289385c3
4
+ data.tar.gz: ae94274bf5d724f65ba0128d9e1ecbe68e306de9
5
5
  SHA512:
6
- metadata.gz: c7e8b6b9799b61d376564d6f97edd784477acbb0fc66fffdc916771788f7b7f34659d22ed676ed27954b687a873d829df5647483bae3cfb19bd739abafcb8012
7
- data.tar.gz: bbdb9307edea81364ca9eb6732f09686ef8a676273dffc25f38532867a3d58266874ac72c035568fe3322a43e499029d00560d89c73c53afd9662dedd6255193
6
+ metadata.gz: 1c7b0bec7c5d9aa71f97a3026819df40d0e7bb809c903388bc1d3ccca9361f25b86b48fdf3955590eb0b755d27fd73adeaae5771511af223c64c9b7c5b70712e
7
+ data.tar.gz: 2c4f1770e103ae67b8e2ad504d1a573054937f7310e58fce96834bd2cc769f37ba4853fa735ef79373e8e5f4767f84d3c8f41a6fb3bf00528004e16b658f6f30
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- ruby 2.1
1
+ ruby 2.0
data/.travis.yml CHANGED
@@ -2,4 +2,5 @@ language: ruby
2
2
  rvm:
3
3
  - 1.9.3
4
4
  - 2.0
5
- - 2.1
5
+ - 2.1
6
+ - 2.2
data/bin/spool CHANGED
@@ -8,6 +8,7 @@ end
8
8
  pid = fork do
9
9
  require File.expand_path('../lib/spool', File.dirname(__FILE__))
10
10
  config = Spool::DSL.configure ARGV.first
11
+ $PROGRAM_NAME = "ruby spool #{config.name}"
11
12
  Spool::Pool.new(config).start
12
13
  end
13
14
 
@@ -1,13 +1,23 @@
1
1
  module Spool
2
2
  class Configuration
3
3
 
4
- attr_accessor :processes,
4
+ attr_accessor :name,
5
+ :processes,
5
6
  :env,
6
7
  :dir,
7
8
  :command,
8
- :pidfile,
9
+ :pid_file,
9
10
  :restart_condition,
10
- :source_file
11
+ :source_file,
12
+ :stop_signal,
13
+ :kill_signal,
14
+ :log_file,
15
+ :log_level,
16
+ :log_formatter
17
+
18
+ def name
19
+ @name ||= 'SPOOL'
20
+ end
11
21
 
12
22
  def env
13
23
  @env ||= {}
@@ -17,8 +27,44 @@ module Spool
17
27
  @dir ||= source_file ? File.dirname(source_file) : Dir.pwd
18
28
  end
19
29
 
20
- def pidfile
21
- @pidfile ||= File.join(dir, (source_file ? "#{File.basename(source_file, '.*')}.pid" : 'pool.pid'))
30
+ def pid_file
31
+ @pid_file ||= File.join(dir, (source_file ? "#{File.basename(source_file, '.*')}.pid" : 'pool.pid'))
32
+ end
33
+
34
+ def restart_condition
35
+ @restart_condition ||= Proc.new do |p|
36
+ false
37
+ end
38
+ end
39
+
40
+ def stop_signal
41
+ @stop_signal ||= :QUIT
42
+ end
43
+
44
+ def kill_signal
45
+ @kill_signal ||= :KILL
46
+ end
47
+
48
+ def log_file
49
+ @log_file ||= '/dev/null'
50
+ end
51
+
52
+ def log_formatter
53
+ @log_formatter ||= Proc.new do |s,d,p,m|
54
+ "#{d} - #{name} - #{s.to_s.ljust(5,' ')} - #{p.to_s.upcase} ##{::Process.pid} - #{m}\n"
55
+ end
56
+ end
57
+
58
+ def log_level
59
+ @log_level ||= 'INFO'
60
+ end
61
+
62
+ def logger
63
+ @logger ||= MonoLogger.new(log_file).tap do |logger|
64
+ logger.level = MonoLogger.const_get log_level
65
+ logger.formatter = log_formatter
66
+ Datacenter.logger = logger
67
+ end
22
68
  end
23
69
 
24
70
  end
data/lib/spool/dsl.rb CHANGED
@@ -20,6 +20,10 @@ module Spool
20
20
  end
21
21
  end
22
22
 
23
+ def name(name)
24
+ configuration.name = name
25
+ end
26
+
23
27
  def processes(count)
24
28
  configuration.processes = count
25
29
  end
@@ -36,13 +40,33 @@ module Spool
36
40
  configuration.command = command
37
41
  end
38
42
 
39
- def pidfile(pidfile)
40
- configuration.pidfile = pidfile
43
+ def pid_file(pid_file)
44
+ configuration.pid_file = pid_file
41
45
  end
42
46
 
43
47
  def restart_when(&block)
44
48
  configuration.restart_condition = block
45
49
  end
46
50
 
51
+ def stop_signal(signal)
52
+ configuration.stop_signal = signal.to_sym
53
+ end
54
+
55
+ def kill_signal(signal)
56
+ configuration.kill_signal = signal.to_sym
57
+ end
58
+
59
+ def log_file(filename)
60
+ configuration.log_file = filename
61
+ end
62
+
63
+ def log_level(level)
64
+ configuration.log_level = level.to_s.upcase
65
+ end
66
+
67
+ def log_formatter(&block)
68
+ configuration.log_formatter = block
69
+ end
70
+
47
71
  end
48
72
  end
data/lib/spool/pool.rb CHANGED
@@ -32,11 +32,12 @@ module Spool
32
32
 
33
33
  handle_signals
34
34
 
35
- File.write configuration.pidfile, Process.pid if configuration.pidfile
35
+ File.write configuration.pid_file, Process.pid if configuration.pid_file
36
36
 
37
37
  configuration.processes.times.map do
38
38
  processes << Spawner.spawn(configuration)
39
39
  end
40
+ logger.info(self.class) { "SPOOL START childrens: #{processes.map(&:pid)}" }
40
41
 
41
42
  while @started
42
43
  check_status
@@ -45,18 +46,22 @@ module Spool
45
46
  end
46
47
 
47
48
  def stop(timeout=0)
48
- processes.each(&:stop)
49
+ logger.info(self.class) { "SPOOL STOP" }
50
+ stop_processes processes
49
51
  Timeout.timeout(timeout) { wait_for_stopped processes }
50
52
  rescue Timeout::Error
53
+ logger.error(self.class) { "ERROR IN SPOOL STOP. Timeout error" }
51
54
  ensure
52
55
  stop!
53
56
  end
54
57
 
55
58
  def stop!
56
- processes.each(&:kill)
57
- processes.clear
58
- File.delete configuration.pidfile if File.exists? configuration.pidfile
59
59
  @started = false
60
+ logger.info(self.class) { "SPOOL STOP! kill this children (#{processes.map(&:pid)})" }
61
+ processes.each { |p| p.send_signal configuration.kill_signal}
62
+ wait_for_stopped processes
63
+ processes.clear
64
+ File.delete configuration.pid_file if File.exists? configuration.pid_file
60
65
  end
61
66
 
62
67
  def incr(count=1)
@@ -72,7 +77,8 @@ module Spool
72
77
  end
73
78
 
74
79
  def restart
75
- processes.each(&:stop)
80
+ logger.info(self.class) { "RESTART" }
81
+ stop_processes processes
76
82
  end
77
83
 
78
84
  private
@@ -86,32 +92,48 @@ module Spool
86
92
  def check_status
87
93
  return if stopped?
88
94
 
89
- processes.select(&configuration.restart_condition).each(&:stop) if configuration.restart_condition
95
+ stop_processes processes.select(&configuration.restart_condition)
90
96
  processes.delete_if { |p| !p.alive? }
91
97
 
98
+ return if stopped?
92
99
  if configuration.processes > processes.count
100
+ logger.info(self.class) { "Initialize new children: #{processes.map(&:pid)}" }
101
+
93
102
  (configuration.processes - processes.count).times do
94
103
  processes << Spawner.spawn(configuration)
95
104
  end
96
105
 
106
+ logger.info(self.class) { "new children: #{processes.map(&:pid)}" }
107
+
97
108
  elsif configuration.processes < processes.count
109
+ logger.info(self.class) { "Kill childrens: #{processes.map(&:pid)}" }
110
+
98
111
  list = processes.take(processes.count - configuration.processes)
99
- list.each(&:stop)
112
+ stop_processes list
100
113
  wait_for_stopped list
101
114
  list.each { |p| processes.delete p }
102
115
 
116
+ logger.info(self.class) { "After kill childrens: #{processes.map(&:pid)}" }
103
117
  end
104
118
 
105
119
  rescue
106
120
  retry
107
121
  end
108
122
 
123
+ def stop_processes(processes_list)
124
+ processes_list.each { |p| p.send_signal configuration.stop_signal }
125
+ end
126
+
109
127
  def wait_for_stopped(processes)
110
128
  while processes.any?(&:alive?)
111
129
  sleep 0.01
112
130
  end
113
131
  end
114
132
 
133
+ def logger
134
+ configuration.logger
135
+ end
136
+
115
137
  end
116
138
 
117
139
  end
data/lib/spool/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Spool
2
- VERSION = '0.0.1'
2
+ VERSION = '0.1.1'
3
3
  end
data/lib/spool.rb CHANGED
@@ -2,6 +2,7 @@ require 'datacenter'
2
2
  require 'securerandom'
3
3
  require 'timeout'
4
4
  require 'tmpdir'
5
+ require 'mono_logger'
5
6
 
6
7
  require_relative 'spool/version'
7
8
  require_relative 'spool/dsl'
data/spec/dsl_spec.rb CHANGED
@@ -6,12 +6,18 @@ describe Spool::DSL do
6
6
 
7
7
  it 'Configure from block' do
8
8
  config = Spool::DSL.configure do
9
+ name 'Process pool'
9
10
  processes 10
10
11
  env VAR_1: 1, VAR_2: 2
11
12
  dir '/tmp'
12
13
  command 'tailf file.log'
13
- pidfile '/tailf.pid'
14
+ pid_file '/tailf.pid'
14
15
  restart_when { |p| p.memory > 512 }
16
+ stop_signal :TERM
17
+ kill_signal :INT
18
+ log_file 'test.log'
19
+ log_level :INFO
20
+ log_formatter { |s,d,p,m| "#{s},#{d},#{p},#{m}" }
15
21
  end
16
22
 
17
23
  assert_configuration config
@@ -26,12 +32,18 @@ describe Spool::DSL do
26
32
  end
27
33
 
28
34
  def assert_configuration(config)
35
+ config.name.must_equal 'Process pool'
29
36
  config.processes.must_equal 10
30
37
  config.env.must_equal VAR_1: 1, VAR_2: 2
31
38
  config.dir.must_equal '/tmp'
32
39
  config.command.must_equal 'tailf file.log'
33
40
  config.restart_condition.call(MockProcess.new(600)).must_equal true
34
41
  config.restart_condition.call(MockProcess.new(100)).must_equal false
42
+ config.stop_signal.must_equal :TERM
43
+ config.kill_signal.must_equal :INT
44
+ config.log_file.must_equal 'test.log'
45
+ config.log_level.must_equal 'INFO'
46
+ config.log_formatter.call('1','2','3','4').must_equal '1,2,3,4'
35
47
  end
36
48
 
37
49
  end
@@ -0,0 +1,4 @@
1
+ name 'SPOOL_TEST'
2
+ processes 1
3
+ command 'ruby -e "loop do; sleep 1; end"'
4
+ stop_signal :TERM
data/spec/pool_spec.rb CHANGED
@@ -5,7 +5,7 @@ describe Spool::Pool do
5
5
  after do
6
6
  @pool.stop! if @pool
7
7
  machine = Datacenter::Machine.new
8
- machine.processes('ruby -e').each(&:kill)
8
+ machine.processes('ruby -e').each {|p| p.send_signal :KILL}
9
9
  end
10
10
 
11
11
  def start_pool(&block)
@@ -29,6 +29,7 @@ describe Spool::Pool do
29
29
  pool = start_pool do
30
30
  processes 1
31
31
  command 'ruby -e "loop do; sleep 1; end"'
32
+ stop_signal :TERM
32
33
  end
33
34
 
34
35
  pool.must_be :started?
@@ -44,6 +45,25 @@ describe Spool::Pool do
44
45
  process.wont_be :alive?
45
46
  end
46
47
 
48
+ it 'Start and force stop' do
49
+ pool = start_pool do
50
+ processes 1
51
+ command 'ruby -e "loop do; sleep 1; end"'
52
+ end
53
+
54
+ pool.must_be :started?
55
+ pool.processes.count.must_equal 1
56
+ pool.processes[0].must_be :alive?
57
+
58
+ process = pool.processes[0]
59
+
60
+ pool.stop!
61
+
62
+ pool.must_be :stopped?
63
+ pool.processes.must_be_empty
64
+ process.wont_be :alive?
65
+ end
66
+
47
67
  it 'Recover killed process' do
48
68
  pool = start_pool do
49
69
  processes 1
@@ -51,7 +71,7 @@ describe Spool::Pool do
51
71
  end
52
72
 
53
73
  original_process = pool.processes[0]
54
- original_process.kill
74
+ original_process.send_signal :KILL
55
75
 
56
76
  original_process.wont_be :alive?
57
77
 
@@ -61,10 +81,30 @@ describe Spool::Pool do
61
81
  pool.processes[0].must_be :alive?
62
82
  end
63
83
 
84
+ it 'Restart processes' do
85
+ pool = start_pool do
86
+ processes 2
87
+ command 'ruby -e "loop do; sleep 1; end"'
88
+ stop_signal :TERM
89
+ end
90
+
91
+ pool.processes.count.must_equal 2
92
+
93
+ original_pids = pool.processes.map(&:pid)
94
+
95
+ pool.restart
96
+
97
+ until pool.processes.count == 2 && pool.processes[0].pid != original_pids[0] && pool.processes[1].pid != original_pids[1]; end
98
+
99
+ pool.processes.count.must_equal 2
100
+ pool.processes.each { |p| p.must_be :alive?}
101
+ end
102
+
64
103
  it 'Stop with timeout' do
65
104
  pool = start_pool do
66
105
  processes 1
67
- command 'ruby -e "Signal.trap(:TERM) { sleep 5; exit 0 }; loop { sleep 1 }"'
106
+ command 'ruby -e "Signal.trap(:QUIT) { puts :quit; sleep 5; exit 0 }; loop { sleep 1 }"'
107
+ stop_signal :QUIT
68
108
  end
69
109
 
70
110
  process = pool.processes[0]
@@ -93,6 +133,7 @@ describe Spool::Pool do
93
133
  pool = start_pool do
94
134
  processes 3
95
135
  command 'ruby -e "loop do; sleep 1; end"'
136
+ stop_signal :TERM
96
137
  end
97
138
 
98
139
  pool.processes.count.must_equal 3
@@ -103,21 +144,52 @@ describe Spool::Pool do
103
144
  end
104
145
 
105
146
  it 'Change process when satisfied stop condition' do
147
+ file_name = File.expand_path 'used_memory.log'
148
+ ruby_command = "require 'datacenter'; Signal.trap(:TERM) { File.write('#{file_name}', Datacenter::Process.new(Process.pid).memory); exit 0 }; a = 50_000_000.times.to_a; loop do; end"
149
+
106
150
  pool = start_pool do
107
151
  processes 1
108
- command 'ruby -e "a = 50_000_000.times.to_a; loop do; end"'
152
+ command "ruby -e \"#{ruby_command}\""
109
153
  restart_when { |p| p.memory > 300 }
154
+ stop_signal :TERM
110
155
  end
111
156
 
112
157
  memory = 0
113
158
  process = pool.processes[0]
114
- while pool.processes.empty? || pool.processes[0].pid == process.pid
115
- memory = process.memory
159
+ while !File.exists?(file_name)
160
+ sleep 0.5
116
161
  end
117
162
 
118
- memory.must_be :>, 100
163
+ memory = File.read(file_name).to_i
164
+ File.delete(file_name)
165
+
166
+ memory.must_be :>=, 300
119
167
  pool.processes.count.must_equal 1
120
168
  pool.processes[0].pid.wont_equal process.pid
121
169
  end
122
170
 
171
+ it 'Reload config' do
172
+ config_file = File.expand_path('../loop_pool_config.rb', __FILE__)
173
+ config = Spool::DSL.configure config_file
174
+
175
+ pool = Spool::Pool.new(config).tap do |pool|
176
+ t = Thread.new { pool.start }
177
+ t.abort_on_exception = true
178
+ while pool.processes.count < pool.configuration.processes
179
+ end
180
+ end
181
+
182
+ pool.processes.count.must_equal 1
183
+
184
+ pool.incr 1
185
+
186
+ assert_with_timeout(1) { pool.processes.count == 2 }
187
+
188
+ pool.reload
189
+
190
+ assert_with_timeout(1) { pool.processes.count == 1 }
191
+
192
+ pool.stop!
193
+ end
194
+
123
195
  end
@@ -1,6 +1,12 @@
1
+ name 'Process pool'
1
2
  processes 10
2
3
  env VAR_1: 1, VAR_2: 2
3
4
  dir '/tmp'
4
5
  command 'tailf file.log'
5
- pidfile '/tailf.pid'
6
+ pid_file '/tailf.pid'
6
7
  restart_when { |p| p.memory > 512 }
8
+ stop_signal 'TERM'
9
+ kill_signal 'INT'
10
+ log_file 'test.log'
11
+ log_level 'INFO'
12
+ log_formatter { |s,d,p,m| "#{s},#{d},#{p},#{m}" }
data/spool.gemspec CHANGED
@@ -18,7 +18,8 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ['lib']
20
20
 
21
- spec.add_dependency 'datacenter', '~> 0.1.0'
21
+ spec.add_dependency 'datacenter', '~> 0.2.0'
22
+ spec.add_dependency 'mono_logger'
22
23
 
23
24
  spec.add_development_dependency 'bundler', '~> 1.5'
24
25
  spec.add_development_dependency 'rake'
metadata CHANGED
@@ -1,111 +1,125 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spool
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gabriel Naiman
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-19 00:00:00.000000000 Z
11
+ date: 2015-09-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: datacenter
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ~>
18
18
  - !ruby/object:Gem::Version
19
- version: 0.1.0
19
+ version: 0.2.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ~>
25
25
  - !ruby/object:Gem::Version
26
- version: 0.1.0
26
+ version: 0.2.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: mono_logger
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: bundler
29
43
  requirement: !ruby/object:Gem::Requirement
30
44
  requirements:
31
- - - "~>"
45
+ - - ~>
32
46
  - !ruby/object:Gem::Version
33
47
  version: '1.5'
34
48
  type: :development
35
49
  prerelease: false
36
50
  version_requirements: !ruby/object:Gem::Requirement
37
51
  requirements:
38
- - - "~>"
52
+ - - ~>
39
53
  - !ruby/object:Gem::Version
40
54
  version: '1.5'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: rake
43
57
  requirement: !ruby/object:Gem::Requirement
44
58
  requirements:
45
- - - ">="
59
+ - - '>='
46
60
  - !ruby/object:Gem::Version
47
61
  version: '0'
48
62
  type: :development
49
63
  prerelease: false
50
64
  version_requirements: !ruby/object:Gem::Requirement
51
65
  requirements:
52
- - - ">="
66
+ - - '>='
53
67
  - !ruby/object:Gem::Version
54
68
  version: '0'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: minitest
57
71
  requirement: !ruby/object:Gem::Requirement
58
72
  requirements:
59
- - - "~>"
73
+ - - ~>
60
74
  - !ruby/object:Gem::Version
61
75
  version: '4.7'
62
76
  type: :development
63
77
  prerelease: false
64
78
  version_requirements: !ruby/object:Gem::Requirement
65
79
  requirements:
66
- - - "~>"
80
+ - - ~>
67
81
  - !ruby/object:Gem::Version
68
82
  version: '4.7'
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: turn
71
85
  requirement: !ruby/object:Gem::Requirement
72
86
  requirements:
73
- - - "~>"
87
+ - - ~>
74
88
  - !ruby/object:Gem::Version
75
89
  version: '0.9'
76
90
  type: :development
77
91
  prerelease: false
78
92
  version_requirements: !ruby/object:Gem::Requirement
79
93
  requirements:
80
- - - "~>"
94
+ - - ~>
81
95
  - !ruby/object:Gem::Version
82
96
  version: '0.9'
83
97
  - !ruby/object:Gem::Dependency
84
98
  name: simplecov
85
99
  requirement: !ruby/object:Gem::Requirement
86
100
  requirements:
87
- - - ">="
101
+ - - '>='
88
102
  - !ruby/object:Gem::Version
89
103
  version: '0'
90
104
  type: :development
91
105
  prerelease: false
92
106
  version_requirements: !ruby/object:Gem::Requirement
93
107
  requirements:
94
- - - ">="
108
+ - - '>='
95
109
  - !ruby/object:Gem::Version
96
110
  version: '0'
97
111
  - !ruby/object:Gem::Dependency
98
112
  name: pry-nav
99
113
  requirement: !ruby/object:Gem::Requirement
100
114
  requirements:
101
- - - ">="
115
+ - - '>='
102
116
  - !ruby/object:Gem::Version
103
117
  version: '0'
104
118
  type: :development
105
119
  prerelease: false
106
120
  version_requirements: !ruby/object:Gem::Requirement
107
121
  requirements:
108
- - - ">="
122
+ - - '>='
109
123
  - !ruby/object:Gem::Version
110
124
  version: '0'
111
125
  description: ''
@@ -116,11 +130,11 @@ executables:
116
130
  extensions: []
117
131
  extra_rdoc_files: []
118
132
  files:
119
- - ".coveralls.yml"
120
- - ".gitignore"
121
- - ".ruby-gemset"
122
- - ".ruby-version"
123
- - ".travis.yml"
133
+ - .coveralls.yml
134
+ - .gitignore
135
+ - .ruby-gemset
136
+ - .ruby-version
137
+ - .travis.yml
124
138
  - Gemfile
125
139
  - LICENSE.txt
126
140
  - README.md
@@ -134,6 +148,7 @@ files:
134
148
  - lib/spool/version.rb
135
149
  - spec/coverage_helper.rb
136
150
  - spec/dsl_spec.rb
151
+ - spec/loop_pool_config.rb
137
152
  - spec/minitest_helper.rb
138
153
  - spec/pool_spec.rb
139
154
  - spec/sample_config.rb
@@ -149,12 +164,12 @@ require_paths:
149
164
  - lib
150
165
  required_ruby_version: !ruby/object:Gem::Requirement
151
166
  requirements:
152
- - - ">="
167
+ - - '>='
153
168
  - !ruby/object:Gem::Version
154
169
  version: '0'
155
170
  required_rubygems_version: !ruby/object:Gem::Requirement
156
171
  requirements:
157
- - - ">="
172
+ - - '>='
158
173
  - !ruby/object:Gem::Version
159
174
  version: '0'
160
175
  requirements: []
@@ -166,6 +181,7 @@ summary: Manage and keep alive pool of processes
166
181
  test_files:
167
182
  - spec/coverage_helper.rb
168
183
  - spec/dsl_spec.rb
184
+ - spec/loop_pool_config.rb
169
185
  - spec/minitest_helper.rb
170
186
  - spec/pool_spec.rb
171
187
  - spec/sample_config.rb