elasticsearch-transport 1.0.7 → 1.0.9

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ee365b72ccd59176d473e7cfd057d4f246eacd0f
4
- data.tar.gz: 2b9ab7f0a21f779cc24957f0b1aad4b0a9c449c1
3
+ metadata.gz: 85aa43e17d7dbb5e43514c2c6c8d61030db7bf0f
4
+ data.tar.gz: 7220157362dbd60f5f003fbe457cb97d5f03983f
5
5
  SHA512:
6
- metadata.gz: 23ea14e8d2901165ac026bf0dd4c9e17c1b8560629bc946418d05f24321f31410389edc185cf06701e94b7fc915ac2031d988d35be0ba1b449cf0ff483afa56c
7
- data.tar.gz: 7ea2f669de99b231e41e02db9b801bef7ec0a1753e796ad71da98095e5e56192cb3aa48d5600b050eb653bcf0c4e4badbd6f90853077641631db20ba942a504e
6
+ metadata.gz: e86b6d6fdd5d38114b5a8ff506c114a0270d6ee8bccade584badb9bb5aac51c59f181afa162cfb8cfb5da01b9967507a513dafa1a3e157eed20874253424fd4d
7
+ data.tar.gz: 44569f981a390c4ad0f1a4bb5a3cb766bd03f5fd114f384c4a705c5b59bf69d73759b0e75b445ecd5b4ca7e67a0e9239f4ae8faad76d4228ac281626657dff12
data/README.md CHANGED
@@ -27,10 +27,11 @@ Features overview:
27
27
  * Request retries and dead connections handling
28
28
  * Node reloading (based on cluster state) on errors or on demand
29
29
 
30
- For optimal performance, you should use a HTTP library which supports persistent ("keep-alive") connections,
31
- e.g. [Patron](https://github.com/toland/patron) or [Typhoeus](https://github.com/typhoeus/typhoeus).
32
- Just `require 'patron'` or `require 'typhoeus'; require 'typhoeus/adapters/faraday'` in your code,
33
- and it will be automatically used; other automatically used libraries are
30
+ For optimal performance, use a HTTP library which supports persistent ("keep-alive") connections,
31
+ such as [Typhoeus](https://github.com/typhoeus/typhoeus).
32
+ Just require the library (`require 'typhoeus'; require 'typhoeus/adapters/faraday'`) in your code,
33
+ and it will be automatically used; currently these libraries will be automatically detected and used:
34
+ [Patron](https://github.com/toland/patron),
34
35
  [HTTPClient](https://rubygems.org/gems/httpclient) and
35
36
  [Net::HTTP::Persistent](https://rubygems.org/gems/net-http-persistent).
36
37
 
@@ -170,7 +171,8 @@ on a different host:
170
171
 
171
172
  Elasticsearch::Client.new hosts: ['localhost:9200', 'localhost:9201'], retry_on_failure: true
172
173
 
173
- You can specify how many times should the client retry the request before it raises an exception:
174
+ You can specify how many times should the client retry the request before it raises an exception
175
+ (the default is 3 times):
174
176
 
175
177
  Elasticsearch::Client.new hosts: ['localhost:9200', 'localhost:9201'], retry_on_failure: 5
176
178
 
@@ -46,7 +46,8 @@ Gem::Specification.new do |s|
46
46
  s.add_development_dependency "curb" unless defined? JRUBY_VERSION
47
47
  s.add_development_dependency "patron" unless defined? JRUBY_VERSION
48
48
  s.add_development_dependency "typhoeus", '~> 0.6'
49
- s.add_development_dependency "manticore" if defined? JRUBY_VERSION
49
+ s.add_development_dependency "manticore", '~> 0.3.5' if defined? JRUBY_VERSION
50
+ s.add_development_dependency "hashie"
50
51
 
51
52
  # Prevent unit test failures on Ruby 1.8
52
53
  if defined?(RUBY_VERSION) && RUBY_VERSION < '1.9'
@@ -128,7 +128,7 @@ module Elasticsearch
128
128
  # @api private
129
129
  #
130
130
  def __extract_hosts(hosts_config, options={})
131
- if hosts_config.respond_to?(:to_hash)
131
+ if hosts_config.is_a?(Hash)
132
132
  hosts = [ hosts_config ]
133
133
  else
134
134
  if hosts_config.is_a?(String) && hosts_config.include?(',')
@@ -136,29 +136,29 @@ module Elasticsearch
136
136
  else
137
137
  hosts = Array(hosts_config)
138
138
  end
139
+ end
139
140
 
140
- hosts.map! do |host|
141
- case host
142
- when String
143
- if host =~ /^[a-z]+\:\/\//
144
- uri = URI.parse(host)
145
- { :scheme => uri.scheme, :user => uri.user, :password => uri.password, :host => uri.host, :path => uri.path, :port => uri.port.to_s }
146
- else
147
- host, port = host.split(':')
148
- { :host => host, :port => port }
149
- end
150
- when URI
151
- { :scheme => host.scheme, :user => host.user, :password => host.password, :host => host.host, :path => host.path, :port => host.port.to_s }
152
- when Hash
153
- host
141
+ result = hosts.map do |host|
142
+ case host
143
+ when String
144
+ if host =~ /^[a-z]+\:\/\//
145
+ uri = URI.parse(host)
146
+ { :scheme => uri.scheme, :user => uri.user, :password => uri.password, :host => uri.host, :path => uri.path, :port => uri.port.to_s }
154
147
  else
155
- raise ArgumentError, "Please pass host as a String, URI or Hash -- #{host.class} given."
148
+ host, port = host.split(':')
149
+ { :host => host, :port => port }
156
150
  end
151
+ when URI
152
+ { :scheme => host.scheme, :user => host.user, :password => host.password, :host => host.host, :path => host.path, :port => host.port.to_s }
153
+ when Hash
154
+ host
155
+ else
156
+ raise ArgumentError, "Please pass host as a String, URI or Hash -- #{host.class} given."
157
157
  end
158
158
  end
159
159
 
160
- hosts.shuffle! if options[:randomize_hosts]
161
- hosts
160
+ result.shuffle! if options[:randomize_hosts]
161
+ result
162
162
  end
163
163
 
164
164
  # Auto-detect the best adapter (HTTP "driver") available, based on libraries
@@ -23,7 +23,7 @@ module Elasticsearch
23
23
  def initialize(arguments={})
24
24
  selector_class = arguments[:selector_class] || DEFAULT_SELECTOR
25
25
  @connections = arguments[:connections] || []
26
- @selector = arguments[:selector] || selector_class.new(arguments)
26
+ @selector = arguments[:selector] || selector_class.new(arguments.merge(:connections => self))
27
27
  end
28
28
 
29
29
  # Returns an Array of hosts information in this collection as Hashes.
@@ -48,7 +48,6 @@ module Elasticsearch
48
48
  host[:port] ||= DEFAULT_PORT
49
49
 
50
50
  client = ::Curl::Easy.new
51
- client.resolve_mode = :ipv4
52
51
  client.headers = {'User-Agent' => "Curb #{Curl::CURB_VERSION}"}
53
52
  client.url = __full_url(host)
54
53
 
@@ -7,7 +7,7 @@ module Elasticsearch
7
7
  # Alternative HTTP transport implementation for JRuby,
8
8
  # using the [_Manticore_](https://github.com/cheald/manticore) client,
9
9
  #
10
- # @example
10
+ # @example HTTP
11
11
  #
12
12
  # require 'elasticsearch/transport/transport/http/manticore'
13
13
  #
@@ -19,6 +19,27 @@ module Elasticsearch
19
19
  # client.info['status']
20
20
  # => 200
21
21
  #
22
+ # @example HTTPS (All SSL settings are optional,
23
+ # see http://www.rubydoc.info/gems/manticore/Manticore/Client:initialize)
24
+ #
25
+ # require 'elasticsearch/transport/transport/http/manticore'
26
+ #
27
+ # client = Elasticsearch::Client.new \
28
+ # url: 'https://elasticsearch.example.com',
29
+ # transport_class: Elasticsearch::Transport::Transport::HTTP::Manticore,
30
+ # ssl: {
31
+ # truststore: '/tmp/truststore.jks',
32
+ # truststore_password: 'password',
33
+ # keystore: '/tmp/keystore.jks',
34
+ # keystore_password: 'secret',
35
+ # }
36
+ #
37
+ # client.transport.connections.first.connection
38
+ # => #<Manticore::Client:0xdeadbeef ...>
39
+ #
40
+ # client.info['status']
41
+ # => 200
42
+ #
22
43
  # @see Transport::Base
23
44
  #
24
45
  class Manticore
@@ -63,7 +84,7 @@ module Elasticsearch
63
84
  @request_options[:headers] = options[:headers]
64
85
  end
65
86
 
66
- client_options = setup_ssl(options[:ssl] || {})
87
+ client_options = {:ssl => options[:ssl] || {}}
67
88
 
68
89
  Connections::Collection.new \
69
90
  :connections => hosts.map { |host|
@@ -77,7 +98,7 @@ module Elasticsearch
77
98
 
78
99
  Connections::Connection.new \
79
100
  :host => host,
80
- :connection => ::Manticore::Client.new(:options => client_options)
101
+ :connection => ::Manticore::Client.new(client_options)
81
102
  },
82
103
  :selector_class => options[:selector_class],
83
104
  :selector => options[:selector]
@@ -95,22 +116,6 @@ module Elasticsearch
95
116
  ::Manticore::ResolutionFailure
96
117
  ]
97
118
  end
98
-
99
- private
100
- # TODO: not threadsafe
101
- def setup_ssl(ssl_options)
102
- if ssl_options[:truststore]
103
- java.lang.System.setProperty "javax.net.ssl.trustStore", ssl_options[:truststore]
104
- end
105
- if ssl_options[:truststore_password]
106
- java.lang.System.setProperty "javax.net.ssl.trustStorePassword", ssl_options[:truststore_password]
107
- end
108
- if ssl_options[:verify] == false then
109
- { :ignore_ssl_validation => true }
110
- else
111
- {}
112
- end
113
- end
114
119
  end
115
120
  end
116
121
  end
@@ -1,5 +1,5 @@
1
1
  module Elasticsearch
2
2
  module Transport
3
- VERSION = "1.0.7"
3
+ VERSION = "1.0.9"
4
4
  end
5
5
  end
@@ -65,7 +65,7 @@ class Elasticsearch::Transport::ClientIntegrationTest < Elasticsearch::Test::Int
65
65
  response = client.perform_request 'GET', ''
66
66
 
67
67
  assert_respond_to(response.body, :to_hash)
68
- assert_not_nil response.body['cluster_name']
68
+ assert_not_nil response.body['name']
69
69
  assert_equal 'application/json', response.headers['content-type']
70
70
  end unless JRUBY
71
71
  end
data/test/test_helper.rb CHANGED
@@ -36,6 +36,8 @@ require 'require-prof' if ENV["REQUIRE_PROF"]
36
36
  require 'elasticsearch-transport'
37
37
  require 'logger'
38
38
 
39
+ require 'hashie'
40
+
39
41
  RequireProf.print_timing_infos if ENV["REQUIRE_PROF"]
40
42
 
41
43
  if defined?(RUBY_VERSION) && RUBY_VERSION > '1.9'
@@ -115,7 +115,12 @@ class Elasticsearch::Transport::ClientTest < Test::Unit::TestCase
115
115
 
116
116
  should "extract from hash" do
117
117
  hosts = @client.__extract_hosts( { :host => 'myhost', :scheme => 'https' } )
118
+ assert_equal 'myhost', hosts[0][:host]
119
+ assert_equal 'https', hosts[0][:scheme]
120
+ end
118
121
 
122
+ should "extract from Hashie::Mash" do
123
+ hosts = @client.__extract_hosts( Hashie::Mash.new(:host => 'myhost', :scheme => 'https') )
119
124
  assert_equal 'myhost', hosts[0][:host]
120
125
  assert_equal 'https', hosts[0][:scheme]
121
126
  end
@@ -60,6 +60,11 @@ class Elasticsearch::Transport::Transport::Connections::CollectionTest < Test::U
60
60
  assert_equal ['BAR'], @collection.dead.map { |c| c.host.upcase }
61
61
  end
62
62
 
63
+ should "not return dead connections, when alive connections exist" do
64
+ assert_equal 1, @collection.size
65
+ @collection.all.size.times { refute @collection.get_connection.dead? }
66
+ end
67
+
63
68
  should "resurrect dead connection with least failures when no alive is available" do
64
69
  c1 = Connection.new(:host => 'foo').dead!.dead!
65
70
  c2 = Connection.new(:host => 'bar').dead!
@@ -99,12 +99,8 @@ else
99
99
  }
100
100
  }
101
101
 
102
- ::Manticore::Client.expects(:new).with(:options => {:ignore_ssl_validation => true})
103
-
102
+ ::Manticore::Client.expects(:new).with(options)
104
103
  transport = Manticore.new :hosts => [ { :host => 'foobar', :port => 1234 } ], :options => options
105
-
106
- assert_equal java.lang.System.getProperty("javax.net.ssl.trustStore"), "test.jks"
107
- assert_equal java.lang.System.getProperty("javax.net.ssl.trustStorePassword"), "test"
108
104
  end
109
105
  end
110
106
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: elasticsearch-transport
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.7
4
+ version: 1.0.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Karel Minarik
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-03-03 00:00:00.000000000 Z
11
+ date: 2015-05-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: multi_json
@@ -220,6 +220,20 @@ dependencies:
220
220
  - - "~>"
221
221
  - !ruby/object:Gem::Version
222
222
  version: '0.6'
223
+ - !ruby/object:Gem::Dependency
224
+ name: hashie
225
+ requirement: !ruby/object:Gem::Requirement
226
+ requirements:
227
+ - - ">="
228
+ - !ruby/object:Gem::Version
229
+ version: '0'
230
+ type: :development
231
+ prerelease: false
232
+ version_requirements: !ruby/object:Gem::Requirement
233
+ requirements:
234
+ - - ">="
235
+ - !ruby/object:Gem::Version
236
+ version: '0'
223
237
  - !ruby/object:Gem::Dependency
224
238
  name: minitest
225
239
  requirement: !ruby/object:Gem::Requirement