class Solr::Request::Runner
TODO: Add documentation about request running
Attributes
node_selection_strategy[R]
request[R]
response_parser[R]
Public Class Methods
call(opts)
click to toggle source
# File lib/solr/request/runner.rb, line 18 def self.call(opts) new(**opts).call end
new(request:, node_selection_strategy: Solr::Request::DefaultNodeSelectionStrategy, solr_connection: Solr::Connection)
click to toggle source
# File lib/solr/request/runner.rb, line 22 def initialize(request:, node_selection_strategy: Solr::Request::DefaultNodeSelectionStrategy, solr_connection: Solr::Connection) @request = request @response_parser = response_parser @node_selection_strategy = node_selection_strategy @solr_connection = solr_connection end
Public Instance Methods
call()
click to toggle source
# File lib/solr/request/runner.rb, line 31 def call solr_url_errors = {} solr_urls.each do |node_url| request_url = build_request_url(url: node_url, path: request.path, url_params: request.url_params) begin raw_response = @solr_connection.call(url: request_url.to_s, method: request.method, body: request.body) solr_response = Solr::Response::Parser.call(raw_response) raise Solr::Errors::SolrQueryError, solr_response.error_message unless solr_response.ok? return solr_response rescue Faraday::ConnectionFailed, Faraday::TimeoutError, Errno::EADDRNOTAVAIL, Timeout::Error => e if Solr.master_slave_enabled? Solr.configuration.nodes_gray_list.add(node_url) end solr_url_errors[node_url] = "#{e.class.name} - #{e.message}" # Try next node end end raise Solr::Errors::SolrConnectionFailedError.new(solr_url_errors) end
Private Instance Methods
collection_name()
click to toggle source
# File lib/solr/request/runner.rb, line 72 def collection_name Solr.current_core_config.name end
solr_urls()
click to toggle source
# File lib/solr/request/runner.rb, line 56 def solr_urls @solr_urls ||= begin urls = if Solr.node_url_override [File.join(Solr.node_url_override, collection_name.to_s)] elsif Solr.cloud_enabled? || Solr.master_slave_enabled? node_selection_strategy.call(collection_name) else [Solr.current_core_config.url] end unless urls && urls.any? raise Solr::Errors::NoActiveSolrNodesError end urls end end