excon 1.9.1 → 1.10.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 +4 -4
- data/lib/excon/connection.rb +18 -8
- data/lib/excon/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: a8f339eac15303582618d7c092e0c31facc11e717477d11676ddf1cece1f4df8
|
|
4
|
+
data.tar.gz: f1225a0e544fb64eed9411d5f0c5028103a853e07acfa5df5b9c8d1057101297
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 37951c154ffa841570e55ec4bd9bd6894ccd4617cbf51f03e2606d341defde41e114d85b78af7cb67ffc9f46ba4fb8ca59398dcd219f4aeb0267ee79f5a20649
|
|
7
|
+
data.tar.gz: bf5f8bb104fcdcc6fe87d8f9a221775214af61b81df535f603ff1c1c47b44b5bfd441aef1bb35ede8761cdb2badd5ff52be93ecd2a3639a4809cf0fc3371f383
|
data/lib/excon/connection.rb
CHANGED
|
@@ -234,6 +234,12 @@ module Excon
|
|
|
234
234
|
# @option params [String] :path appears after 'scheme://host:port/'
|
|
235
235
|
# @option params [Hash] :query appended to the 'scheme://host:port/path/' in the form of '?key=value'
|
|
236
236
|
def request(params={}, &block)
|
|
237
|
+
# Set once the socket is left fit for the next request. Leaving early
|
|
238
|
+
# without passing through the rescue below (Timeout.timeout,
|
|
239
|
+
# Thread#raise, Thread#kill, Interrupt, throw) can leave a request
|
|
240
|
+
# half-written or a response unread on it, so ensure then resets it.
|
|
241
|
+
socket_reusable = false
|
|
242
|
+
|
|
237
243
|
# @data has defaults, merge in new params to override
|
|
238
244
|
datum = @data.merge(params)
|
|
239
245
|
|
|
@@ -295,11 +301,6 @@ module Excon
|
|
|
295
301
|
|
|
296
302
|
datum[:connection] = self
|
|
297
303
|
|
|
298
|
-
# cleanup data left behind on persistent connection after interrupt
|
|
299
|
-
if datum[:persistent] && !@persistent_socket_reusable
|
|
300
|
-
reset
|
|
301
|
-
end
|
|
302
|
-
|
|
303
304
|
datum[:stack] = datum[:middlewares].map do |middleware|
|
|
304
305
|
lambda {|stack| middleware.new(stack)}
|
|
305
306
|
end.reverse.inject(self) do |middlewares, middleware|
|
|
@@ -308,9 +309,7 @@ module Excon
|
|
|
308
309
|
datum = datum[:stack].request_call(datum)
|
|
309
310
|
|
|
310
311
|
unless datum[:pipeline]
|
|
311
|
-
@persistent_socket_reusable = false
|
|
312
312
|
datum = response(datum)
|
|
313
|
-
@persistent_socket_reusable = true
|
|
314
313
|
|
|
315
314
|
if datum[:persistent]
|
|
316
315
|
if (key = datum[:response][:headers].keys.detect {|k| k.casecmp?('Connection') })
|
|
@@ -322,12 +321,16 @@ module Excon
|
|
|
322
321
|
reset
|
|
323
322
|
end
|
|
324
323
|
|
|
324
|
+
socket_reusable = true
|
|
325
325
|
Excon::Response.new(datum[:response])
|
|
326
326
|
else
|
|
327
|
+
# the response is read later, by #requests
|
|
328
|
+
socket_reusable = true
|
|
327
329
|
datum
|
|
328
330
|
end
|
|
329
331
|
rescue => error
|
|
330
332
|
reset
|
|
333
|
+
socket_reusable = true
|
|
331
334
|
|
|
332
335
|
# If we didn't get far enough to initialize datum and the middleware stack, just raise
|
|
333
336
|
raise error if !datum
|
|
@@ -338,11 +341,16 @@ module Excon
|
|
|
338
341
|
else
|
|
339
342
|
raise error
|
|
340
343
|
end
|
|
344
|
+
ensure
|
|
345
|
+
reset unless socket_reusable
|
|
341
346
|
end
|
|
342
347
|
|
|
343
348
|
# Sends the supplied requests to the destination host using pipelining.
|
|
344
349
|
# @param pipeline_params [Array<Hash>] An array of one or more optional params, override defaults set in Connection.new, see #request for details
|
|
345
350
|
def requests(pipeline_params)
|
|
351
|
+
# as in #request: reset unless every response was read
|
|
352
|
+
socket_reusable = false
|
|
353
|
+
|
|
346
354
|
pipeline_params.each {|params| params.merge!(:pipeline => true, :persistent => true) }
|
|
347
355
|
pipeline_params.last[:persistent] = @data[:persistent]
|
|
348
356
|
|
|
@@ -362,7 +370,10 @@ module Excon
|
|
|
362
370
|
reset
|
|
363
371
|
end
|
|
364
372
|
|
|
373
|
+
socket_reusable = true
|
|
365
374
|
responses
|
|
375
|
+
ensure
|
|
376
|
+
reset unless socket_reusable
|
|
366
377
|
end
|
|
367
378
|
|
|
368
379
|
# Sends the supplied requests to the destination host using pipelining in
|
|
@@ -384,7 +395,6 @@ module Excon
|
|
|
384
395
|
if (old_socket = sockets.delete(@socket_key))
|
|
385
396
|
old_socket.close rescue nil
|
|
386
397
|
end
|
|
387
|
-
@persistent_socket_reusable = true
|
|
388
398
|
end
|
|
389
399
|
|
|
390
400
|
# Generate HTTP request verb methods
|
data/lib/excon/version.rb
CHANGED