net-http-persistent 2.5.2 → 2.6

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.
data.tar.gz.sig CHANGED
@@ -1 +1,5 @@
1
- Z�G�a���C����*c�@��,���g���Y�&�G��>�^r�?F��0�׏ϙ�8^^�
1
+ ���!�}��e����q��]G��X_����.�� ɝ�����1#7]/�
2
+ �c���}�^��?�h��
3
+ ���Öf����e�� ��Q��
4
+ �1ˎh]_�q��С^�5��*���B�<����3�~s�nZ���%����Vil�ʺ-fcټ+��0)P% �N��|G�-�[h���|��E��@G�/<��{vW��Ȑq����۟'
5
+ ��]��+���=�o�i}%0Z4���\
@@ -1,3 +1,9 @@
1
+ === 2.6 / 2010-03-26
2
+
3
+ * Minor enhancement
4
+ * Net::HTTP::Persistent#idle_timeout may be set to nil to disable expiration
5
+ of connections. Pull Request #21 by Aaron Stone
6
+
1
7
  === 2.5.2 / 2012-02-13
2
8
 
3
9
  * Bug fix
@@ -45,8 +45,12 @@ connection is kept alive between requests:
45
45
  # perform the POST, the URI is always required
46
46
  response = http.request post_uri, post
47
47
 
48
- Please see the documentation for +Net::HTTP::Persistent+ for more information,
49
- including how to handle SSL connections.
48
+ # if you are done making http requests, or won't make requests for several
49
+ # minutes
50
+ http.shutdown
51
+
52
+ Please see the documentation on Net::HTTP::Persistent for more information,
53
+ including SSL connection verification, header handling and tunable options.
50
54
 
51
55
  == INSTALL:
52
56
 
data/Rakefile CHANGED
@@ -5,6 +5,7 @@ require 'hoe'
5
5
 
6
6
  Hoe.plugin :git
7
7
  Hoe.plugin :minitest
8
+ Hoe.plugin :travis
8
9
 
9
10
  Hoe.spec 'net-http-persistent' do |p|
10
11
  developer 'Eric Hodel', 'drbrain@segment7.net'
@@ -92,9 +92,9 @@ end
92
92
  #
93
93
  # === Idle Timeout
94
94
  #
95
- # If a connection hasn't been used for 5 seconds it will automatically be
95
+ # If a connection hasn't been used for this number of seconds it will automatically be
96
96
  # reset upon the next use to avoid attempting to send to a closed connection.
97
- # This can be adjusted through idle_timeout.
97
+ # The default value is 5 seconds. nil means no timeout. Set through #idle_timeout.
98
98
  #
99
99
  # Reducing this value may help avoid the "too many connection resets" error
100
100
  # when sending non-idempotent requests while increasing this value will cause
@@ -110,14 +110,6 @@ end
110
110
  # The amount of time to wait for a connection to be opened. Set through
111
111
  # #open_timeout.
112
112
  #
113
- # === Idle Timeout
114
- #
115
- # If a connection has not been used in this many seconds it will be reset when
116
- # a request would use the connection. The default idle timeout is unlimited.
117
- # If you know the server's idle timeout setting this value will eliminate
118
- # failures from attempting non-idempotent requests on closed connections. Set
119
- # through #idle_timeout.
120
- #
121
113
  # === Socket Options
122
114
  #
123
115
  # Socket options may be set on newly-created connections. See #socket_options
@@ -161,6 +153,18 @@ end
161
153
  # The method of determining if the resource was created or not is unique to
162
154
  # the particular service you are using. Of course, you will want to add
163
155
  # protection from infinite looping.
156
+ #
157
+ # === Connection Termination
158
+ #
159
+ # If you are done using the Net::HTTP::Persistent instance you may shut down
160
+ # all the connections in the current thread with #shutdown. This is not
161
+ # recommended for normal use, it should only be used when it will be several
162
+ # minutes before you make another HTTP request.
163
+ #
164
+ # If you are using multiple threads, call #shutdown in each thread when the
165
+ # thread is done making requests. If you don't call shutdown, that's OK.
166
+ # Ruby will automatically garbage collect and shutdown your HTTP connections
167
+ # when the thread terminates.
164
168
 
165
169
  class Net::HTTP::Persistent
166
170
 
@@ -172,7 +176,7 @@ class Net::HTTP::Persistent
172
176
  ##
173
177
  # The version of Net::HTTP::Persistent you are using
174
178
 
175
- VERSION = '2.5.2'
179
+ VERSION = '2.6'
176
180
 
177
181
  ##
178
182
  # Error class for errors raised by Net::HTTP::Persistent. Various
@@ -496,8 +500,7 @@ class Net::HTTP::Persistent
496
500
  connection = connections[connection_id]
497
501
  ssl connection if use_ssl
498
502
  else
499
- last_used = Thread.current[@timeout_key][connection.object_id]
500
- reset connection unless last_used > max_age
503
+ reset connection if expired? connection
501
504
  end
502
505
 
503
506
  unless connection.started? then
@@ -544,6 +547,19 @@ class Net::HTTP::Persistent
544
547
  CGI.escape str if str
545
548
  end
546
549
 
550
+ ##
551
+ # Returns true if the connection should be reset due to an idle timeout,
552
+ # false otherwise.
553
+
554
+ def expired? connection
555
+ return false unless @idle_timeout
556
+ return true if @idle_timeout.zero?
557
+
558
+ last_used = Thread.current[@timeout_key][connection.object_id]
559
+
560
+ Time.now - last_used > @idle_timeout
561
+ end
562
+
547
563
  ##
548
564
  # Finishes the Net::HTTP +connection+
549
565
 
@@ -623,9 +639,11 @@ class Net::HTTP::Persistent
623
639
  end
624
640
 
625
641
  ##
626
- # If a connection hasn't been used since max_age it will be reset and reused
642
+ # Deprecated in favor of #expired?
643
+
644
+ def max_age # :nodoc:
645
+ return Time.now + 1 unless @idle_timeout
627
646
 
628
- def max_age
629
647
  Time.now - @idle_timeout
630
648
  end
631
649
 
@@ -121,7 +121,7 @@ class TestNetHttpPersistent < MiniTest::Unit::TestCase
121
121
  end
122
122
 
123
123
  def reqs
124
- Thread.current[@http.request_key] ||= {}
124
+ Thread.current[@http.request_key] ||= Hash.new 0
125
125
  end
126
126
 
127
127
  def ssl_conns
@@ -251,6 +251,60 @@ class TestNetHttpPersistent < MiniTest::Unit::TestCase
251
251
  assert_same c, conns[0]['example.com:80']
252
252
  end
253
253
 
254
+ def test_connection_for_cached_expire_always
255
+ cached = basic_connection
256
+ cached.start
257
+ conns[0]['example.com:80'] = cached
258
+ reqs[cached.object_id] = 10
259
+ touts[cached.object_id] = Time.now # last used right now
260
+
261
+ @http.idle_timeout = 0
262
+
263
+ c = @http.connection_for @uri
264
+
265
+ assert c.started?
266
+
267
+ assert_same cached, c
268
+
269
+ assert_equal 0, reqs[cached.object_id],
270
+ 'connection reset due to timeout'
271
+ end
272
+
273
+ def test_connection_for_cached_expire_never
274
+ cached = basic_connection
275
+ cached.start
276
+ conns[0]['example.com:80'] = cached
277
+ reqs[cached.object_id] = 10
278
+ touts[cached.object_id] = Time.now # last used right now
279
+
280
+ @http.idle_timeout = nil
281
+
282
+ c = @http.connection_for @uri
283
+
284
+ assert c.started?
285
+
286
+ assert_same cached, c
287
+
288
+ assert_equal 10, reqs[cached.object_id],
289
+ 'connection reset despite no timeout'
290
+ end
291
+
292
+ def test_connection_for_cached_expired
293
+ cached = basic_connection
294
+ cached.start
295
+ conns[0]['example.com:80'] = cached
296
+ reqs[cached.object_id] = 10
297
+ touts[cached.object_id] = Time.now - 3600
298
+
299
+ c = @http.connection_for @uri
300
+
301
+ assert c.started?
302
+
303
+ assert_same cached, c
304
+ assert_equal 0, reqs[cached.object_id],
305
+ 'connection not reset due to timeout'
306
+ end
307
+
254
308
  def test_connection_for_finished_ssl
255
309
  uri = URI.parse 'https://example.com/path'
256
310
  c = @http.connection_for uri
@@ -412,7 +466,7 @@ class TestNetHttpPersistent < MiniTest::Unit::TestCase
412
466
  c = @http.connection_for @uri
413
467
 
414
468
  assert c.started?
415
- assert_nil reqs[c.object_id]
469
+ assert_equal 0, reqs[c.object_id]
416
470
 
417
471
  assert_same cached, c
418
472
  end
@@ -433,6 +487,26 @@ class TestNetHttpPersistent < MiniTest::Unit::TestCase
433
487
  assert_equal '+%3F', @http.escape(' ?')
434
488
  end
435
489
 
490
+ def test_expired_eh
491
+ c = basic_connection
492
+ touts[c.object_id] = Time.now - 11
493
+
494
+ @http.idle_timeout = 0
495
+ assert @http.expired? c
496
+
497
+ @http.idle_timeout = 10
498
+ assert @http.expired? c
499
+
500
+ @http.idle_timeout = 11
501
+ assert @http.expired? c
502
+
503
+ @http.idle_timeout = 12
504
+ refute @http.expired? c
505
+
506
+ @http.idle_timeout = nil
507
+ refute @http.expired? c
508
+ end
509
+
436
510
  def test_finish
437
511
  c = basic_connection
438
512
  reqs[c.object_id] = 5
@@ -441,7 +515,7 @@ class TestNetHttpPersistent < MiniTest::Unit::TestCase
441
515
 
442
516
  refute c.started?
443
517
  assert c.finished?
444
- assert_nil reqs[c.object_id]
518
+ assert_equal 0, reqs[c.object_id]
445
519
  end
446
520
 
447
521
  def test_finish_io_error
@@ -478,6 +552,10 @@ class TestNetHttpPersistent < MiniTest::Unit::TestCase
478
552
 
479
553
  def test_max_age
480
554
  assert_in_delta Time.now - 5, @http.max_age
555
+
556
+ @http.idle_timeout = nil
557
+
558
+ assert_in_delta Time.now + 1, @http.max_age
481
559
  end
482
560
 
483
561
  def test_normalize_uri
@@ -693,6 +771,10 @@ class TestNetHttpPersistent < MiniTest::Unit::TestCase
693
771
  def test_request_close_1_0
694
772
  c = connection
695
773
 
774
+ class << c
775
+ remove_method :request
776
+ end
777
+
696
778
  def c.request req
697
779
  @req = req
698
780
  r = Net::HTTPResponse.allocate
@@ -740,6 +822,10 @@ class TestNetHttpPersistent < MiniTest::Unit::TestCase
740
822
  def test_request_connection_close_response
741
823
  c = connection
742
824
 
825
+ class << c
826
+ remove_method :request
827
+ end
828
+
743
829
  def c.request req
744
830
  @req = req
745
831
  r = Net::HTTPResponse.allocate
@@ -887,7 +973,7 @@ class TestNetHttpPersistent < MiniTest::Unit::TestCase
887
973
  assert c.started?
888
974
  assert c.finished?
889
975
  assert c.reset?
890
- assert_nil reqs[c.object_id]
976
+ assert_equal 0, reqs[c.object_id]
891
977
  assert_equal Net::HTTP::Persistent::EPOCH, touts[c.object_id]
892
978
  end
893
979
 
@@ -948,7 +1034,6 @@ class TestNetHttpPersistent < MiniTest::Unit::TestCase
948
1034
  def test_shutdown
949
1035
  ssl_conns
950
1036
  c = connection
951
- cs = conns
952
1037
  rs = reqs
953
1038
  ts = touts
954
1039
 
@@ -1177,7 +1262,6 @@ class TestNetHttpPersistent < MiniTest::Unit::TestCase
1177
1262
 
1178
1263
  def test_ssl_cleanup
1179
1264
  uri1 = URI.parse 'https://one.example'
1180
- uri2 = URI.parse 'https://two.example'
1181
1265
 
1182
1266
  c1 = @http.connection_for uri1
1183
1267
 
metadata CHANGED
@@ -1,13 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: net-http-persistent
3
3
  version: !ruby/object:Gem::Version
4
- hash: 31
4
+ hash: 15
5
5
  prerelease:
6
6
  segments:
7
7
  - 2
8
- - 5
9
- - 2
10
- version: 2.5.2
8
+ - 6
9
+ version: "2.6"
11
10
  platform: ruby
12
11
  authors:
13
12
  - Eric Hodel
@@ -16,9 +15,9 @@ bindir: bin
16
15
  cert_chain:
17
16
  - |
18
17
  -----BEGIN CERTIFICATE-----
19
- MIIDVzCCAj+gAwIBAgIBATANBgkqhkiG9w0BAQUFADBBMRAwDgYDVQQDDAdkcmJy
18
+ MIIDeDCCAmCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBBMRAwDgYDVQQDDAdkcmJy
20
19
  YWluMRgwFgYKCZImiZPyLGQBGRYIc2VnbWVudDcxEzARBgoJkiaJk/IsZAEZFgNu
21
- ZXQwHhcNMTIwMTMxMDEwMzUyWhcNMTMwMTMwMDEwMzUyWjBBMRAwDgYDVQQDDAdk
20
+ ZXQwHhcNMTIwMjI4MTc1NDI1WhcNMTMwMjI3MTc1NDI1WjBBMRAwDgYDVQQDDAdk
22
21
  cmJyYWluMRgwFgYKCZImiZPyLGQBGRYIc2VnbWVudDcxEzARBgoJkiaJk/IsZAEZ
23
22
  FgNuZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCbbgLrGLGIDE76
24
23
  LV/cvxdEzCuYuS3oG9PrSZnuDweySUfdp/so0cDq+j8bqy6OzZSw07gdjwFMSd6J
@@ -26,17 +25,18 @@ cert_chain:
26
25
  Gj/okWrQl0NjYOYBpDi+9PPmaH2RmLJu0dB/NylsDnW5j6yN1BEI8MfJRR+HRKZY
27
26
  mUtgzBwF1V4KIZQ8EuL6I/nHVu07i6IkrpAgxpXUfdJQJi0oZAqXurAV3yTxkFwd
28
27
  g62YrrW26mDe+pZBzR6bpLE+PmXCzz7UxUq3AE0gPHbiMXie3EFE0oxnsU3lIduh
29
- sCANiQ8BAgMBAAGjWjBYMAkGA1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQW
28
+ sCANiQ8BAgMBAAGjezB5MAkGA1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQW
30
29
  BBS5k4Z75VSpdM0AclG2UvzFA/VW5DAfBgNVHREEGDAWgRRkcmJyYWluQHNlZ21l
31
- bnQ3Lm5ldDANBgkqhkiG9w0BAQUFAAOCAQEAge3LmAU2QbrS2/grAEmRu3bCCHrQ
32
- NSc6j+p53VJ1DraNWEMY3D90F/SKzsI0SYgZb71i49k+pNA2CVXzEJAY7agZbjWJ
33
- UbgGKN8u9SGbIoQPBPIl97JPIGlR7AoEdmlWyFySaZD4o6+Q0onUXIV+P/KrYTVb
34
- Zj/NEjHGrvskpDzlYI2LvG71DFp1o0hfIZzdvfWLAMVqtuEjJ6QrUm9FttR06rNo
35
- itgEKl/tNI4M9oKJT0faQ5PvJ70ualcLnwkBLyJVd2r8qwxfjUAjKF8iMpBSb98s
36
- YJY7T/W2n+eWy8WuPhzVUkyzguj0bQe27NDeabgCh2mHd4Hynk2AkYh8MQ==
30
+ bnQ3Lm5ldDAfBgNVHRIEGDAWgRRkcmJyYWluQHNlZ21lbnQ3Lm5ldDANBgkqhkiG
31
+ 9w0BAQUFAAOCAQEAPeWzFnrcvC6eVzdlhmjUub2s6qieBkongKRDHQz5MEeQv4LS
32
+ SARnoHY+uCAVL/1xGAhmpzqQ3fJGWK9eBacW/e8E5GF9xQcV3mE1bA0WNaiDlX5j
33
+ U2aI+ZGSblqvHUCxKBHR1s7UMHsbz1saOmgdRTyPx0juJs68ocbUTeYBLWu9V4KP
34
+ zdGAG2JXO2gONg3b4tYDvpBLbry+KOX27iAJulUaH9TiTOULL4ITJVFsK0mYVqmR
35
+ Q8Tno9S3e4XGGP1ZWfLrTWEJbavFfhGHut2iMRwfC7s/YILAHNATopaJdH9DNpd1
36
+ U81zGHMUBOvz/VGT6wJwYJ3emS2nfA2NOHFfgA==
37
37
  -----END CERTIFICATE-----
38
38
 
39
- date: 2012-02-13 00:00:00 Z
39
+ date: 2012-03-26 00:00:00 Z
40
40
  dependencies:
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: minitest
@@ -46,11 +46,11 @@ dependencies:
46
46
  requirements:
47
47
  - - ~>
48
48
  - !ruby/object:Gem::Version
49
- hash: 23
49
+ hash: 21
50
50
  segments:
51
51
  - 2
52
- - 10
53
- version: "2.10"
52
+ - 11
53
+ version: "2.11"
54
54
  type: :development
55
55
  version_requirements: *id001
56
56
  - !ruby/object:Gem::Dependency
@@ -76,11 +76,11 @@ dependencies:
76
76
  requirements:
77
77
  - - ~>
78
78
  - !ruby/object:Gem::Version
79
- hash: 25
79
+ hash: 35
80
80
  segments:
81
81
  - 2
82
- - 13
83
- version: "2.13"
82
+ - 16
83
+ version: "2.16"
84
84
  type: :development
85
85
  version_requirements: *id003
86
86
  description: |-
@@ -146,7 +146,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
146
146
  requirements: []
147
147
 
148
148
  rubyforge_project: net-http-persistent
149
- rubygems_version: 1.8.12
149
+ rubygems_version: 1.8.21
150
150
  signing_key:
151
151
  specification_version: 3
152
152
  summary: Manages persistent connections using Net::HTTP plus a speed fix for Ruby 1.8
metadata.gz.sig CHANGED
Binary file