gene_pool 1.4.1 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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