gene_pool 1.4.1 → 1.5.0

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: 65f8bc24d422c5746e94dc1e295908b58da9220f
4
- data.tar.gz: 9784d1f48c019d0e713b220150354973bf80b11c
3
+ metadata.gz: ed271080c3002e5df818bb015aa625dde4241778
4
+ data.tar.gz: 4a48d03387d5f76edb87eec64acb1b7d5dbe9d63
5
5
  SHA512:
6
- metadata.gz: 94e48da354cfadc86e17640d18a926525f748659d9e5ed2b1571ad0be4a2f1be552901aa6d4d585c2c7f211687f784b54fa3b8299788820577985a150e4c1d46
7
- data.tar.gz: 767e6165d9704693e62d4b70ae0f8aa8765fd1163f726e6cdede4f3a22afcb8030600a7c0097afc5122b37fb6397f9679d9f5eb8291029aaf54babf64c79a27b
6
+ metadata.gz: 37d9bc6cf14105a9cecf3f82bcdb44debaba13009edde4258a486fc2336284e9443a07bec236266b6fe5e96f4d20bdd3b8c1209593e0cc73cacdf142fb4d3321
7
+ data.tar.gz: e2517b7333784fbaf97279a908fbc9b3b755b71a08e12474c8e499113391fade9608a1156d706d26ae9d643012fe2b07dc44c23deff10acf22bb92b655d514d2
@@ -1,6 +1,11 @@
1
1
  GenePool Changelog
2
2
  =====================
3
3
 
4
+ 1.5.0 / 2019-02-11
5
+ - Replace deprecated `thread_safe` gem with `concurrent-ruby`.
6
+ - Update tests with latest mini-test spec.
7
+ - Update Readme.
8
+
4
9
  1.4.1 / 2014-04-29
5
10
  - Close connection outside of the mutex.
6
11
  - When iterating over the connections, don't include connections still in the process of being created (set to the reserved_placeholder).
data/Gemfile CHANGED
@@ -1,18 +1,7 @@
1
- source "http://rubygems.org"
1
+ source 'https://rubygems.org'
2
2
 
3
3
  gemspec
4
4
 
5
- platforms :rbx do
6
- gem 'rubysl', '~> 2.0'
7
- gem 'rubysl-test-unit'
8
- end
9
-
10
- group :development do
11
- gem 'rake'
12
- gem 'rdoc'
13
- end
14
-
15
- group :test do
16
- gem 'minitest', "~> 4.0"
17
- gem 'shoulda'
18
- end
5
+ gem 'rake'
6
+ gem 'awesome_print'
7
+ gem 'minitest'
data/README.md CHANGED
@@ -2,61 +2,65 @@
2
2
 
3
3
  * http://github.com/bpardee/gene_pool
4
4
 
5
- ## DESCRIPTION:
5
+ ## Description:
6
6
 
7
- Generic pooling library for connection pools.
7
+ Highly performant Ruby connection pooling library.
8
8
 
9
- ## FEATURES/PROBLEMS:
9
+ ## Features:
10
10
 
11
11
  * Thread-safe
12
12
  * Pure ruby
13
13
 
14
- ## INSTALL:
14
+ ## Installation:
15
15
 
16
16
  gem install gene_pool
17
17
 
18
- ## EXAMPLE USAGE:
19
-
20
- class MyClient
21
- # Print a logger warning if it requires more than 0.25 seconds to acquire a connection.
22
- # Close and reopen the connection if it hasn't been used for 10 seconds.
23
- # Raise Timeout::Error if waiting for a connection more than 3 seconds.
24
- @@gene_pool = GenePool.new(:name => 'MyClient',
25
- :pool_size => 10,
26
- :timeout => 3,
27
- :warn_timeout => 0.25,
28
- :idle_timeout => 10,
29
- :logger => Rails.logger,
30
- :close_proc => :close) do
31
- TCPSocket.new('myserver', 4321)
32
- end
33
-
34
- def send_message
35
- @@gene_pool.with_connection do |socket|
36
- begin
37
- # use socket here
38
- rescue Exception => e
39
- # If the socket gets closed, remove it from the pool
40
- @@gene_pool.remove(socket)
41
- end
42
- end
43
- end
44
-
45
- # Equivalent to send_message above
46
- def send_message_auto_remove
47
- # On exception, close and reopen socket and perform retry
48
- @@gene_pool.with_connection_auto_remove do |socket|
49
- # use socket here,
50
- end
51
- end
52
-
53
- def send_message_auto_retry
54
- # On exception, close and reopen socket and perform retry
55
- @@gene_pool.with_connection_auto_retry do |socket|
56
- # use socket here,
57
- end
58
- end
18
+ ## Example Usage:
19
+
20
+ ~~~ruby
21
+ class MyClient
22
+ # Print a logger warning if it requires more than 0.25 seconds to acquire a connection.
23
+ # Close and reopen the connection if it hasn't been used for 10 seconds.
24
+ # Raise Timeout::Error if waiting for a connection more than 3 seconds.
25
+ @gene_pool = GenePool.new(
26
+ name: 'MyClient',
27
+ pool_size: 10,
28
+ timeout: 3,
29
+ warn_timeout: 0.25,
30
+ idle_timeout: 10,
31
+ logger: Rails.logger,
32
+ close_proc: :close) do
33
+
34
+ TCPSocket.new('myserver', 4321)
35
+ end
36
+
37
+ def send_message
38
+ @gene_pool.with_connection do |socket|
39
+ begin
40
+ # use socket here
41
+ rescue Exception => e
42
+ # If the socket gets closed, remove it from the pool
43
+ @gene_pool.remove(socket)
59
44
  end
45
+ end
46
+ end
47
+
48
+ # Equivalent to send_message above
49
+ def send_message_auto_remove
50
+ # On exception, close and remeove socket from pool
51
+ @gene_pool.with_connection_auto_remove do |socket|
52
+ # use socket here,
53
+ end
54
+ end
55
+
56
+ def send_message_auto_retry
57
+ # On exception, close and reopen socket and perform retry
58
+ @gene_pool.with_connection_auto_retry do |socket|
59
+ # use socket here,
60
+ end
61
+ end
62
+ end
63
+ ~~~
60
64
 
61
65
  ## Copyright
62
66
 
@@ -1,6 +1,6 @@
1
1
  require 'logger'
2
2
  require 'thread'
3
- require 'thread_safe'
3
+ require 'concurrent-ruby'
4
4
  require 'monitor'
5
5
 
6
6
  # Generic connection pool class
@@ -42,7 +42,7 @@ class GenePool
42
42
  @checked_out = []
43
43
  # Map the original connections object_id within the with_connection method to the final connection.
44
44
  # This could change if the connection is renew'ed.
45
- @with_map = ThreadSafe::Hash.new
45
+ @with_map = Concurrent::Hash.new
46
46
 
47
47
  setup_mutex
48
48
  end
@@ -1,14 +1,11 @@
1
- require 'rubygems'
2
- require 'test/unit'
3
- require 'shoulda'
4
- require 'gene_pool'
1
+ require_relative 'test_helper.rb'
5
2
  require 'stringio'
6
3
  require 'logger'
7
4
  require 'timeout'
8
5
 
9
6
  # Increase visibility
10
7
  class GenePool
11
- attr_reader :connections, :checked_out, :with_map
8
+ attr_reader :checked_out, :with_map
12
9
  end
13
10
 
14
11
  class MyTimeoutError < RuntimeError; end
@@ -51,15 +48,13 @@ class DummyConnection
51
48
  end
52
49
  end
53
50
 
54
-
55
- class GenePoolTest < Test::Unit::TestCase
56
-
57
- context 'on default setup' do
58
- setup do
51
+ class GenePoolTest < Minitest::Test
52
+ describe 'on default setup' do
53
+ before do
59
54
  @gene_pool = GenePool.new { Object.new }
60
55
  end
61
56
 
62
- should 'have default options set' do
57
+ it 'have default options set' do
63
58
  assert_equal 'GenePool', @gene_pool.name
64
59
  assert_equal 1, @gene_pool.pool_size
65
60
  assert_equal 5.0, @gene_pool.warn_timeout
@@ -67,8 +62,8 @@ class GenePoolTest < Test::Unit::TestCase
67
62
  end
68
63
  end
69
64
 
70
- context '' do
71
- setup do
65
+ describe GenePool do
66
+ before do
72
67
  #@stringio = StringIO.new
73
68
  #@logger = Logger.new($stdout)
74
69
  #@logger = Logger.new(@stringio)
@@ -88,14 +83,14 @@ class GenePoolTest < Test::Unit::TestCase
88
83
  end
89
84
  end
90
85
 
91
- should 'have options set' do
86
+ it 'have options set' do
92
87
  assert_equal 'TestGenePool', @gene_pool.name
93
88
  assert_equal 10, @gene_pool.pool_size
94
89
  assert_equal 2.0, @gene_pool.warn_timeout
95
90
  #assert_same @logger, @gene_pool.logger
96
91
  end
97
92
 
98
- should 'create 1 connection' do
93
+ it 'create 1 connection' do
99
94
  (1..3).each do |i|
100
95
  @gene_pool.with_connection do |conn|
101
96
  assert_equal conn.count, 1
@@ -108,7 +103,7 @@ class GenePoolTest < Test::Unit::TestCase
108
103
  end
109
104
  end
110
105
 
111
- should 'create 2 connections' do
106
+ it 'create 2 connections' do
112
107
  conn1 = @gene_pool.checkout
113
108
  (1..3).each do |i|
114
109
  @gene_pool.with_connection do |conn2|
@@ -127,7 +122,7 @@ class GenePoolTest < Test::Unit::TestCase
127
122
  assert_equal 0, @gene_pool.checked_out.size
128
123
  end
129
124
 
130
- should 'be able to reset multiple times' do
125
+ it 'be able to reset multiple times' do
131
126
  @gene_pool.with_connection do |conn1|
132
127
  conn2 = @gene_pool.renew(conn1)
133
128
  conn3 = @gene_pool.renew(conn2)
@@ -141,7 +136,7 @@ class GenePoolTest < Test::Unit::TestCase
141
136
  assert_equal 0, @gene_pool.checked_out.size
142
137
  end
143
138
 
144
- should 'be able to remove connection' do
139
+ it 'be able to remove connection' do
145
140
  @gene_pool.with_connection do |conn|
146
141
  @gene_pool.remove(conn)
147
142
  assert_equal 0, @gene_pool.connections.size
@@ -151,7 +146,7 @@ class GenePoolTest < Test::Unit::TestCase
151
146
  assert_equal 0, @gene_pool.checked_out.size
152
147
  end
153
148
 
154
- should 'be able to remove multiple connections' do
149
+ it 'be able to remove multiple connections' do
155
150
  @gene_pool.with_connection do |conn1|
156
151
  @gene_pool.with_connection do |conn2|
157
152
  @gene_pool.with_connection do |conn3|
@@ -172,7 +167,7 @@ class GenePoolTest < Test::Unit::TestCase
172
167
  assert_equal 0, @gene_pool.checked_out.size
173
168
  end
174
169
 
175
- should 'handle aborted connection' do
170
+ it 'handle aborted connection' do
176
171
  @gene_pool.with_connection do |conn1|
177
172
  @sleep = 2
178
173
  assert_raises RuntimeError do
@@ -195,7 +190,7 @@ class GenePoolTest < Test::Unit::TestCase
195
190
  end
196
191
  end
197
192
 
198
- should 'not allow more than pool_size connections' do
193
+ it 'not allow more than pool_size connections' do
199
194
  conns = []
200
195
  pool_size = @gene_pool.pool_size
201
196
  (1..pool_size).each do |i|
@@ -218,7 +213,7 @@ class GenePoolTest < Test::Unit::TestCase
218
213
  end
219
214
  end
220
215
 
221
- should 'handle thread contention' do
216
+ it 'handle thread contention' do
222
217
  conns = []
223
218
  pool_size = @gene_pool.pool_size
224
219
  # Do it with new connections and old connections
@@ -248,7 +243,7 @@ class GenePoolTest < Test::Unit::TestCase
248
243
  assert_equal (1..pool_size).to_a, ival_conns
249
244
  end
250
245
 
251
- should 'be able to auto-retry connection' do
246
+ it 'be able to auto-retry connection' do
252
247
  conns = []
253
248
  @gene_pool.with_connection_auto_retry do |conn|
254
249
  conns << conn
@@ -269,7 +264,7 @@ class GenePoolTest < Test::Unit::TestCase
269
264
  assert_equal 0, @gene_pool.checked_out.size
270
265
  end
271
266
 
272
- should 'fail with auto-retry on double failure' do
267
+ it 'fail with auto-retry on double failure' do
273
268
  e = assert_raises Exception do
274
269
  @gene_pool.with_connection_auto_retry do |conn|
275
270
  conn.fail_on(1,2)
@@ -283,7 +278,7 @@ class GenePoolTest < Test::Unit::TestCase
283
278
  end
284
279
  end
285
280
 
286
- should 'not auto-retry on timeout' do
281
+ it 'not auto-retry on timeout' do
287
282
  assert_raises RuntimeError do
288
283
  Timeout.timeout(1, RuntimeError) do
289
284
  @gene_pool.with_connection_auto_retry do |conn|
@@ -303,7 +298,7 @@ class GenePoolTest < Test::Unit::TestCase
303
298
  assert_equal 0, @gene_pool.checked_out.size
304
299
  end
305
300
 
306
- should 'allow cleanup of idle connections' do
301
+ it 'allow cleanup of idle connections' do
307
302
  conn1 = @gene_pool.checkout
308
303
  conn2 = @gene_pool.checkout
309
304
  @gene_pool.checkin(conn1)
@@ -318,8 +313,8 @@ class GenePoolTest < Test::Unit::TestCase
318
313
  end
319
314
  end
320
315
 
321
- context 'idle timeout' do
322
- setup do
316
+ describe 'idle timeout' do
317
+ before do
323
318
  # Override sleep in individual tests
324
319
  @sleep = nil
325
320
  counter = 0
@@ -335,7 +330,7 @@ class GenePoolTest < Test::Unit::TestCase
335
330
  end
336
331
  end
337
332
 
338
- should 'create a new connection if we pass the idle timeout' do
333
+ it 'create a new connection if we pass the idle timeout' do
339
334
  conn1, conn2, conn3 = nil
340
335
  @gene_pool.with_connection { |conn| conn1 = conn }
341
336
  @gene_pool.with_connection { |conn| conn2 = conn }
@@ -351,8 +346,8 @@ class GenePoolTest < Test::Unit::TestCase
351
346
  end
352
347
  end
353
348
 
354
- context 'close_proc' do
355
- should 'default to close if not specified' do
349
+ describe 'close_proc' do
350
+ it 'default to close if not specified' do
356
351
  @gene_pool = GenePool.new do
357
352
  DummyConnection.new(0, 0)
358
353
  end
@@ -363,7 +358,7 @@ class GenePoolTest < Test::Unit::TestCase
363
358
  assert !conn.other_closed?
364
359
  end
365
360
 
366
- should 'allow symbol to execute a different method from close' do
361
+ it 'allow symbol to execute a different method from close' do
367
362
  @gene_pool = GenePool.new(:close_proc => :other_close) do
368
363
  DummyConnection.new(0, 0)
369
364
  end
@@ -374,7 +369,7 @@ class GenePoolTest < Test::Unit::TestCase
374
369
  assert conn.other_closed?
375
370
  end
376
371
 
377
- should 'allow nil so it does not execute a close' do
372
+ it 'allow nil so it does not execute a close' do
378
373
  @gene_pool = GenePool.new(:close_proc => nil) do
379
374
  DummyConnection.new(0, 0)
380
375
  end
@@ -385,7 +380,7 @@ class GenePoolTest < Test::Unit::TestCase
385
380
  assert !conn.other_closed?
386
381
  end
387
382
 
388
- should 'allow proc that gets executed on close' do
383
+ it 'allow proc that gets executed on close' do
389
384
  foo = 1
390
385
  close_conn = nil
391
386
  my_close = lambda do |conn|
@@ -405,8 +400,8 @@ class GenePoolTest < Test::Unit::TestCase
405
400
  end
406
401
  end
407
402
 
408
- context 'timeout' do
409
- setup do
403
+ describe 'timeout' do
404
+ before do
410
405
  @timeout_classes = [nil, MyTimeoutError]
411
406
  @gene_pools = @timeout_classes.map do |timeout_class|
412
407
  GenePool.new(:name => 'TestGenePool',
@@ -419,7 +414,7 @@ class GenePoolTest < Test::Unit::TestCase
419
414
  end
420
415
  end
421
416
 
422
- should 'timeout when the timeout period has expired' do
417
+ it 'timeout when the timeout period has expired' do
423
418
  @gene_pools.each_with_index do |gene_pool, class_index|
424
419
  pool_size = gene_pool.pool_size
425
420
  # Do it with new connections and old connections
metadata CHANGED
@@ -1,65 +1,67 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gene_pool
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.1
4
+ version: 1.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brad Pardee
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-04-30 00:00:00.000000000 Z
11
+ date: 2019-02-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: thread_safe
15
- version_requirements: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - '>='
18
- - !ruby/object:Gem::Version
19
- version: '0'
14
+ name: concurrent-ruby
20
15
  requirement: !ruby/object:Gem::Requirement
21
16
  requirements:
22
- - - '>='
17
+ - - ">="
23
18
  - !ruby/object:Gem::Version
24
- version: '0'
25
- prerelease: false
19
+ version: '1.0'
26
20
  type: :runtime
27
- description: Generic pooling library for creating a connection pool
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '1.0'
27
+ description: Threadsafe, performant library for managing pools of resources, such
28
+ as connections.
28
29
  email:
29
30
  - bradpardee@gmail.com
30
31
  executables: []
31
32
  extensions: []
32
33
  extra_rdoc_files: []
33
34
  files:
34
- - lib/gene_pool.rb
35
- - LICENSE.txt
36
- - Rakefile
35
+ - CHANGELOG.md
37
36
  - Gemfile
38
- - History.md
37
+ - LICENSE.txt
39
38
  - README.md
39
+ - Rakefile
40
+ - lib/gene_pool.rb
40
41
  - test/gene_pool_test.rb
41
42
  homepage: http://github.com/bpardee/gene_pool
42
- licenses: []
43
+ licenses:
44
+ - MIT
43
45
  metadata: {}
44
- post_install_message:
46
+ post_install_message:
45
47
  rdoc_options: []
46
48
  require_paths:
47
49
  - lib
48
50
  required_ruby_version: !ruby/object:Gem::Requirement
49
51
  requirements:
50
- - - '>='
52
+ - - ">="
51
53
  - !ruby/object:Gem::Version
52
54
  version: '0'
53
55
  required_rubygems_version: !ruby/object:Gem::Requirement
54
56
  requirements:
55
- - - '>='
57
+ - - ">="
56
58
  - !ruby/object:Gem::Version
57
59
  version: '0'
58
60
  requirements: []
59
- rubyforge_project:
60
- rubygems_version: 2.1.9
61
- signing_key:
61
+ rubyforge_project:
62
+ rubygems_version: 2.5.2.1
63
+ signing_key:
62
64
  specification_version: 4
63
- summary: Generic pooling library for creating a connection pool
65
+ summary: Highly performant Ruby connection pooling library.
64
66
  test_files:
65
67
  - test/gene_pool_test.rb