Skip to content

Commit 499c9a3

Browse files
committed
[CLIENT] When version is pre/alpha, use X.X.Xp for meta header version
1 parent 9f388e8 commit 499c9a3

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
@@ -203,12 +203,20 @@ def meta_header_service_version
203203
if defined?(Elastic::META_HEADER_SERVICE_VERSION)
204204
Elastic::META_HEADER_SERVICE_VERSION
205205
elsif defined?(Elasticsearch::VERSION)
206-
['es', Elasticsearch::VERSION]
206+
[:es, client_meta_version(Elasticsearch::VERSION)]
207207
else
208-
['es', Elasticsearch::Transport::VERSION]
208+
[:es, client_meta_version(Elasticsearch::Transport::VERSION)]
209209
end
210210
end
211211

212+
def client_meta_version(version)
213+
regexp = /^([0-9]+\.[0-9]+\.[0-9]+)(\.?[a-z0-9.-]+)?$/
214+
match = version.match(regexp)
215+
return "#{match[1]}p" if (match[2])
216+
217+
version
218+
end
219+
212220
def meta_header_engine
213221
case RUBY_ENGINE
214222
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
@@ -15,6 +15,15 @@ class Client
1515
end
1616
end
1717
module Elastic
18+
# If the version is X.X.X.pre/alpha/beta, use X.X.Xp for the meta-header:
19+
def self.client_meta_version
20+
regexp = /^([0-9]+\.[0-9]+\.[0-9]+)\.?([a-z0-9.-]+)?$/
21+
match = Elasticsearch::VERSION.match(regexp)
22+
return "#{match[1]}p" if match[2]
23+
24+
Elasticsearch::VERSION
25+
end
26+
1827
# Constant for elasticsearch-transport meta-header
19-
META_HEADER_SERVICE_VERSION = [:es, Elasticsearch::VERSION]
28+
META_HEADER_SERVICE_VERSION = [:es, client_meta_version].freeze
2029
end

0 commit comments

Comments
 (0)