elastic-transport 8.1.1 → 8.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c45579654af5263b19d9ed8a814727d7d63fa3c4ecb3e1313adcffe6b5f9e185
4
- data.tar.gz: 278b4e2bf242cf1acf9cea3f9bb297b45a5517c3f9f38921484913e337afa4c3
3
+ metadata.gz: aca3fc15486eeb7455f903dbaa5b6a594d4fd410f895cff6b3bf832c0dcad8b4
4
+ data.tar.gz: 4fd798b71008e3bba436434a5c98321fcd2b15934a6244908966c8b9cdd5c3e0
5
5
  SHA512:
6
- metadata.gz: '078d4316c2ea7222c02905522389c47494c049a35b0b924d76afeeb340517d3f85fc6824294870dc7399884581233c1564424cae33f6381d21476a4f39758b91'
7
- data.tar.gz: bd074dd0d1eeca808efe02e48bfc40232d12b7923e077352e1dc72749e030a85c9b16112d836506fce7cef076dfedd7d3d5f44659598b68ebb7fc00bf68f4a83
6
+ metadata.gz: a33a557b17fc75fbc2cd9b8fb713603b67c35097fce929ccdee0b81b76c58c05885286aeb1aeed8c72068d6c12a83b51e6dc1f9f07678d6e17f51ce962cb0af8
7
+ data.tar.gz: 5105d1a01106314206e250a105329abfb9553f6c12170bafaf8b7eb4741f5d7b9b414027919aac9df9867ee0859fbfce6b492fbc64a8335f17eebcc7fd109cf4
@@ -1,20 +1,22 @@
1
- name: 8.1 tests
1
+ name: main tests
2
2
  on:
3
3
  push:
4
4
  branches:
5
- - 8.1
5
+ - main
6
6
  pull_request:
7
7
  branches:
8
- - 8.1
8
+ - main
9
9
  jobs:
10
- test-ruby:
10
+ test:
11
+ name: 'Main tests'
11
12
  env:
12
13
  TEST_ES_SERVER: http://localhost:9250
13
14
  PORT: 9250
14
15
  strategy:
15
16
  fail-fast: false
16
17
  matrix:
17
- ruby: [ '2.7', '3.0', '3.1', 'jruby-9.3', 'jruby-9.4' ]
18
+ ruby: [ '2.7', '3.0', '3.1', '3.2', 'jruby-9.3', 'jruby-9.4' ]
19
+ es_version: ['8.4-SNAPSHOT', '8.5-SNAPSHOT', '8.6-SNAPSHOT']
18
20
  runs-on: ubuntu-latest
19
21
  steps:
20
22
  - uses: actions/checkout@v2
@@ -26,7 +28,7 @@ jobs:
26
28
  sudo sysctl -w vm.max_map_count=262144
27
29
  - uses: elastic/elastic-github-actions/elasticsearch@master
28
30
  with:
29
- stack-version: 8.9-SNAPSHOT
31
+ stack-version: ${{ matrix.es_version }}
30
32
  security-enabled: false
31
33
  - uses: ruby/setup-ruby@v1
32
34
  with:
@@ -43,4 +45,42 @@ jobs:
43
45
  run: bundle exec rake test:spec
44
46
  - name: integration tests
45
47
  run: bundle exec rake test:integration
46
-
48
+ test-faraday1:
49
+ name: 'Test Faraday 1'
50
+ env:
51
+ TEST_ES_SERVER: http://localhost:9250
52
+ PORT: 9250
53
+ strategy:
54
+ fail-fast: false
55
+ matrix:
56
+ ruby: [ '2.7', '3.0', '3.1', '3.2', 'jruby-9.3' ]
57
+ es_version: ['8.6-SNAPSHOT']
58
+ runs-on: ubuntu-latest
59
+ steps:
60
+ - uses: actions/checkout@v2
61
+ - name: Increase system limits
62
+ run: |
63
+ sudo swapoff -a
64
+ sudo sysctl -w vm.swappiness=1
65
+ sudo sysctl -w fs.file-max=262144
66
+ sudo sysctl -w vm.max_map_count=262144
67
+ - uses: elastic/elastic-github-actions/elasticsearch@master
68
+ with:
69
+ stack-version: ${{ matrix.es_version }}
70
+ security-enabled: false
71
+ - uses: ruby/setup-ruby@v1
72
+ with:
73
+ ruby-version: ${{ matrix.ruby }}
74
+ - name: Build and test with Rake
75
+ run: |
76
+ sudo apt-get update
77
+ sudo apt-get install libcurl4-openssl-dev
78
+ ruby -v
79
+ gem install bundler
80
+ BUNDLE_GEMFILE=./Gemfile-faraday1.gemfile bundle install
81
+ - name: faraday1 unit tests
82
+ run: BUNDLE_GEMFILE=./Gemfile-faraday1.gemfile bundle exec rake test:faraday1:unit
83
+ - name: specs
84
+ run: BUNDLE_GEMFILE=./Gemfile-faraday1.gemfile bundle exec rake test:faraday1:spec
85
+ - name: integration tests
86
+ run: BUNDLE_GEMFILE=./Gemfile-faraday1.gemfile bundle exec rake test:faraday1:integration
data/.gitignore CHANGED
@@ -5,7 +5,7 @@
5
5
  .bundle
6
6
  .config
7
7
  .yardoc
8
- Gemfile.lock
8
+ Gemfile*.lock
9
9
  InstalledFiles
10
10
  _yardoc
11
11
  coverage
data/CHANGELOG.md CHANGED
@@ -1,10 +1,11 @@
1
- ## 8.1.1
1
+ ## 8.2.0
2
2
 
3
- Backports the following updates from 8.2:
3
+ Tested versions of Ruby: (MRI) 2.7, 3.0, 3.1, 3.2, JRuby 9.3 and JRuby 9.4.
4
4
 
5
- - Refactors `apply_headers` in base and manticore implementation: When passing in an object to the initializer, `apply_headers` would mutate this object and in certain conditions, this would raise `RuntimeError` in JRuby 9.3 and `ConcurrencyError` in JRuby 9.4. This update clones the options object instead.
6
- - Fixes [issue #44](https://github.com/elastic/elastic-transport-ruby/issues/44), raising `Elastic::Transport::Transport::Error` instead of `Faraday::ConnectionFailed` (or any other Faraday error class) when a host is unreachable.
7
- - Fixes parsing ipv4 addresses like `inet[/127.0.0.1:9200]` in sniffer, [issue #48](https://github.com/elastic/elastic-transport-ruby/issues/48). [Pull Request](https://github.com/elastic/elastic-transport-ruby/pull/49) by [@robbat2](https://github.com/robbat2), thank you!
5
+ - Fixes [issue #44](https://github.com/elastic/elastic-transport-ruby/issues/44), raising `Elasticsearch::Transport::Transport::Error` instead of `Faraday::ConnectionFailed` (or any other Faraday error class) when a host is unreachable.
6
+ - Removes development dependency on `ansi`, it hasn't been updated for years.
7
+ - Adds `rake console` task to run IRB with the Elastic transport client libraries loaded.
8
+ - General refactors, cleanup and updates in code for `base.rb` (The base class used by HTTP implementations Faraday, Manticore, Curb), `errors.rb`, `faraday.rb`, and more.
8
9
 
9
10
  ## 8.1.0
10
11
 
data/Gemfile CHANGED
@@ -20,15 +20,11 @@ source 'https://rubygems.org'
20
20
  # Specify your gem's dependencies in elasticsearch-transport.gemspec
21
21
  gemspec
22
22
 
23
- if File.exist? File.expand_path('../elasticsearch-api/elasticsearch-api.gemspec', __dir__)
24
- gem 'elasticsearch-api', path: File.expand_path('../elasticsearch-api', __dir__), require: false
25
- end
26
-
27
- if File.exist? File.expand_path('../elasticsearch/elasticsearch.gemspec', __dir__)
28
- gem 'elasticsearch', path: File.expand_path('../elasticsearch', __dir__), require: false
29
- end
30
-
31
23
  group :development, :test do
24
+ gem 'faraday-httpclient'
25
+ gem 'faraday-net_http_persistent'
26
+ gem 'faraday-patron' unless defined? JRUBY_VERSION
27
+ gem 'faraday-typhoeus'
32
28
  gem 'rspec'
33
29
  if defined?(JRUBY_VERSION)
34
30
  gem 'pry-nav'
@@ -0,0 +1,39 @@
1
+ # Licensed to Elasticsearch B.V. under one or more contributor
2
+ # license agreements. See the NOTICE file distributed with
3
+ # this work for additional information regarding copyright
4
+ # ownership. Elasticsearch B.V. licenses this file to you under
5
+ # the Apache License, Version 2.0 (the "License"); you may
6
+ # not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing,
12
+ # software distributed under the License is distributed on an
13
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14
+ # KIND, either express or implied. See the License for the
15
+ # specific language governing permissions and limitations
16
+ # under the License.
17
+
18
+ source 'https://rubygems.org'
19
+
20
+ # Usage:
21
+ #
22
+ # $ BUNDLE_GEMFILE=./Gemfile-faraday1.gemfile bundle install
23
+ # $ BUNDLE_GEMFILE=./Gemfile-faraday1.gemfile bundle exec rake test:faraday1:unit
24
+
25
+ gem 'faraday', '~> 1'
26
+ gemspec path: './'
27
+
28
+ group :development, :test do
29
+ gem 'httpclient'
30
+ gem 'net-http-persistent'
31
+ gem 'patron' unless defined? JRUBY_VERSION
32
+ gem 'rspec'
33
+ gem 'typhoeus'
34
+ if defined?(JRUBY_VERSION)
35
+ gem 'pry-nav'
36
+ else
37
+ gem 'pry-byebug'
38
+ end
39
+ end
data/README.md CHANGED
@@ -15,7 +15,7 @@ response = client.perform_request('GET', '_cluster/health')
15
15
 
16
16
  **Refer to [the official documentation on Elastic Transport](https://www.elastic.co/guide/en/elasticsearch/client/ruby-api/current/transport.html).**
17
17
 
18
- **Refer to [Advanced Configuration](https://www.elastic.co/guide/en/elasticsearch/client/ruby-api/current/advanced-config.html) to read about more configuration options.**
18
+ **Refer to [Advanced Configuration](https://elasticsearch-ruby_1881.docs-preview.app.elstc.co/guide/en/elasticsearch/client/ruby-api/master/advanced-config.html) to read about more configuration options.**
19
19
 
20
20
  ## Compatibility
21
21
 
data/Rakefile CHANGED
@@ -18,13 +18,22 @@
18
18
  require 'bundler/gem_tasks'
19
19
  require 'mkmf'
20
20
 
21
- desc "Run unit tests"
21
+ desc 'Run unit tests'
22
22
  task default: 'test:unit'
23
23
  task test: 'test:unit'
24
24
 
25
25
  # ----- Test tasks ------------------------------------------------------------
26
26
  require 'rake/testtask'
27
27
  require 'rspec/core/rake_task'
28
+ FARADAY1_GEMFILE = 'Gemfile-faraday1.gemfile'.freeze
29
+ GEMFILES = ['Gemfile', FARADAY1_GEMFILE].freeze
30
+
31
+ task :install do
32
+ GEMFILES.each do |gemfile|
33
+ gemfile = File.expand_path("../#{gemfile}", __FILE__)
34
+ sh "bundle install --gemfile #{gemfile}"
35
+ end
36
+ end
28
37
 
29
38
  namespace :test do
30
39
  RSpec::Core::RakeTask.new(:spec)
@@ -46,6 +55,7 @@ namespace :test do
46
55
  desc 'Run all tests'
47
56
  task :all do
48
57
  Rake::Task['test:unit'].invoke
58
+ Rake::Task['test:spec'].invoke
49
59
  Rake::Task['test:integration'].invoke
50
60
  end
51
61
 
@@ -53,6 +63,34 @@ namespace :test do
53
63
  test.libs << 'lib' << 'test'
54
64
  test.test_files = FileList['test/profile/**/*_test.rb']
55
65
  end
66
+
67
+ namespace :faraday1 do
68
+ desc 'Faraday 1: Run RSpec with dependency on Faraday 1'
69
+ task :spec do
70
+ sh "BUNDLE_GEMFILE=#{FARADAY1_GEMFILE} bundle exec rspec"
71
+ end
72
+
73
+ desc 'Faraday 1: Run unit tests with dependency on Faraday 1'
74
+ task :unit do
75
+ Dir.glob('./test/unit/**/**.rb').each do |test|
76
+ sh "BUNDLE_GEMFILE=#{FARADAY1_GEMFILE} ruby -Ilib:test #{test}"
77
+ end
78
+ end
79
+
80
+ desc 'Faraday 1: Run integration tests with dependency on Faraday 1'
81
+ task :integration do
82
+ Dir.glob('./test/integration/**/**.rb').each do |test|
83
+ sh "BUNDLE_GEMFILE=#{FARADAY1_GEMFILE} ruby -Ilib:test #{test}"
84
+ end
85
+ end
86
+
87
+ desc 'Faraday 1: Run all tests'
88
+ task :all do
89
+ Rake::Task['test:faraday1:unit'].invoke
90
+ Rake::Task['test:faraday1:spec'].invoke
91
+ Rake::Task['test:faraday1:integration'].invoke
92
+ end
93
+ end
56
94
  end
57
95
 
58
96
  namespace :docker do
@@ -72,6 +110,15 @@ namespace :docker do
72
110
  end
73
111
  end
74
112
 
113
+ desc 'Run Ruby console with the Elastic transport client libraries loaded'
114
+ task :console do
115
+ require 'irb'
116
+ require 'irb/completion'
117
+ require 'elastic-transport'
118
+ ARGV.clear
119
+ IRB.start
120
+ end
121
+
75
122
  # ----- Documentation tasks ---------------------------------------------------
76
123
  require 'yard'
77
124
  YARD::Rake::YardocTask.new(:doc) do |t|
@@ -24,7 +24,7 @@ Gem::Specification.new do |s|
24
24
  s.name = "elastic-transport"
25
25
  s.version = Elastic::Transport::VERSION
26
26
  s.authors = ['Karel Minarik', 'Emily Stolfo', 'Fernando Briano']
27
- s.email = ['clients-team@elastic.co']
27
+ s.email = ['support@elastic.co']
28
28
  s.summary = 'Low level Ruby client for Elastic services.'
29
29
  s.homepage = 'https://github.com/elastic/elastic-transport-ruby'
30
30
  s.license = 'Apache-2.0'
@@ -44,20 +44,18 @@ Gem::Specification.new do |s|
44
44
 
45
45
  s.required_ruby_version = '>= 2.5'
46
46
 
47
+ s.add_dependency 'faraday', '< 3'
47
48
  s.add_dependency 'multi_json'
48
- s.add_dependency 'faraday', '~> 1'
49
49
 
50
+ # Faraday Adapters
51
+ s.add_development_dependency 'manticore' if defined? JRUBY_VERSION
52
+ s.add_development_dependency 'curb' unless defined? JRUBY_VERSION
50
53
  s.add_development_dependency 'bundler'
51
54
  s.add_development_dependency 'cane'
52
- s.add_development_dependency 'curb' unless defined? JRUBY_VERSION
53
55
  s.add_development_dependency 'hashie'
54
- s.add_development_dependency 'httpclient'
55
- s.add_development_dependency 'manticore' if defined? JRUBY_VERSION
56
56
  s.add_development_dependency 'minitest'
57
57
  s.add_development_dependency 'minitest-reporters'
58
58
  s.add_development_dependency 'mocha'
59
- s.add_development_dependency 'net-http-persistent'
60
- s.add_development_dependency 'patron' unless defined? JRUBY_VERSION
61
59
  s.add_development_dependency 'pry'
62
60
  s.add_development_dependency 'rake', '~> 13'
63
61
  s.add_development_dependency 'require-prof' unless defined?(JRUBY_VERSION) || defined?(Rubinius)
@@ -65,7 +63,6 @@ Gem::Specification.new do |s|
65
63
  s.add_development_dependency 'shoulda-context'
66
64
  s.add_development_dependency 'simplecov'
67
65
  s.add_development_dependency 'test-unit', '~> 2'
68
- s.add_development_dependency 'typhoeus', '~> 1.4'
69
66
  s.add_development_dependency 'yard'
70
67
 
71
68
  s.description = <<-DESC.gsub(/^ /, '')
@@ -283,24 +283,26 @@ module Elastic
283
283
  # Auto-detect the best adapter (HTTP "driver") available, based on libraries
284
284
  # loaded by the user, preferring those with persistent connections
285
285
  # ("keep-alive") by default
286
+ # Check adapters based on the usage of Faraday 1 or 2. Faraday should be defined here
287
+ # since this is only called when transport class is Transport::HTTP::Faraday
286
288
  #
287
289
  # @return [Symbol]
288
290
  #
289
291
  # @api private
290
292
  #
291
293
  def __auto_detect_adapter
292
- case
293
- when defined?(::Patron)
294
- :patron
295
- when defined?(::Typhoeus)
296
- :typhoeus
297
- when defined?(::HTTPClient)
298
- :httpclient
299
- when defined?(::Net::HTTP::Persistent)
300
- :net_http_persistent
294
+ if Gem::Version.new(Faraday::VERSION) >= Gem::Version.new(2)
295
+ return :patron if defined?(Faraday::Adapter::Patron)
296
+ return :typhoeus if defined?(Faraday::Adapter::Typhoeus)
297
+ return :httpclient if defined?(Faraday::Adapter::HTTPClient)
298
+ return :net_http_persistent if defined?(Faraday::Adapter::NetHttpPersistent)
301
299
  else
302
- ::Faraday.default_adapter
300
+ return :patron if defined?(::Patron)
301
+ return :typhoeus if defined?(::Typhoeus)
302
+ return :httpclient if defined?(::HTTPClient)
303
+ return :net_http_persistent if defined?(::Net::HTTP::Persistent)
303
304
  end
305
+ ::Faraday.default_adapter
304
306
  end
305
307
  end
306
308
  end
@@ -103,31 +103,31 @@ module Elastic
103
103
  adapter_version = case @arguments[:adapter]
104
104
  when :patron
105
105
  version = Patron::VERSION if defined?(::Patron::VERSION)
106
- {pt: version}
106
+ { pt: version }
107
107
  when :net_http
108
108
  version = if defined?(Net::HTTP::VERSION)
109
109
  Net::HTTP::VERSION
110
110
  elsif defined?(Net::HTTP::HTTPVersion)
111
111
  Net::HTTP::HTTPVersion
112
112
  end
113
- {nh: version}
113
+ { nh: version }
114
114
  when :typhoeus
115
115
  version = Typhoeus::VERSION if defined?(::Typhoeus::VERSION)
116
- {ty: version}
116
+ { ty: version }
117
117
  when :httpclient
118
118
  version = HTTPClient::VERSION if defined?(HTTPClient::VERSION)
119
- {hc: version}
119
+ { hc: version }
120
120
  when :net_http_persistent
121
121
  version = Net::HTTP::Persistent::VERSION if defined?(Net::HTTP::Persistent::VERSION)
122
- {np: version}
122
+ { np: version }
123
123
  else
124
124
  {}
125
125
  end
126
- {fd: Faraday::VERSION}.merge(adapter_version)
126
+ { fd: Faraday::VERSION }.merge(adapter_version)
127
127
  elsif defined?(Transport::HTTP::Curb) && @transport_class == Transport::HTTP::Curb
128
- {cl: Curl::CURB_VERSION}
128
+ { cl: Curl::CURB_VERSION }
129
129
  elsif defined?(Transport::HTTP::Manticore) && @transport_class == Transport::HTTP::Manticore
130
- {mc: Manticore::VERSION}
130
+ { mc: Manticore::VERSION }
131
131
  end
132
132
  end
133
133
  end
@@ -24,12 +24,12 @@ module Elastic
24
24
  include Loggable
25
25
 
26
26
  DEFAULT_PORT = 9200
27
- DEFAULT_PROTOCOL = 'http'
27
+ DEFAULT_PROTOCOL = 'http'.freeze
28
28
  DEFAULT_RELOAD_AFTER = 10_000 # Requests
29
29
  DEFAULT_RESURRECT_AFTER = 60 # Seconds
30
30
  DEFAULT_MAX_RETRIES = 3 # Requests
31
31
  DEFAULT_SERIALIZER_CLASS = Serializer::MultiJson
32
- SANITIZED_PASSWORD = '*' * (rand(14)+1)
32
+ SANITIZED_PASSWORD = '*' * (rand(14) + 1)
33
33
 
34
34
  attr_reader :hosts, :options, :connections, :counter, :last_request_at, :protocol
35
35
  attr_accessor :serializer, :sniffer, :logger, :tracer,
@@ -59,7 +59,7 @@ module Elastic
59
59
  @compression = !!@options[:compression]
60
60
  @connections = __build_connections
61
61
 
62
- @serializer = options[:serializer] || ( options[:serializer_class] ? options[:serializer_class].new(self) : DEFAULT_SERIALIZER_CLASS.new(self) )
62
+ @serializer = options[:serializer] || ( options[:serializer_class] ? options[:serializer_class].new(self) : DEFAULT_SERIALIZER_CLASS.new(self))
63
63
  @protocol = options[:protocol] || DEFAULT_PROTOCOL
64
64
 
65
65
  @logger = options[:logger]
@@ -72,7 +72,7 @@ module Elastic
72
72
  @reload_connections = options[:reload_connections]
73
73
  @reload_after = options[:reload_connections].is_a?(Integer) ? options[:reload_connections] : DEFAULT_RELOAD_AFTER
74
74
  @resurrect_after = options[:resurrect_after] || DEFAULT_RESURRECT_AFTER
75
- @retry_on_status = Array(options[:retry_on_status]).map { |d| d.to_i }
75
+ @retry_on_status = Array(options[:retry_on_status]).map(&:to_i)
76
76
  end
77
77
 
78
78
  # Returns a connection from the connection pool by delegating to {Connections::Collection#get_connection}.
@@ -87,7 +87,7 @@ module Elastic
87
87
  resurrect_dead_connections! if Time.now > @last_request_at + @resurrect_after
88
88
 
89
89
  @counter_mtx.synchronize { @counter += 1 }
90
- reload_connections! if reload_connections && counter % reload_after == 0
90
+ reload_connections! if reload_connections && (counter % reload_after).zero?
91
91
  connections.get_connection(options)
92
92
  end
93
93
 
@@ -97,10 +97,10 @@ module Elastic
97
97
  #
98
98
  def reload_connections!
99
99
  hosts = sniffer.hosts
100
- __rebuild_connections :hosts => hosts, :options => options
100
+ __rebuild_connections(hosts: hosts, options: options)
101
101
  self
102
102
  rescue SnifferTimeoutError
103
- log_error "[SnifferTimeoutError] Timeout when reloading connections."
103
+ log_error('[SnifferTimeoutError] Timeout when reloading connections.')
104
104
  self
105
105
  end
106
106
 
@@ -109,7 +109,7 @@ module Elastic
109
109
  # @see Connections::Connection#resurrect!
110
110
  #
111
111
  def resurrect_dead_connections!
112
- connections.dead.each { |c| c.resurrect! }
112
+ connections.dead.each(&:resurrect!)
113
113
  end
114
114
 
115
115
  # Rebuilds the connections collection in the transport.
@@ -128,7 +128,7 @@ module Elastic
128
128
  __close_connections
129
129
 
130
130
  new_connections = __build_connections
131
- stale_connections = @connections.all.select { |c| ! new_connections.include?(c) }
131
+ stale_connections = @connections.all.reject { |c| new_connections.include?(c) }
132
132
  new_connections = new_connections.reject { |c| @connections.all.include?(c) }
133
133
 
134
134
  @connections.remove(stale_connections)
@@ -177,8 +177,8 @@ module Elastic
177
177
  # @return [Connections::Connection]
178
178
  # @api private
179
179
  #
180
- def __build_connection(host, options={}, block=nil)
181
- raise NoMethodError, "Implement this method in your class"
180
+ def __build_connection(host, options = {}, block = nil)
181
+ raise NoMethodError, 'Implement this method in your class'
182
182
  end
183
183
 
184
184
  # Closes the connections collection
@@ -209,14 +209,14 @@ module Elastic
209
209
  #
210
210
  def __trace(method, path, params, headers, body, url, response, json, took, duration)
211
211
  trace_url = "http://localhost:9200/#{path}?pretty" +
212
- ( params.empty? ? '' : "&#{::Faraday::Utils::ParamsHash[params].to_query}" )
212
+ (params.empty? ? '' : "&#{::Faraday::Utils::ParamsHash[params].to_query}")
213
213
  trace_body = body ? " -d '#{__convert_to_json(body, :pretty => true)}'" : ''
214
214
  trace_command = "curl -X #{method.to_s.upcase}"
215
- trace_command += " -H '#{headers.collect { |k,v| "#{k}: #{v}" }.join(", ")}'" if headers && !headers.empty?
215
+ trace_command += " -H '#{headers.collect { |k, v| "#{k}: #{v}" }.join(", ")}'" if headers && !headers.empty?
216
216
  trace_command += " '#{trace_url}'#{trace_body}\n"
217
217
  tracer.info trace_command
218
218
  tracer.debug "# #{Time.now.iso8601} [#{response.status}] (#{format('%.3f', duration)}s)\n#"
219
- tracer.debug json ? serializer.dump(json, :pretty => true).gsub(/^/, '# ').sub(/\}$/, "\n# }")+"\n" : "# #{response.body}\n"
219
+ tracer.debug json ? serializer.dump(json, pretty: true).gsub(/^/, '# ').sub(/\}$/, "\n# }")+"\n" : "# #{response.body}\n"
220
220
  end
221
221
 
222
222
  # Raise error specific for the HTTP response status or a generic server error
@@ -276,40 +276,37 @@ module Elastic
276
276
  reload_on_failure = opts.fetch(:reload_on_failure, @options[:reload_on_failure])
277
277
  delay_on_retry = opts.fetch(:delay_on_retry, @options[:delay_on_retry])
278
278
 
279
- max_retries = if opts.key?(:retry_on_failure)
280
- opts[:retry_on_failure] === true ? DEFAULT_MAX_RETRIES : opts[:retry_on_failure]
281
- elsif options.key?(:retry_on_failure)
282
- options[:retry_on_failure] === true ? DEFAULT_MAX_RETRIES : options[:retry_on_failure]
283
- end
279
+ max_retries = max_retries(opts) || max_retries(options)
284
280
 
285
281
  params = params.clone
286
- ignore = Array(params.delete(:ignore)).compact.map { |s| s.to_i }
282
+ # Transforms ignore status codes to Integer
283
+ ignore = Array(params.delete(:ignore)).compact.map(&:to_i)
287
284
 
288
285
  begin
289
286
  sleep(delay_on_retry / 1000.0) if tries > 0
290
- tries += 1
287
+ tries += 1
291
288
  connection = get_connection or raise Error.new('Cannot get new connection from pool.')
292
289
 
293
- if connection.connection.respond_to?(:params) && connection.connection.params.respond_to?(:to_hash)
290
+ if connection.connection.respond_to?(:params) &&
291
+ connection.connection.params.respond_to?(:to_hash)
294
292
  params = connection.connection.params.merge(params.to_hash)
295
293
  end
296
294
 
297
- url = connection.full_url(path, params)
295
+ url = connection.full_url(path, params)
298
296
  response = block.call(connection, url)
299
- connection.healthy! if connection.failures > 0
297
+ connection.healthy! if connection.failures.positive?
300
298
 
301
299
  # Raise an exception so we can catch it for `retry_on_status`
302
- __raise_transport_error(response) if response.status.to_i >= 300 && @retry_on_status.include?(response.status.to_i)
300
+ __raise_transport_error(response) if response.status.to_i >= 300 &&
301
+ @retry_on_status.include?(response.status.to_i)
303
302
  rescue Elastic::Transport::Transport::ServerError => e
304
- if response && @retry_on_status.include?(response.status)
305
- log_warn "[#{e.class}] Attempt #{tries} to get response from #{url}"
306
- if tries <= (max_retries || DEFAULT_MAX_RETRIES)
307
- retry
308
- else
309
- log_fatal "[#{e.class}] Cannot get response from #{url} after #{tries} tries"
310
- raise e
311
- end
303
+ raise e unless response && @retry_on_status.include?(response.status)
304
+
305
+ log_warn "[#{e.class}] Attempt #{tries} to get response from #{url}"
306
+ if tries <= (max_retries || DEFAULT_MAX_RETRIES)
307
+ retry
312
308
  else
309
+ log_fatal "[#{e.class}] Cannot get response from #{url} after #{tries} tries"
313
310
  raise e
314
311
  end
315
312
  rescue *host_unreachable_exceptions => e
@@ -317,22 +314,20 @@ module Elastic
317
314
 
318
315
  connection.dead!
319
316
 
320
- if reload_on_failure and tries < connections.all.size
317
+ if reload_on_failure && tries < connections.all.size
321
318
  log_warn "[#{e.class}] Reloading connections (attempt #{tries} of #{connections.all.size})"
322
319
  reload_connections! and retry
323
320
  end
324
321
 
325
322
  exception = Elastic::Transport::Transport::Error.new(e.message)
326
323
 
327
- if max_retries
328
- log_warn "[#{e.class}] Attempt #{tries} connecting to #{connection.host.inspect}"
329
- if tries <= max_retries
330
- retry
331
- else
332
- log_fatal "[#{e.class}] Cannot connect to #{connection.host.inspect} after #{tries} tries"
333
- raise exception
334
- end
324
+ raise exception unless max_retries
325
+
326
+ log_warn "[#{e.class}] Attempt #{tries} connecting to #{connection.host.inspect}"
327
+ if tries <= max_retries
328
+ retry
335
329
  else
330
+ log_fatal "[#{e.class}] Cannot connect to #{connection.host.inspect} after #{tries} tries"
336
331
  raise exception
337
332
  end
338
333
  rescue Exception => e
@@ -351,8 +346,11 @@ module Elastic
351
346
  __raise_transport_error response unless ignore.include?(response.status.to_i)
352
347
  end
353
348
 
354
- json = serializer.load(response.body) if response.body && !response.body.empty? && response.headers && response.headers["content-type"] =~ /json/
355
- took = (json['took'] ? sprintf('%.3fs', json['took']/1000.0) : 'n/a') rescue 'n/a'
349
+ json = serializer.load(response.body) if response.body &&
350
+ !response.body.empty? &&
351
+ response.headers &&
352
+ response.headers["content-type"] =~ /json/
353
+ took = (json['took'] ? sprintf('%.3fs', json['took'] / 1000.0) : 'n/a') rescue 'n/a'
356
354
  __log_response(method, path, params, body, url, response, json, took, duration) unless ignore.include?(response.status.to_i)
357
355
  __trace(method, path, params, connection_headers(connection), body, url, response, nil, 'N/A', duration) if tracer
358
356
  log_warn(response.headers['warning']) if response.headers&.[]('warning')
@@ -374,17 +372,21 @@ module Elastic
374
372
  private
375
373
 
376
374
  USER_AGENT_STR = 'User-Agent'.freeze
377
- USER_AGENT_REGEX = /user\-?\_?agent/
375
+ USER_AGENT_REGEX = /user-?_?agent/
378
376
  ACCEPT_ENCODING = 'Accept-Encoding'.freeze
379
377
  CONTENT_ENCODING = 'Content-Encoding'.freeze
380
378
  CONTENT_TYPE_STR = 'Content-Type'.freeze
381
- CONTENT_TYPE_REGEX = /content\-?\_?type/
379
+ CONTENT_TYPE_REGEX = /content-?_?type/
382
380
  DEFAULT_CONTENT_TYPE = 'application/json'.freeze
383
381
  GZIP = 'gzip'.freeze
384
382
  GZIP_FIRST_TWO_BYTES = '1f8b'.freeze
385
383
  HEX_STRING_DIRECTIVE = 'H*'.freeze
386
384
  RUBY_ENCODING = '1.9'.respond_to?(:force_encoding)
387
385
 
386
+ def max_retries(opts)
387
+ opts[:retry_on_failure] == true ? DEFAULT_MAX_RETRIES : opts[:retry_on_failure]
388
+ end
389
+
388
390
  def compress_request(body, headers)
389
391
  if body
390
392
  headers ||= {}
@@ -411,7 +413,7 @@ module Elastic
411
413
 
412
414
  io = StringIO.new(body)
413
415
  gzip_reader = if RUBY_ENCODING
414
- Zlib::GzipReader.new(io, :encoding => 'ASCII-8BIT')
416
+ Zlib::GzipReader.new(io, encoding: 'ASCII-8BIT')
415
417
  else
416
418
  Zlib::GzipReader.new(io)
417
419
  end
@@ -429,7 +431,7 @@ module Elastic
429
431
  end
430
432
 
431
433
  def apply_headers(client, options)
432
- headers = options[:headers].clone || {}
434
+ headers = options[:headers] || {}
433
435
  headers[CONTENT_TYPE_STR] = find_value(headers, CONTENT_TYPE_REGEX) || DEFAULT_CONTENT_TYPE
434
436
  headers[USER_AGENT_STR] = find_value(headers, USER_AGENT_REGEX) || user_agent_header(client)
435
437
  client.headers[ACCEPT_ENCODING] = GZIP if use_compression?
@@ -444,7 +446,7 @@ module Elastic
444
446
  end
445
447
  end
446
448
 
447
- def user_agent_header(client)
449
+ def user_agent_header(_client)
448
450
  @user_agent ||= begin
449
451
  meta = ["RUBY_VERSION: #{RUBY_VERSION}"]
450
452
  if RbConfig::CONFIG && RbConfig::CONFIG['host_os']
@@ -455,7 +457,8 @@ module Elastic
455
457
  end
456
458
 
457
459
  def connection_headers(connection)
458
- if defined?(Elastic::Transport::Transport::HTTP::Manticore) && self.class == Elastic::Transport::Transport::HTTP::Manticore
460
+ if defined?(Elastic::Transport::Transport::HTTP::Manticore) &&
461
+ instance_of?(Elastic::Transport::Transport::HTTP::Manticore)
459
462
  @request_options[:headers]
460
463
  else
461
464
  connection.connection.headers