elasticsearch-transport 7.5.0 → 7.13.3

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.
Files changed (41) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +28 -11
  3. data/README.md +158 -58
  4. data/Rakefile +16 -3
  5. data/elasticsearch-transport.gemspec +57 -63
  6. data/lib/elasticsearch/transport/client.rb +150 -56
  7. data/lib/elasticsearch/transport/meta_header.rb +135 -0
  8. data/lib/elasticsearch/transport/redacted.rb +16 -3
  9. data/lib/elasticsearch/transport/transport/base.rb +32 -12
  10. data/lib/elasticsearch/transport/transport/connections/collection.rb +18 -8
  11. data/lib/elasticsearch/transport/transport/connections/connection.rb +23 -8
  12. data/lib/elasticsearch/transport/transport/connections/selector.rb +16 -3
  13. data/lib/elasticsearch/transport/transport/errors.rb +16 -3
  14. data/lib/elasticsearch/transport/transport/http/curb.rb +16 -3
  15. data/lib/elasticsearch/transport/transport/http/faraday.rb +27 -6
  16. data/lib/elasticsearch/transport/transport/http/manticore.rb +16 -3
  17. data/lib/elasticsearch/transport/transport/loggable.rb +16 -3
  18. data/lib/elasticsearch/transport/transport/response.rb +16 -4
  19. data/lib/elasticsearch/transport/transport/serializer/multi_json.rb +16 -3
  20. data/lib/elasticsearch/transport/transport/sniffer.rb +35 -15
  21. data/lib/elasticsearch/transport/version.rb +17 -4
  22. data/lib/elasticsearch/transport.rb +16 -3
  23. data/lib/elasticsearch-transport.rb +16 -3
  24. data/spec/elasticsearch/connections/collection_spec.rb +28 -3
  25. data/spec/elasticsearch/connections/selector_spec.rb +16 -3
  26. data/spec/elasticsearch/transport/base_spec.rb +60 -38
  27. data/spec/elasticsearch/transport/client_spec.rb +628 -132
  28. data/spec/elasticsearch/transport/meta_header_spec.rb +265 -0
  29. data/spec/elasticsearch/transport/sniffer_spec.rb +16 -16
  30. data/spec/spec_helper.rb +19 -1
  31. data/test/integration/transport_test.rb +30 -4
  32. data/test/profile/client_benchmark_test.rb +16 -3
  33. data/test/test_helper.rb +16 -3
  34. data/test/unit/connection_test.rb +23 -5
  35. data/test/unit/response_test.rb +17 -4
  36. data/test/unit/serializer_test.rb +16 -3
  37. data/test/unit/transport_base_test.rb +17 -4
  38. data/test/unit/transport_curb_test.rb +16 -3
  39. data/test/unit/transport_faraday_test.rb +18 -5
  40. data/test/unit/transport_manticore_test.rb +29 -16
  41. metadata +70 -69
@@ -1,6 +1,19 @@
1
- # Licensed to Elasticsearch B.V under one or more agreements.
2
- # Elasticsearch B.V licenses this file to you under the Apache 2.0 License.
3
- # See the LICENSE file in the project root for more information
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.
4
17
 
5
18
  module Elasticsearch
6
19
  module Transport
@@ -1,6 +1,19 @@
1
- # Licensed to Elasticsearch B.V under one or more agreements.
2
- # Elasticsearch B.V licenses this file to you under the Apache 2.0 License.
3
- # See the LICENSE file in the project root for more information
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.
4
17
 
5
18
  module Elasticsearch
6
19
  module Transport
@@ -1,6 +1,19 @@
1
- # Licensed to Elasticsearch B.V under one or more agreements.
2
- # Elasticsearch B.V licenses this file to you under the Apache 2.0 License.
3
- # See the LICENSE file in the project root for more information
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.
4
17
 
5
18
  module Elasticsearch
6
19
  module Transport
@@ -20,9 +33,17 @@ module Elasticsearch
20
33
  # @return [Response]
21
34
  # @see Transport::Base#perform_request
22
35
  #
23
- def perform_request(method, path, params={}, body=nil, headers=nil, opts={})
36
+ def perform_request(method, path, params = {}, body = nil, headers = nil, opts = {})
24
37
  super do |connection, url|
25
- headers = headers || connection.connection.headers
38
+ headers = if connection.connection.headers
39
+ if !headers.nil?
40
+ connection.connection.headers.merge(headers)
41
+ else
42
+ connection.connection.headers
43
+ end
44
+ else
45
+ headers
46
+ end
26
47
 
27
48
  response = connection.connection.run_request(method.downcase.to_sym,
28
49
  url,
@@ -48,7 +69,7 @@ module Elasticsearch
48
69
  # @return [Array]
49
70
  #
50
71
  def host_unreachable_exceptions
51
- [::Faraday::Error::ConnectionFailed, ::Faraday::Error::TimeoutError]
72
+ [::Faraday::ConnectionFailed, ::Faraday::TimeoutError]
52
73
  end
53
74
 
54
75
  private
@@ -1,6 +1,19 @@
1
- # Licensed to Elasticsearch B.V under one or more agreements.
2
- # Elasticsearch B.V licenses this file to you under the Apache 2.0 License.
3
- # See the LICENSE file in the project root for more information
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.
4
17
 
5
18
  require 'manticore'
6
19
 
@@ -1,6 +1,19 @@
1
- # Licensed to Elasticsearch B.V under one or more agreements.
2
- # Elasticsearch B.V licenses this file to you under the Apache 2.0 License.
3
- # See the LICENSE file in the project root for more information
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.
4
17
 
5
18
  module Elasticsearch
6
19
 
@@ -1,11 +1,23 @@
1
- # Licensed to Elasticsearch B.V under one or more agreements.
2
- # Elasticsearch B.V licenses this file to you under the Apache 2.0 License.
3
- # See the LICENSE file in the project root for more information
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.
4
17
 
5
18
  module Elasticsearch
6
19
  module Transport
7
20
  module Transport
8
-
9
21
  # Wraps the response from Elasticsearch.
10
22
  #
11
23
  class Response
@@ -1,6 +1,19 @@
1
- # Licensed to Elasticsearch B.V under one or more agreements.
2
- # Elasticsearch B.V licenses this file to you under the Apache 2.0 License.
3
- # See the LICENSE file in the project root for more information
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.
4
17
 
5
18
  module Elasticsearch
6
19
  module Transport
@@ -1,6 +1,19 @@
1
- # Licensed to Elasticsearch B.V under one or more agreements.
2
- # Elasticsearch B.V licenses this file to you under the Apache 2.0 License.
3
- # See the LICENSE file in the project root for more information
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.
4
17
 
5
18
  module Elasticsearch
6
19
  module Transport
@@ -32,21 +45,21 @@ module Elasticsearch
32
45
  #
33
46
  def hosts
34
47
  Timeout::timeout(timeout, SnifferTimeoutError) do
35
- nodes = transport.perform_request('GET', '_nodes/http', {}, nil, nil,
36
- reload_on_failure: false).body
48
+ nodes = perform_sniff_request.body
37
49
 
38
50
  hosts = nodes['nodes'].map do |id, info|
39
- if info[PROTOCOL]
40
- host, port = parse_publish_address(info[PROTOCOL]['publish_address'])
51
+ next unless info[PROTOCOL]
52
+ host, port = parse_publish_address(info[PROTOCOL]['publish_address'])
41
53
 
42
- { :id => id,
43
- :name => info['name'],
44
- :version => info['version'],
45
- :host => host,
46
- :port => port,
47
- :roles => info['roles'],
48
- :attributes => info['attributes'] }
49
- end
54
+ {
55
+ id: id,
56
+ name: info['name'],
57
+ version: info['version'],
58
+ host: host,
59
+ port: port,
60
+ roles: info['roles'],
61
+ attributes: info['attributes']
62
+ }
50
63
  end.compact
51
64
 
52
65
  hosts.shuffle! if transport.options[:randomize_hosts]
@@ -56,6 +69,13 @@ module Elasticsearch
56
69
 
57
70
  private
58
71
 
72
+ def perform_sniff_request
73
+ transport.perform_request(
74
+ 'GET', '_nodes/http', {}, nil, nil,
75
+ reload_on_failure: false
76
+ )
77
+ end
78
+
59
79
  def parse_publish_address(publish_address)
60
80
  # publish_address is in the format hostname/ip:port
61
81
  if publish_address =~ /\//
@@ -1,9 +1,22 @@
1
- # Licensed to Elasticsearch B.V under one or more agreements.
2
- # Elasticsearch B.V licenses this file to you under the Apache 2.0 License.
3
- # See the LICENSE file in the project root for more information
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.
4
17
 
5
18
  module Elasticsearch
6
19
  module Transport
7
- VERSION = "7.5.0"
20
+ VERSION = '7.13.3'.freeze
8
21
  end
9
22
  end
@@ -1,6 +1,19 @@
1
- # Licensed to Elasticsearch B.V under one or more agreements.
2
- # Elasticsearch B.V licenses this file to you under the Apache 2.0 License.
3
- # See the LICENSE file in the project root for more information
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.
4
17
 
5
18
  require "uri"
6
19
  require "time"
@@ -1,5 +1,18 @@
1
- # Licensed to Elasticsearch B.V under one or more agreements.
2
- # Elasticsearch B.V licenses this file to you under the Apache 2.0 License.
3
- # See the LICENSE file in the project root for more information
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.
4
17
 
5
18
  require 'elasticsearch/transport'
@@ -1,6 +1,19 @@
1
- # Licensed to Elasticsearch B.V under one or more agreements.
2
- # Elasticsearch B.V licenses this file to you under the Apache 2.0 License.
3
- # See the LICENSE file in the project root for more information
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.
4
17
 
5
18
  require 'spec_helper'
6
19
 
@@ -236,6 +249,18 @@ describe Elasticsearch::Transport::Transport::Connections::Collection do
236
249
  collection.get_connection.host[:host]
237
250
  end).to eq((0..9).to_a)
238
251
  end
252
+
253
+ it 'always returns a connection' do
254
+ threads = 20.times.map do
255
+ Thread.new do
256
+ 20.times.map do
257
+ collection.get_connection.dead!
258
+ end
259
+ end
260
+ end
261
+
262
+ expect(threads.flat_map(&:value).size).to eq(400)
263
+ end
239
264
  end
240
265
  end
241
266
  end
@@ -1,6 +1,19 @@
1
- # Licensed to Elasticsearch B.V under one or more agreements.
2
- # Elasticsearch B.V licenses this file to you under the Apache 2.0 License.
3
- # See the LICENSE file in the project root for more information
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.
4
17
 
5
18
  require 'spec_helper'
6
19
 
@@ -1,6 +1,19 @@
1
- # Licensed to Elasticsearch B.V under one or more agreements.
2
- # Elasticsearch B.V licenses this file to you under the Apache 2.0 License.
3
- # See the LICENSE file in the project root for more information
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.
4
17
 
5
18
  require 'spec_helper'
6
19
 
@@ -33,10 +46,12 @@ describe Elasticsearch::Transport::Transport::Base do
33
46
 
34
47
  context 'when the user and password are provided as separate arguments' do
35
48
  let(:arguments) do
36
- { hosts: 'fake',
49
+ {
50
+ hosts: 'fake',
37
51
  logger: logger,
38
52
  password: 'secret_password',
39
- user: 'test' }
53
+ user: 'test'
54
+ }
40
55
  end
41
56
 
42
57
  it_behaves_like 'a redacted string'
@@ -44,8 +59,10 @@ describe Elasticsearch::Transport::Transport::Base do
44
59
 
45
60
  context 'when the user and password are provided in the string URI' do
46
61
  let(:arguments) do
47
- { hosts: 'https://test:secret_password@fake_local_elasticsearch',
48
- logger: logger }
62
+ {
63
+ hosts: 'https://test:secret_password@fake_local_elasticsearch',
64
+ logger: logger
65
+ }
49
66
  end
50
67
 
51
68
  it_behaves_like 'a redacted string'
@@ -53,8 +70,10 @@ describe Elasticsearch::Transport::Transport::Base do
53
70
 
54
71
  context 'when the user and password are provided in the URI object' do
55
72
  let(:arguments) do
56
- { hosts: URI.parse('https://test:secret_password@fake_local_elasticsearch'),
57
- logger: logger }
73
+ {
74
+ hosts: URI.parse('https://test:secret_password@fake_local_elasticsearch'),
75
+ logger: logger
76
+ }
58
77
  end
59
78
 
60
79
  it_behaves_like 'a redacted string'
@@ -62,41 +81,36 @@ describe Elasticsearch::Transport::Transport::Base do
62
81
  end
63
82
 
64
83
  context 'when reload_on_failure is true and and hosts are unreachable' do
65
-
66
84
  let(:client) do
67
85
  Elasticsearch::Transport::Client.new(arguments)
68
86
  end
69
87
 
70
88
  let(:arguments) do
71
89
  {
72
- hosts: ['http://unavailable:9200', 'http://unavailable:9201'],
73
- reload_on_failure: true,
74
- sniffer_timeout: 5
90
+ hosts: ['http://unavailable:9200', 'http://unavailable:9201'],
91
+ reload_on_failure: true,
92
+ sniffer_timeout: 5
75
93
  }
76
94
  end
77
95
 
78
96
  it 'raises an exception' do
79
- expect {
80
- client.info
81
- }.to raise_exception(Faraday::ConnectionFailed)
97
+ expect { client.info }.to raise_exception(Faraday::ConnectionFailed)
82
98
  end
83
99
  end
84
100
 
85
101
  context 'when the client has `retry_on_failure` set to an integer' do
86
-
87
102
  let(:client) do
88
103
  Elasticsearch::Transport::Client.new(arguments)
89
104
  end
90
105
 
91
106
  let(:arguments) do
92
107
  {
93
- hosts: ['http://unavailable:9200', 'http://unavailable:9201'],
94
- retry_on_failure: 2
108
+ hosts: ['http://unavailable:9200', 'http://unavailable:9201'],
109
+ retry_on_failure: 2
95
110
  }
96
111
  end
97
112
 
98
113
  context 'when `perform_request` is called without a `retry_on_failure` option value' do
99
-
100
114
  before do
101
115
  expect(client.transport).to receive(:get_connection).exactly(3).times.and_call_original
102
116
  end
@@ -108,22 +122,39 @@ describe Elasticsearch::Transport::Transport::Base do
108
122
  end
109
123
  end
110
124
 
111
- context 'when `perform_request` is called with a `retry_on_failure` option value' do
125
+ context 'when `perform_request` is called with a `retry_on_status` option value' do
126
+ before do
127
+ expect(client.transport).to receive(:__raise_transport_error).exactly(6).times.and_call_original
128
+ end
112
129
 
130
+ let(:arguments) do
131
+ {
132
+ hosts: ['http://localhost:9250'],
133
+ retry_on_status: ['404']
134
+ }
135
+ end
136
+
137
+ it 'retries on 404 status the specified number of max_retries' do
138
+ expect do
139
+ client.transport.perform_request('GET', 'myindex/mydoc/1?routing=FOOBARBAZ', {}, nil, nil, retry_on_failure: 5)
140
+ end.to raise_exception(Elasticsearch::Transport::Transport::Errors::NotFound)
141
+ end
142
+ end
143
+
144
+ context 'when `perform_request` is called with a `retry_on_failure` option value' do
113
145
  before do
114
146
  expect(client.transport).to receive(:get_connection).exactly(6).times.and_call_original
115
147
  end
116
148
 
117
149
  it 'uses the option `retry_on_failure` value' do
118
- expect {
150
+ expect do
119
151
  client.transport.perform_request('GET', '/info', {}, nil, nil, retry_on_failure: 5)
120
- }.to raise_exception(Faraday::ConnectionFailed)
152
+ end.to raise_exception(Faraday::ConnectionFailed)
121
153
  end
122
154
  end
123
155
  end
124
156
 
125
157
  context 'when the client has `retry_on_failure` set to true' do
126
-
127
158
  let(:client) do
128
159
  Elasticsearch::Transport::Client.new(arguments)
129
160
  end
@@ -136,7 +167,6 @@ describe Elasticsearch::Transport::Transport::Base do
136
167
  end
137
168
 
138
169
  context 'when `perform_request` is called without a `retry_on_failure` option value' do
139
-
140
170
  before do
141
171
  expect(client.transport).to receive(:get_connection).exactly(4).times.and_call_original
142
172
  end
@@ -149,7 +179,6 @@ describe Elasticsearch::Transport::Transport::Base do
149
179
  end
150
180
 
151
181
  context 'when `perform_request` is called with a `retry_on_failure` option value' do
152
-
153
182
  before do
154
183
  expect(client.transport).to receive(:get_connection).exactly(6).times.and_call_original
155
184
  end
@@ -163,7 +192,6 @@ describe Elasticsearch::Transport::Transport::Base do
163
192
  end
164
193
 
165
194
  context 'when the client has `retry_on_failure` set to false' do
166
-
167
195
  let(:client) do
168
196
  Elasticsearch::Transport::Client.new(arguments)
169
197
  end
@@ -176,7 +204,6 @@ describe Elasticsearch::Transport::Transport::Base do
176
204
  end
177
205
 
178
206
  context 'when `perform_request` is called without a `retry_on_failure` option value' do
179
-
180
207
  before do
181
208
  expect(client.transport).to receive(:get_connection).once.and_call_original
182
209
  end
@@ -203,40 +230,35 @@ describe Elasticsearch::Transport::Transport::Base do
203
230
  end
204
231
 
205
232
  context 'when the client has no `retry_on_failure` set' do
206
-
207
233
  let(:client) do
208
234
  Elasticsearch::Transport::Client.new(arguments)
209
235
  end
210
236
 
211
237
  let(:arguments) do
212
- {
213
- hosts: ['http://unavailable:9200', 'http://unavailable:9201'],
214
- }
238
+ { hosts: ['http://unavailable:9200', 'http://unavailable:9201'] }
215
239
  end
216
240
 
217
241
  context 'when `perform_request` is called without a `retry_on_failure` option value' do
218
-
219
242
  before do
220
243
  expect(client.transport).to receive(:get_connection).exactly(1).times.and_call_original
221
244
  end
222
245
 
223
246
  it 'does not retry' do
224
- expect {
247
+ expect do
225
248
  client.transport.perform_request('GET', '/info')
226
- }.to raise_exception(Faraday::ConnectionFailed)
249
+ end.to raise_exception(Faraday::ConnectionFailed)
227
250
  end
228
251
  end
229
252
 
230
253
  context 'when `perform_request` is called with a `retry_on_failure` option value' do
231
-
232
254
  before do
233
255
  expect(client.transport).to receive(:get_connection).exactly(6).times.and_call_original
234
256
  end
235
257
 
236
258
  it 'uses the option `retry_on_failure` value' do
237
- expect {
259
+ expect do
238
260
  client.transport.perform_request('GET', '/info', {}, nil, nil, retry_on_failure: 5)
239
- }.to raise_exception(Faraday::ConnectionFailed)
261
+ end.to raise_exception(Faraday::ConnectionFailed)
240
262
  end
241
263
  end
242
264
  end