[ 
https://issues.apache.org/jira/browse/SOLR-17300?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Sanjay Dutt updated SOLR-17300:
-------------------------------
    Description: 
For custom settings, such as timeouts, usually a Http2SolrClient is created 
using the existing HTTP client using below code.
{code:java}
Http2SolrClient.Builder(leaderBaseUrl)
            .withHttpClient(existingHttp2SolrClient)
            .withIdleTimeout(soTimeout, TimeUnit.MILLISECONDS)
            .withConnectionTimeout(connTimeout, TimeUnit.MILLISECONDS)
            .build();
{code}

If not specified, withHttpClient method would automatically copy over some of 
the older configuration automatically to the new Http2SolrClient


{code:java}
if (this.basicAuthAuthorizationStr == null) {
        this.basicAuthAuthorizationStr = 
http2SolrClient.basicAuthAuthorizationStr;
      }
      if (this.followRedirects == null) {
        this.followRedirects = http2SolrClient.httpClient.isFollowRedirects();
      }
      if (this.idleTimeoutMillis == null) {
        this.idleTimeoutMillis = http2SolrClient.idleTimeoutMillis;
      }
      if (this.requestWriter == null) {
        this.requestWriter = http2SolrClient.requestWriter;
      }
      if (this.requestTimeoutMillis == null) {
        this.requestTimeoutMillis = http2SolrClient.requestTimeoutMillis;
      }
      if (this.responseParser == null) {
        this.responseParser = http2SolrClient.parser;
      }
      if (this.urlParamNames == null) {
        this.urlParamNames = http2SolrClient.urlParamNames;
      }
{code}


Nonetheless there is one field that did not pass over yet -- List of 
HttpListenerFactory. This list also includes the interceptor for Auth due to 
which re-created client were missing auth credentials and requests were failing.

*Proposed Solution* :- 

Along with other properties, List of Listener Factory should also be copied 
over from old to new client using withHttpClient method.


{code:java}
if (this.listenerFactory == null) {
        this.listenerFactory = new ArrayList<HttpListenerFactory>();
        http2SolrClient.listenerFactory.forEach(this.listenerFactory::add);
      }
{code}






  was:
For custom settings, such as timeouts, usually a Http2SolrClient is created, 
however using the existing HTTP client using below code.
{code:java}
Http2SolrClient.Builder(leaderBaseUrl)
            .withHttpClient(existingHttp2SolrClient)
            .withIdleTimeout(soTimeout, TimeUnit.MILLISECONDS)
            .withConnectionTimeout(connTimeout, TimeUnit.MILLISECONDS)
            .build();
{code}

If not specified, withHttpClient method would automatically copy over some of 
the older configuration automatically.


{code:java}
if (this.basicAuthAuthorizationStr == null) {
        this.basicAuthAuthorizationStr = 
http2SolrClient.basicAuthAuthorizationStr;
      }
      if (this.followRedirects == null) {
        this.followRedirects = http2SolrClient.httpClient.isFollowRedirects();
      }
      if (this.idleTimeoutMillis == null) {
        this.idleTimeoutMillis = http2SolrClient.idleTimeoutMillis;
      }
      if (this.requestWriter == null) {
        this.requestWriter = http2SolrClient.requestWriter;
      }
      if (this.requestTimeoutMillis == null) {
        this.requestTimeoutMillis = http2SolrClient.requestTimeoutMillis;
      }
      if (this.responseParser == null) {
        this.responseParser = http2SolrClient.parser;
      }
      if (this.urlParamNames == null) {
        this.urlParamNames = http2SolrClient.urlParamNames;
      }
{code}


Nonetheless there is one field that did not pass over yet -- List of 
HttpListenerFactory. This list also includes the interceptor for Auth due to 
which re-created client were missing auth credentials and requests were failing.

*Proposed Solution* :- 

Along with other properties, List of Listener Factory should also be copied 
over from old to new client using withHttpClient method.


{code:java}
if (this.listenerFactory == null) {
        this.listenerFactory = new ArrayList<HttpListenerFactory>();
        http2SolrClient.listenerFactory.forEach(this.listenerFactory::add);
      }
{code}







> Copy existing listeners on re-creation of Http2SolrClient
> ---------------------------------------------------------
>
>                 Key: SOLR-17300
>                 URL: https://issues.apache.org/jira/browse/SOLR-17300
>             Project: Solr
>          Issue Type: Sub-task
>            Reporter: Sanjay Dutt
>            Priority: Major
>
> For custom settings, such as timeouts, usually a Http2SolrClient is created 
> using the existing HTTP client using below code.
> {code:java}
> Http2SolrClient.Builder(leaderBaseUrl)
>             .withHttpClient(existingHttp2SolrClient)
>             .withIdleTimeout(soTimeout, TimeUnit.MILLISECONDS)
>             .withConnectionTimeout(connTimeout, TimeUnit.MILLISECONDS)
>             .build();
> {code}
> If not specified, withHttpClient method would automatically copy over some of 
> the older configuration automatically to the new Http2SolrClient
> {code:java}
> if (this.basicAuthAuthorizationStr == null) {
>         this.basicAuthAuthorizationStr = 
> http2SolrClient.basicAuthAuthorizationStr;
>       }
>       if (this.followRedirects == null) {
>         this.followRedirects = http2SolrClient.httpClient.isFollowRedirects();
>       }
>       if (this.idleTimeoutMillis == null) {
>         this.idleTimeoutMillis = http2SolrClient.idleTimeoutMillis;
>       }
>       if (this.requestWriter == null) {
>         this.requestWriter = http2SolrClient.requestWriter;
>       }
>       if (this.requestTimeoutMillis == null) {
>         this.requestTimeoutMillis = http2SolrClient.requestTimeoutMillis;
>       }
>       if (this.responseParser == null) {
>         this.responseParser = http2SolrClient.parser;
>       }
>       if (this.urlParamNames == null) {
>         this.urlParamNames = http2SolrClient.urlParamNames;
>       }
> {code}
> Nonetheless there is one field that did not pass over yet -- List of 
> HttpListenerFactory. This list also includes the interceptor for Auth due to 
> which re-created client were missing auth credentials and requests were 
> failing.
> *Proposed Solution* :- 
> Along with other properties, List of Listener Factory should also be copied 
> over from old to new client using withHttpClient method.
> {code:java}
> if (this.listenerFactory == null) {
>         this.listenerFactory = new ArrayList<HttpListenerFactory>();
>         http2SolrClient.listenerFactory.forEach(this.listenerFactory::add);
>       }
> {code}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscr...@solr.apache.org
For additional commands, e-mail: issues-h...@solr.apache.org

Reply via email to