From f18a248c363f72a66c72295f88afa13a3bb360f1 Mon Sep 17 00:00:00 2001
From: Col
Date: Mon, 26 Nov 2018 23:55:26 +0800
Subject: [PATCH] Expose `pool_size` as a option for the NetHttpPersistent
adapter (#834)
---
README.md | 2 +-
lib/faraday/adapter/net_http_persistent.rb | 4 +++-
test/adapters/net_http_persistent_test.rb | 22 ++++++++++++++++++++++
3 files changed, 26 insertions(+), 2 deletions(-)
diff --git a/README.md b/README.md
index e57be0234..4ef4f8b79 100644
--- a/README.md
+++ b/README.md
@@ -274,7 +274,7 @@ end
### NetHttpPersistent
```ruby
conn = Faraday.new(...) do |f|
- f.adapter :net_http_persistent do |http| # yields Net::HTTP::Persistent
+ f.adapter :net_http_persistent, pool_size: 5 do |http| # yields Net::HTTP::Persistent
http.idle_timeout = 100
http.retry_change_requests = true
end
diff --git a/lib/faraday/adapter/net_http_persistent.rb b/lib/faraday/adapter/net_http_persistent.rb
index cb4c32e3f..75e4f00f3 100644
--- a/lib/faraday/adapter/net_http_persistent.rb
+++ b/lib/faraday/adapter/net_http_persistent.rb
@@ -8,7 +8,9 @@ class NetHttpPersistent < NetHttp
def net_http_connection(env)
@cached_connection ||=
if Net::HTTP::Persistent.instance_method(:initialize).parameters.first == [:key, :name]
- Net::HTTP::Persistent.new(name: 'Faraday')
+ options = {name: 'Faraday'}
+ options[:pool_size] = @connection_options[:pool_size] if @connection_options.key?(:pool_size)
+ Net::HTTP::Persistent.new(options)
else
Net::HTTP::Persistent.new('Faraday')
end
diff --git a/test/adapters/net_http_persistent_test.rb b/test/adapters/net_http_persistent_test.rb
index 254cef376..e9adcb3dd 100644
--- a/test/adapters/net_http_persistent_test.rb
+++ b/test/adapters/net_http_persistent_test.rb
@@ -64,6 +64,28 @@ def test_does_not_reuse_tcp_sockets_when_proxy_changes
end
end
+ def test_without_custom_connection_config
+ url = URI('https://example.com:1234')
+
+ adapter = Faraday::Adapter::NetHttpPersistent.new
+
+ http = adapter.send(:net_http_connection, :url => url, :request => {})
+
+ # `pool` is only present in net_http_persistent >= 3.0
+ assert http.pool.size != nil if http.respond_to?(:pool)
+ end
+
+ def test_custom_connection_config
+ url = URI('https://example.com:1234')
+
+ adapter = Faraday::Adapter::NetHttpPersistent.new(nil, {pool_size: 5})
+
+ http = adapter.send(:net_http_connection, :url => url, :request => {})
+
+ # `pool` is only present in net_http_persistent >= 3.0
+ assert_equal 5, http.pool.size if http.respond_to?(:pool)
+ end
+
def test_custom_adapter_config
url = URI('https://example.com:1234')