Class PatchedLBSolrClient

java.lang.Object
org.apache.solr.client.solrj.SolrClient
de.hybris.platform.solrfacetsearch.solr.impl.PatchedLBSolrClient
All Implemented Interfaces:
Closeable, Serializable, AutoCloseable
Direct Known Subclasses:
PatchedLBHttpSolrClient

public abstract class PatchedLBSolrClient extends org.apache.solr.client.solrj.SolrClient

Hybris note: This is a patched version of LBSolrClient which we had to create due to https://issues.apache.org/jira/browse/SOLR-12415.

See Also:
  • Field Details

    • parser

      protected volatile org.apache.solr.client.solrj.ResponseParser parser
    • requestWriter

      protected volatile org.apache.solr.client.solrj.request.RequestWriter requestWriter
    • queryParams

      protected Set<String> queryParams
  • Constructor Details

    • PatchedLBSolrClient

      public PatchedLBSolrClient(List<String> baseSolrUrls)
  • Method Details

    • updateAliveList

      protected void updateAliveList()
    • createServerWrapper

      protected PatchedLBSolrClient.ServerWrapper createServerWrapper(String baseUrl)
    • getQueryParams

      public Set<String> getQueryParams()
    • setQueryParams

      public void setQueryParams(Set<String> queryParams)
      Expert Method.
      Parameters:
      queryParams - set of param keys to only send via the query string
    • addQueryParams

      public void addQueryParams(String queryOnlyParam)
    • normalize

      public static String normalize(String server)
    • request

      public PatchedLBSolrClient.Rsp request(PatchedLBSolrClient.Req req) throws org.apache.solr.client.solrj.SolrServerException, IOException
      Tries to query a live server from the list provided in Req. Servers in the dead pool are skipped. If a request fails due to an IOException, the server is moved to the dead pool for a certain period of time, or until a test request on that server succeeds. Servers are queried in the exact order given (except servers currently in the dead pool are skipped). If no live servers from the provided list remain to be tried, a number of previously skipped dead servers will be tried. Req.getNumDeadServersToTry() controls how many dead servers will be tried. If no live servers are found a SolrServerException is thrown.
      Parameters:
      req - contains both the request as well as the list of servers to query
      Returns:
      the result of the request
      Throws:
      IOException - If there is a low-level I/O error.
      org.apache.solr.client.solrj.SolrServerException
    • doRequest

      protected Exception doRequest(String baseUrl, PatchedLBSolrClient.Req req, PatchedLBSolrClient.Rsp rsp, boolean isNonRetryable, boolean isZombie) throws org.apache.solr.client.solrj.SolrServerException, IOException
      Throws:
      org.apache.solr.client.solrj.SolrServerException
      IOException
    • getClient

      protected abstract org.apache.solr.client.solrj.SolrClient getClient(String baseUrl)
    • setAliveCheckInterval

      public void setAliveCheckInterval(int interval)
      LBHttpSolrServer keeps pinging the dead servers at fixed interval to find if it is alive. Use this to set that interval
      Parameters:
      interval - time in milliseconds
    • getParser

      public org.apache.solr.client.solrj.ResponseParser getParser()
    • setParser

      public void setParser(org.apache.solr.client.solrj.ResponseParser parser)
      Changes the ResponseParser that will be used for the internal SolrServer objects.
      Parameters:
      parser - Default Response Parser chosen to parse the response if the parser were not specified as part of the request.
      See Also:
      • SolrRequest.getResponseParser()
    • setRequestWriter

      public void setRequestWriter(org.apache.solr.client.solrj.request.RequestWriter requestWriter)
      Changes the RequestWriter that will be used for the internal SolrServer objects.
      Parameters:
      requestWriter - Default RequestWriter, used to encode requests sent to the server.
    • getRequestWriter

      public org.apache.solr.client.solrj.request.RequestWriter getRequestWriter()
    • addSolrServer

      public void addSolrServer(String server) throws MalformedURLException
      Throws:
      MalformedURLException
    • removeSolrServer

      public String removeSolrServer(String server)
    • request

      public org.apache.solr.common.util.NamedList<Object> request(org.apache.solr.client.solrj.SolrRequest request, String collection) throws org.apache.solr.client.solrj.SolrServerException, IOException
      Tries to query a live server. A SolrServerException is thrown if all servers are dead. If the request failed due to IOException then the live server is moved to dead pool and the request is retried on another live server. After live servers are exhausted, any servers previously marked as dead will be tried before failing the request.
      Specified by:
      request in class org.apache.solr.client.solrj.SolrClient
      Parameters:
      request - the SolrRequest.
      Returns:
      response
      Throws:
      IOException - If there is a low-level I/O error.
      org.apache.solr.client.solrj.SolrServerException
    • request

      public org.apache.solr.common.util.NamedList<Object> request(org.apache.solr.client.solrj.SolrRequest request, String collection, Integer numServersToTry) throws org.apache.solr.client.solrj.SolrServerException, IOException
      Throws:
      org.apache.solr.client.solrj.SolrServerException
      IOException
    • pickServer

      protected PatchedLBSolrClient.ServerWrapper pickServer(PatchedLBSolrClient.ServerWrapper[] aliveServerList, org.apache.solr.client.solrj.SolrRequest request)
      Pick a server from list to execute request. By default servers are picked in round-robin manner, custom classes can override this method for more advance logic
      Parameters:
      aliveServerList - list of currently alive servers
      request - the request will be sent to the picked server
      Returns:
      the picked server
    • close

      public void close()