Details
-
Sub-task
-
Status: Closed
-
Major
-
Resolution: Fixed
-
None
-
None
-
None
Description
For custom settings, such as timeouts, usually a Http2SolrClient is created using the existing HTTP client using below code.
Http2SolrClient.Builder(leaderBaseUrl) .withHttpClient(existingHttp2SolrClient) .withIdleTimeout(soTimeout, TimeUnit.MILLISECONDS) .withConnectionTimeout(connTimeout, TimeUnit.MILLISECONDS) .build();
If not specified, withHttpClient method would automatically copy over some of the older configuration automatically to the new Http2SolrClient
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; }
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.
if (this.listenerFactory == null) { this.listenerFactory = new ArrayList<HttpListenerFactory>(); http2SolrClient.listenerFactory.forEach(this.listenerFactory::add); }
Attachments
Issue Links
- links to