Class: OpenSearch::Transport::Transport::HTTP::Manticore

Inherits:
Object
  • Object
show all
Includes:
Base
Defined in:
lib/opensearch/transport/transport/http/manticore.rb

Overview

Alternative HTTP transport implementation for JRuby, using the [Manticore](github.com/cheald/manticore) client,

@example HTTPS (All SSL settings are optional,
                see http://www.rubydoc.info/gems/manticore/Manticore/Client:initialize)

   require 'opensearch/transport/transport/http/manticore'

   client = OpenSearch::Client.new \
     url: 'https://opensearch.example.com',
     transport_class: OpenSearch::Transport::Transport::HTTP::Manticore,
     ssl: {
       truststore: '/tmp/truststore.jks',
       truststore_password: 'password',
       keystore: '/tmp/keystore.jks',
       keystore_password: 'secret',
     }

   client.transport.connections.first.connection
   => #<Manticore::Client:0xdeadbeef ...>

   client.info['status']
   => 200

Examples:

HTTP


require 'opensearch/transport/transport/http/manticore'

client = OpenSearch::Client.new transport_class: OpenSearch::Transport::Transport::HTTP::Manticore

client.transport.connections.first.connection
=> #<Manticore::Client:0x56bf7ca6 ...>

client.info['status']
=> 200

See Also:

Constant Summary

Constants included from Base

Base::DEFAULT_MAX_RETRIES, Base::DEFAULT_PORT, Base::DEFAULT_PROTOCOL, Base::DEFAULT_RELOAD_AFTER, Base::DEFAULT_RESURRECT_AFTER, Base::DEFAULT_SERIALIZER_CLASS, Base::SANITIZED_PASSWORD

Instance Attribute Summary

Attributes included from Base

#connections, #counter, #hosts, #last_request_at, #logger, #options, #protocol, #reload_after, #reload_connections, #resurrect_after, #serializer, #sniffer, #tracer

Instance Method Summary collapse

Methods included from Base

#__build_connection, #__convert_to_json, #__full_url, #__log_response, #__raise_transport_error, #__rebuild_connections, #__trace, #get_connection, #reload_connections!, #resurrect_dead_connections!

Methods included from Loggable

#log_debug, #log_error, #log_fatal, #log_info, #log_warn

Constructor Details

#initialize(arguments = {}, &block) ⇒ Manticore

Returns a new instance of Manticore.



74
75
76
77
# File 'lib/opensearch/transport/transport/http/manticore.rb', line 74

def initialize(arguments = {}, &block)
  @manticore = build_client(arguments[:options] || {})
  super(arguments, &block)
end

Instance Method Details

#__build_connectionsConnections::Collection

Builds and returns a collection of connections. Each connection is a Manticore::Client



120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
# File 'lib/opensearch/transport/transport/http/manticore.rb', line 120

def __build_connections
  @request_options = {}
  apply_headers(@request_options, options[:transport_options])
  apply_headers(@request_options, options)

  Connections::Collection.new \
    connections: hosts.map { |host|
      host[:protocol]   = host[:scheme] || DEFAULT_PROTOCOL
      host[:port]     ||= DEFAULT_PORT

      host.delete(:user)     # auth is not supported here.
      host.delete(:password) # use the headers

      Connections::Connection.new \
        host: host,
        connection: @manticore
    },
    selector_class: options[:selector_class],
    selector: options[:selector]
end

#__close_connectionsConnections::Collection

Closes all connections by marking them as dead and closing the underlying HttpClient instances



146
147
148
149
# File 'lib/opensearch/transport/transport/http/manticore.rb', line 146

def __close_connections
  # The Manticore adapter uses a single long-lived instance
  # of Manticore::Client, so we don't close the connections.
end

#build_client(options = {}) ⇒ Object

Should just be run once at startup



80
81
82
83
84
85
# File 'lib/opensearch/transport/transport/http/manticore.rb', line 80

def build_client(options = {})
  client_options = options[:transport_options] || {}
  client_options[:ssl] = options[:ssl] || {}

  @manticore = ::Manticore::Client.new(client_options)
end

#host_unreachable_exceptionsArray

Returns an array of implementation specific connection errors.

Returns:

  • (Array)


155
156
157
158
159
160
161
162
# File 'lib/opensearch/transport/transport/http/manticore.rb', line 155

def host_unreachable_exceptions
  [
    ::Manticore::Timeout,
    ::Manticore::SocketException,
    ::Manticore::ClientProtocolException,
    ::Manticore::ResolutionFailure
  ]
end

#perform_request(method, path, params = {}, body = nil, headers = nil, opts = {}) ⇒ Response

Performs the request by invoking Base#perform_request with a block.

Returns:

See Also:



92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
# File 'lib/opensearch/transport/transport/http/manticore.rb', line 92

def perform_request(method, path, params = {}, body = nil, headers = nil, opts = {})
  super do |connection, url|
    params[:body] = __convert_to_json(body) if body
    params[:headers] = headers if headers
    params = params.merge @request_options
    case method
    when "GET"
      resp = connection.connection.get(url, params)
    when "HEAD"
      resp = connection.connection.head(url, params)
    when "PUT"
      resp = connection.connection.put(url, params)
    when "POST"
      resp = connection.connection.post(url, params)
    when "DELETE"
      resp = connection.connection.delete(url, params)
    else
      raise ArgumentError, "Method #{method} not supported"
    end
    Response.new resp.code, resp.read_body, resp.headers
  end
end