diff options
author | Eugen Rochko <eugen@zeonfederated.com> | 2019-07-02 00:34:38 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-07-02 00:34:38 +0200 |
commit | 0d9ffe56fb59e0d1fce91265f44140d874c0bfba (patch) | |
tree | 84ce8cd86dc085320f979da992129de34ea13b56 /spec/lib/connection_pool/shared_connection_pool_spec.rb | |
parent | 2cfa427ea7c08abc3fa52fb2e8bfd569146e9c98 (diff) |
Add request pool to improve delivery performance (#10353)
* Add request pool to improve delivery performance Fix #7909 * Ensure connection is closed when exception interrupts execution * Remove Timeout#timeout from socket connection * Fix infinite retrial loop on HTTP::ConnectionError * Close sockets on failure, reduce idle time to 90 seconds * Add MAX_REQUEST_POOL_SIZE option to limit concurrent connections to the same server * Use a shared pool size, 512 by default, to stay below open file limit * Add some tests * Add more tests * Reduce MAX_IDLE_TIME from 90 to 30 seconds, reap every 30 seconds * Use a shared pool that returns preferred connection but re-purposes other ones when needed * Fix wrong connection being returned on subsequent calls within the same thread * Reduce mutex calls on flushes from 2 to 1 and add test for reaping
Diffstat (limited to 'spec/lib/connection_pool/shared_connection_pool_spec.rb')
-rw-r--r-- | spec/lib/connection_pool/shared_connection_pool_spec.rb | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/spec/lib/connection_pool/shared_connection_pool_spec.rb b/spec/lib/connection_pool/shared_connection_pool_spec.rb new file mode 100644 index 000000000..114464558 --- /dev/null +++ b/spec/lib/connection_pool/shared_connection_pool_spec.rb @@ -0,0 +1,28 @@ +# frozen_string_literal: true + +require 'rails_helper' + +describe ConnectionPool::SharedConnectionPool do + class MiniConnection + attr_reader :site + + def initialize(site) + @site = site + end + end + + subject { described_class.new(size: 5, timeout: 5) { |site| MiniConnection.new(site) } } + + describe '#with' do + it 'runs a block with a connection' do + block_run = false + + subject.with('foo') do |connection| + expect(connection).to be_a MiniConnection + block_run = true + end + + expect(block_run).to be true + end + end +end |