Skip to content

Commit f347192

Browse files
committed
[CLIENT] When version is pre/alpha, use X.X.Xp for meta header version
1 parent c7ded88 commit f347192

File tree

3 files changed

+46
-18
lines changed

3 files changed

+46
-18
lines changed

elasticsearch-transport/lib/elasticsearch/transport/client.rb

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -226,12 +226,20 @@ def meta_header_service_version
226226
if defined?(Elastic::META_HEADER_SERVICE_VERSION)
227227
Elastic::META_HEADER_SERVICE_VERSION
228228
elsif defined?(Elasticsearch::VERSION)
229-
['es', Elasticsearch::VERSION]
229+
[:es, client_meta_version(Elasticsearch::VERSION)]
230230
else
231-
['es', Elasticsearch::Transport::VERSION]
231+
[:es, client_meta_version(Elasticsearch::Transport::VERSION)]
232232
end
233233
end
234234

235+
def client_meta_version(version)
236+
regexp = /^([0-9]+\.[0-9]+\.[0-9]+)(\.?[a-z0-9.-]+)?$/
237+
match = version.match(regexp)
238+
return "#{match[1]}p" if (match[2])
239+
240+
version
241+
end
242+
235243
def meta_header_engine
236244
case RUBY_ENGINE
237245
when 'ruby'

elasticsearch-transport/spec/elasticsearch/transport/meta_header_spec.rb

Lines changed: 26 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -20,17 +20,36 @@
2020
describe Elasticsearch::Transport::Client do
2121
context 'meta-header' do
2222
let(:subject) { client.transport.connections.first.connection.headers }
23+
let(:client) { described_class.new }
2324
let(:regexp) { /^[a-z]{1,}=[a-z0-9.\-]{1,}(?:,[a-z]{1,}=[a-z0-9._\-]+)*$/ }
2425
let(:adapter) { :net_http }
2526
let(:adapter_code) { "nh=#{defined?(Net::HTTP::VERSION) ? Net::HTTP::VERSION : Net::HTTP::HTTPVersion}" }
2627
let(:meta_header) do
2728
if jruby?
28-
"es=#{Elasticsearch::VERSION},rb=#{RUBY_VERSION},t=#{Elasticsearch::Transport::VERSION},jv=#{ENV_JAVA['java.version']},jr=#{JRUBY_VERSION},fd=#{Faraday::VERSION},#{adapter_code}"
29+
"es=#{meta_version},rb=#{RUBY_VERSION},t=#{Elasticsearch::Transport::VERSION},jv=#{ENV_JAVA['java.version']},jr=#{JRUBY_VERSION},fd=#{Faraday::VERSION},#{adapter_code}"
2930
else
30-
"es=#{Elasticsearch::VERSION},rb=#{RUBY_VERSION},t=#{Elasticsearch::Transport::VERSION},fd=#{Faraday::VERSION},#{adapter_code}"
31+
"es=#{meta_version},rb=#{RUBY_VERSION},t=#{Elasticsearch::Transport::VERSION},fd=#{Faraday::VERSION},#{adapter_code}"
3132
end
3233
end
3334

35+
context 'client_meta_version_' do
36+
let(:version) { ['7.1.0-alpha', '7.11.0.pre.1', '8.0.0-beta', '8.0.0.beta.2']}
37+
38+
it 'converts the version to X.X.Xp' do
39+
expect(client.send(:client_meta_version, '7.0.0-alpha')).to eq('7.0.0p')
40+
expect(client.send(:client_meta_version, '7.11.0.pre.1')).to eq('7.11.0p')
41+
expect(client.send(:client_meta_version, '8.1.0-beta')).to eq('8.1.0p')
42+
expect(client.send(:client_meta_version, '8.0.0.beta.2')).to eq('8.0.0p')
43+
expect(client.send(:client_meta_version, '12.16.4.pre')).to eq('12.16.4p')
44+
end
45+
end
46+
47+
# We are testing this method in the previous block, so now using it inside the test to make the
48+
# Elasticsearch version in the meta header string dynamic
49+
def meta_version
50+
client.send(:client_meta_version, Elasticsearch::VERSION)
51+
end
52+
3453
context 'single use of meta header' do
3554
let(:client) do
3655
described_class.new(adapter: adapter).tap do |klient|
@@ -78,9 +97,9 @@
7897
context 'adapters' do
7998
let(:meta_header) do
8099
if jruby?
81-
"es=#{Elasticsearch::VERSION},rb=#{RUBY_VERSION},t=#{Elasticsearch::Transport::VERSION},jv=#{ENV_JAVA['java.version']},jr=#{JRUBY_VERSION},fd=#{Faraday::VERSION}"
100+
"es=#{meta_version},rb=#{RUBY_VERSION},t=#{Elasticsearch::Transport::VERSION},jv=#{ENV_JAVA['java.version']},jr=#{JRUBY_VERSION},fd=#{Faraday::VERSION}"
82101
else
83-
"es=#{Elasticsearch::VERSION},rb=#{RUBY_VERSION},t=#{Elasticsearch::Transport::VERSION},fd=#{Faraday::VERSION}"
102+
"es=#{meta_version},rb=#{RUBY_VERSION},t=#{Elasticsearch::Transport::VERSION},fd=#{Faraday::VERSION}"
84103
end
85104
end
86105
let(:client) { described_class.new(adapter: adapter) }
@@ -167,9 +186,9 @@ def initialize(args); end
167186
let(:subject){ client.instance_variable_get("@arguments")[:transport_options][:headers] }
168187
let(:meta_header) do
169188
if jruby?
170-
"es=#{Elasticsearch::VERSION},rb=#{RUBY_VERSION},t=#{Elasticsearch::Transport::VERSION},jv=#{ENV_JAVA['java.version']},jr=#{JRUBY_VERSION}"
189+
"es=#{meta_version},rb=#{RUBY_VERSION},t=#{Elasticsearch::Transport::VERSION},jv=#{ENV_JAVA['java.version']},jr=#{JRUBY_VERSION}"
171190
else
172-
"es=#{Elasticsearch::VERSION},rb=#{RUBY_VERSION},t=#{Elasticsearch::Transport::VERSION}"
191+
"es=#{meta_version},rb=#{RUBY_VERSION},t=#{Elasticsearch::Transport::VERSION}"
173192
end
174193
end
175194

@@ -181,15 +200,7 @@ def initialize(args); end
181200

182201
context 'when using a different service version' do
183202
before do
184-
module Elastic
185-
META_HEADER_SERVICE_VERSION = [:ent, '8.0.0']
186-
end
187-
end
188-
189-
after do
190-
module Elastic
191-
META_HEADER_SERVICE_VERSION = [:es, Elasticsearch::VERSION]
192-
end
203+
stub_const("Elastic::META_HEADER_SERVICE_VERSION", [:ent, '8.0.0'])
193204
end
194205

195206
let(:client) { Elasticsearch::Client.new }

elasticsearch/lib/elasticsearch.rb

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,15 @@ class Client
2828
end
2929
end
3030
module Elastic
31+
# If the version is X.X.X.pre/alpha/beta, use X.X.Xp for the meta-header:
32+
def self.client_meta_version
33+
regexp = /^([0-9]+\.[0-9]+\.[0-9]+)\.?([a-z0-9.-]+)?$/
34+
match = Elasticsearch::VERSION.match(regexp)
35+
return "#{match[1]}p" if match[2]
36+
37+
Elasticsearch::VERSION
38+
end
39+
3140
# Constant for elasticsearch-transport meta-header
32-
META_HEADER_SERVICE_VERSION = [:es, Elasticsearch::VERSION]
41+
META_HEADER_SERVICE_VERSION = [:es, client_meta_version].freeze
3342
end

0 commit comments

Comments
 (0)