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')