elasticsearch-transport 7.4.0 → 7.17.10
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 +4 -4
- data/Gemfile +30 -13
- data/Gemfile-faraday1.gemfile +47 -0
- data/README.md +159 -64
- data/Rakefile +63 -13
- data/elasticsearch-transport.gemspec +55 -63
- data/lib/elasticsearch/transport/client.rb +184 -59
- data/lib/elasticsearch/transport/meta_header.rb +135 -0
- data/lib/elasticsearch/transport/redacted.rb +16 -3
- data/lib/elasticsearch/transport/transport/base.rb +69 -30
- data/lib/elasticsearch/transport/transport/connections/collection.rb +18 -8
- data/lib/elasticsearch/transport/transport/connections/connection.rb +25 -9
- data/lib/elasticsearch/transport/transport/connections/selector.rb +16 -3
- data/lib/elasticsearch/transport/transport/errors.rb +17 -3
- data/lib/elasticsearch/transport/transport/http/curb.rb +60 -35
- data/lib/elasticsearch/transport/transport/http/faraday.rb +32 -9
- data/lib/elasticsearch/transport/transport/http/manticore.rb +57 -32
- data/lib/elasticsearch/transport/transport/loggable.rb +16 -3
- data/lib/elasticsearch/transport/transport/response.rb +17 -5
- data/lib/elasticsearch/transport/transport/serializer/multi_json.rb +16 -3
- data/lib/elasticsearch/transport/transport/sniffer.rb +35 -15
- data/lib/elasticsearch/transport/version.rb +17 -4
- data/lib/elasticsearch/transport.rb +35 -33
- data/lib/elasticsearch-transport.rb +16 -3
- data/spec/elasticsearch/connections/collection_spec.rb +28 -3
- data/spec/elasticsearch/connections/selector_spec.rb +16 -3
- data/spec/elasticsearch/transport/base_spec.rb +107 -49
- data/spec/elasticsearch/transport/client_spec.rb +734 -164
- data/spec/elasticsearch/transport/http/curb_spec.rb +126 -0
- data/spec/elasticsearch/transport/http/faraday_spec.rb +141 -0
- data/spec/elasticsearch/transport/http/manticore_spec.rb +161 -0
- data/spec/elasticsearch/transport/meta_header_spec.rb +301 -0
- data/spec/elasticsearch/transport/sniffer_spec.rb +16 -16
- data/spec/spec_helper.rb +32 -6
- data/test/integration/jruby_test.rb +43 -0
- data/test/integration/transport_test.rb +109 -46
- data/test/profile/client_benchmark_test.rb +16 -3
- data/test/test_helper.rb +26 -25
- data/test/unit/adapters_test.rb +88 -0
- data/test/unit/connection_test.rb +23 -5
- data/test/unit/response_test.rb +18 -5
- data/test/unit/serializer_test.rb +16 -3
- data/test/unit/transport_base_test.rb +33 -11
- data/test/unit/transport_curb_test.rb +16 -4
- data/test/unit/transport_faraday_test.rb +18 -5
- data/test/unit/transport_manticore_test.rb +258 -158
- metadata +64 -76
@@ -1,15 +1,25 @@
|
|
1
|
-
# Licensed to Elasticsearch B.V under one or more
|
2
|
-
#
|
3
|
-
#
|
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
|
|
7
20
|
describe Elasticsearch::Transport::Transport::Base do
|
8
|
-
|
9
21
|
context 'when a host is printed in a logged message' do
|
10
|
-
|
11
22
|
shared_examples_for 'a redacted string' do
|
12
|
-
|
13
23
|
let(:client) do
|
14
24
|
Elasticsearch::Transport::Client.new(arguments)
|
15
25
|
end
|
@@ -20,88 +30,127 @@ describe Elasticsearch::Transport::Transport::Base do
|
|
20
30
|
|
21
31
|
it 'does not include the password in the logged string' do
|
22
32
|
expect(logger).not_to receive(:error).with(/secret_password/)
|
33
|
+
|
23
34
|
expect {
|
24
|
-
client.
|
35
|
+
client.perform_request('GET', '_cluster/stats')
|
25
36
|
}.to raise_exception(Faraday::ConnectionFailed)
|
26
37
|
end
|
27
38
|
|
28
39
|
it 'replaces the password with the string \'REDACTED\'' do
|
29
40
|
expect(logger).to receive(:error).with(/REDACTED/)
|
30
41
|
expect {
|
31
|
-
client.
|
42
|
+
client.perform_request('GET', '_cluster/stats')
|
32
43
|
}.to raise_exception(Faraday::ConnectionFailed)
|
33
44
|
end
|
34
45
|
end
|
35
46
|
|
36
47
|
context 'when the user and password are provided as separate arguments' do
|
37
|
-
|
38
48
|
let(:arguments) do
|
39
|
-
{
|
49
|
+
{
|
50
|
+
hosts: 'fake',
|
40
51
|
logger: logger,
|
41
52
|
password: 'secret_password',
|
42
|
-
user: 'test'
|
53
|
+
user: 'test'
|
54
|
+
}
|
43
55
|
end
|
44
56
|
|
45
57
|
it_behaves_like 'a redacted string'
|
46
58
|
end
|
47
59
|
|
48
60
|
context 'when the user and password are provided in the string URI' do
|
49
|
-
|
50
61
|
let(:arguments) do
|
51
|
-
{
|
52
|
-
|
62
|
+
{
|
63
|
+
hosts: 'https://test:secret_password@fake_local_elasticsearch',
|
64
|
+
logger: logger
|
65
|
+
}
|
53
66
|
end
|
54
67
|
|
55
|
-
|
68
|
+
if jruby?
|
69
|
+
let(:client) { Elasticsearch::Transport::Client.new(arguments) }
|
70
|
+
let(:logger) { double('logger', fatal?: true, fatal: '') }
|
71
|
+
|
72
|
+
it 'does not include the password in the logged string' do
|
73
|
+
expect(logger).not_to receive(:fatal).with(/secret_password/)
|
74
|
+
|
75
|
+
expect {
|
76
|
+
client.perform_request('GET', '_cluster/stats')
|
77
|
+
}.to raise_exception(Faraday::SSLError)
|
78
|
+
end
|
79
|
+
|
80
|
+
it 'replaces the password with the string \'REDACTED\'' do
|
81
|
+
expect(logger).to receive(:fatal).with(/REDACTED/)
|
82
|
+
expect {
|
83
|
+
client.perform_request('GET', '_cluster/stats')
|
84
|
+
}.to raise_exception(Faraday::SSLError)
|
85
|
+
end
|
86
|
+
else
|
87
|
+
it_behaves_like 'a redacted string'
|
88
|
+
end
|
56
89
|
end
|
57
90
|
|
58
91
|
context 'when the user and password are provided in the URI object' do
|
59
|
-
|
60
92
|
let(:arguments) do
|
61
|
-
{
|
62
|
-
|
93
|
+
{
|
94
|
+
hosts: URI.parse('https://test:secret_password@fake_local_elasticsearch'),
|
95
|
+
logger: logger
|
96
|
+
}
|
97
|
+
end
|
98
|
+
if jruby?
|
99
|
+
let(:client) { Elasticsearch::Transport::Client.new(arguments) }
|
100
|
+
let(:logger) { double('logger', fatal?: true, fatal: '') }
|
101
|
+
|
102
|
+
it 'does not include the password in the logged string' do
|
103
|
+
expect(logger).not_to receive(:fatal).with(/secret_password/)
|
104
|
+
|
105
|
+
expect {
|
106
|
+
client.perform_request('GET', '_cluster/stats')
|
107
|
+
}.to raise_exception(Faraday::SSLError)
|
108
|
+
end
|
109
|
+
|
110
|
+
it 'replaces the password with the string \'REDACTED\'' do
|
111
|
+
expect(logger).to receive(:fatal).with(/REDACTED/)
|
112
|
+
expect {
|
113
|
+
client.perform_request('GET', '_cluster/stats')
|
114
|
+
}.to raise_exception(Faraday::SSLError)
|
115
|
+
end
|
116
|
+
else
|
117
|
+
it_behaves_like 'a redacted string'
|
63
118
|
end
|
64
|
-
|
65
|
-
it_behaves_like 'a redacted string'
|
66
119
|
end
|
67
120
|
end
|
68
121
|
|
69
122
|
context 'when reload_on_failure is true and and hosts are unreachable' do
|
70
|
-
|
71
123
|
let(:client) do
|
72
124
|
Elasticsearch::Transport::Client.new(arguments)
|
73
125
|
end
|
74
126
|
|
75
127
|
let(:arguments) do
|
76
128
|
{
|
77
|
-
|
78
|
-
|
79
|
-
|
129
|
+
hosts: ['http://unavailable:9200', 'http://unavailable:9201'],
|
130
|
+
reload_on_failure: true,
|
131
|
+
sniffer_timeout: 5
|
80
132
|
}
|
81
133
|
end
|
82
134
|
|
83
135
|
it 'raises an exception' do
|
84
|
-
expect {
|
85
|
-
client.info
|
86
|
-
}.to raise_exception(Faraday::ConnectionFailed)
|
136
|
+
expect { client.perform_request('GET', '/') }.to raise_exception(Faraday::ConnectionFailed)
|
87
137
|
end
|
88
138
|
end
|
89
139
|
|
90
140
|
context 'when the client has `retry_on_failure` set to an integer' do
|
91
|
-
|
92
141
|
let(:client) do
|
93
142
|
Elasticsearch::Transport::Client.new(arguments)
|
94
143
|
end
|
95
144
|
|
96
145
|
let(:arguments) do
|
97
146
|
{
|
98
|
-
|
99
|
-
|
147
|
+
hosts: ['http://unavailable:9200', 'http://unavailable:9201'],
|
148
|
+
retry_on_failure: 2,
|
149
|
+
adapter: :net_http
|
100
150
|
}
|
101
151
|
end
|
102
152
|
|
103
153
|
context 'when `perform_request` is called without a `retry_on_failure` option value' do
|
104
|
-
|
105
154
|
before do
|
106
155
|
expect(client.transport).to receive(:get_connection).exactly(3).times.and_call_original
|
107
156
|
end
|
@@ -113,22 +162,40 @@ describe Elasticsearch::Transport::Transport::Base do
|
|
113
162
|
end
|
114
163
|
end
|
115
164
|
|
116
|
-
context 'when `perform_request` is called with a `
|
165
|
+
context 'when `perform_request` is called with a `retry_on_status` option value' do
|
166
|
+
before do
|
167
|
+
expect(client.transport).to receive(:__raise_transport_error).exactly(6).times.and_call_original
|
168
|
+
end
|
169
|
+
|
170
|
+
let(:arguments) do
|
171
|
+
{
|
172
|
+
hosts: ELASTICSEARCH_HOSTS,
|
173
|
+
retry_on_status: ['404'],
|
174
|
+
adapter: :net_http
|
175
|
+
}
|
176
|
+
end
|
177
|
+
|
178
|
+
it 'retries on 404 status the specified number of max_retries' do
|
179
|
+
expect do
|
180
|
+
client.transport.perform_request('GET', 'myindex/mydoc/1?routing=FOOBARBAZ', {}, nil, nil, retry_on_failure: 5)
|
181
|
+
end.to raise_exception(Elasticsearch::Transport::Transport::Errors::NotFound)
|
182
|
+
end
|
183
|
+
end
|
117
184
|
|
185
|
+
context 'when `perform_request` is called with a `retry_on_failure` option value' do
|
118
186
|
before do
|
119
187
|
expect(client.transport).to receive(:get_connection).exactly(6).times.and_call_original
|
120
188
|
end
|
121
189
|
|
122
190
|
it 'uses the option `retry_on_failure` value' do
|
123
|
-
expect
|
191
|
+
expect do
|
124
192
|
client.transport.perform_request('GET', '/info', {}, nil, nil, retry_on_failure: 5)
|
125
|
-
|
193
|
+
end.to raise_exception(Faraday::ConnectionFailed)
|
126
194
|
end
|
127
195
|
end
|
128
196
|
end
|
129
197
|
|
130
198
|
context 'when the client has `retry_on_failure` set to true' do
|
131
|
-
|
132
199
|
let(:client) do
|
133
200
|
Elasticsearch::Transport::Client.new(arguments)
|
134
201
|
end
|
@@ -141,7 +208,6 @@ describe Elasticsearch::Transport::Transport::Base do
|
|
141
208
|
end
|
142
209
|
|
143
210
|
context 'when `perform_request` is called without a `retry_on_failure` option value' do
|
144
|
-
|
145
211
|
before do
|
146
212
|
expect(client.transport).to receive(:get_connection).exactly(4).times.and_call_original
|
147
213
|
end
|
@@ -154,7 +220,6 @@ describe Elasticsearch::Transport::Transport::Base do
|
|
154
220
|
end
|
155
221
|
|
156
222
|
context 'when `perform_request` is called with a `retry_on_failure` option value' do
|
157
|
-
|
158
223
|
before do
|
159
224
|
expect(client.transport).to receive(:get_connection).exactly(6).times.and_call_original
|
160
225
|
end
|
@@ -168,7 +233,6 @@ describe Elasticsearch::Transport::Transport::Base do
|
|
168
233
|
end
|
169
234
|
|
170
235
|
context 'when the client has `retry_on_failure` set to false' do
|
171
|
-
|
172
236
|
let(:client) do
|
173
237
|
Elasticsearch::Transport::Client.new(arguments)
|
174
238
|
end
|
@@ -181,7 +245,6 @@ describe Elasticsearch::Transport::Transport::Base do
|
|
181
245
|
end
|
182
246
|
|
183
247
|
context 'when `perform_request` is called without a `retry_on_failure` option value' do
|
184
|
-
|
185
248
|
before do
|
186
249
|
expect(client.transport).to receive(:get_connection).once.and_call_original
|
187
250
|
end
|
@@ -208,40 +271,35 @@ describe Elasticsearch::Transport::Transport::Base do
|
|
208
271
|
end
|
209
272
|
|
210
273
|
context 'when the client has no `retry_on_failure` set' do
|
211
|
-
|
212
274
|
let(:client) do
|
213
275
|
Elasticsearch::Transport::Client.new(arguments)
|
214
276
|
end
|
215
277
|
|
216
278
|
let(:arguments) do
|
217
|
-
{
|
218
|
-
hosts: ['http://unavailable:9200', 'http://unavailable:9201'],
|
219
|
-
}
|
279
|
+
{ hosts: ['http://unavailable:9200', 'http://unavailable:9201'] }
|
220
280
|
end
|
221
281
|
|
222
282
|
context 'when `perform_request` is called without a `retry_on_failure` option value' do
|
223
|
-
|
224
283
|
before do
|
225
284
|
expect(client.transport).to receive(:get_connection).exactly(1).times.and_call_original
|
226
285
|
end
|
227
286
|
|
228
287
|
it 'does not retry' do
|
229
|
-
expect
|
288
|
+
expect do
|
230
289
|
client.transport.perform_request('GET', '/info')
|
231
|
-
|
290
|
+
end.to raise_exception(Faraday::ConnectionFailed)
|
232
291
|
end
|
233
292
|
end
|
234
293
|
|
235
294
|
context 'when `perform_request` is called with a `retry_on_failure` option value' do
|
236
|
-
|
237
295
|
before do
|
238
296
|
expect(client.transport).to receive(:get_connection).exactly(6).times.and_call_original
|
239
297
|
end
|
240
298
|
|
241
299
|
it 'uses the option `retry_on_failure` value' do
|
242
|
-
expect
|
300
|
+
expect do
|
243
301
|
client.transport.perform_request('GET', '/info', {}, nil, nil, retry_on_failure: 5)
|
244
|
-
|
302
|
+
end.to raise_exception(Faraday::ConnectionFailed)
|
245
303
|
end
|
246
304
|
end
|
247
305
|
end
|