[
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: [email protected]
For additional commands, e-mail: [email protected]