Hi Andrei, Try replacing this: builder = builder.withHttpClient(http2ClientBuilder.build()); with builder = builder.withInternalClientBuilder(http2ClientBuilder);
Tomás On Mon, Apr 3, 2023 at 10:13 AM Andrei Minin <ami...@intellective.com.invalid> wrote: > > Hi, > > I have an issue when using http2 solr client with SOLR (v9.0.0 and 9.2.0) > cluster s configured with basic authentication. > > Legacy solr cluster client is working fine. > > Client creation code snippet: > > CloudHttp2SolrClient.Builder builder = new > CloudHttp2SolrClient.Builder(solrUrls); > > Http2SolrClient.Builder http2ClientBuilder = new > Http2SolrClient.Builder(); > http2ClientBuilder.withBasicAuthCredentials("user", "password"); > > builder = builder.withHttpClient(http2ClientBuilder.build()); > > SolrClient solrClient = builder.build(); > > Is it correct way to create http2 solr client? > > > Error thrown when initiating connection to solr cluster: > > Caused by: > org.apache.solr.client.solrj.impl.BaseHttpSolrClient$RemoteSolrException: > Error from server at http://solr3:8983/solr: Expected mime type in > [application/octet-stream, application/vnd.apache.solr.javabin] but got > text/html. <html> > <head> > <meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/> > <title>Error 401 require authentication</title> > </head> > <body><h2>HTTP ERROR 401 require authentication</h2> > <table> > <tr><th>URI:</th><td>/solr/admin/collections</td></tr> > <tr><th>STATUS:</th><td>401</td></tr> > <tr><th>MESSAGE:</th><td>require authentication</td></tr> > <tr><th>SERVLET:</th><td>default</td></tr> > </table> > > </body> > </html> > > at > org.apache.solr.client.solrj.impl.Http2SolrClient.processErrorsAndResponse(Http2SolrClient.java:835) > at > org.apache.solr.client.solrj.impl.Http2SolrClient.processErrorsAndResponse(Http2SolrClient.java:548) > at > org.apache.solr.client.solrj.impl.Http2SolrClient.request(Http2SolrClient.java:507) > at org.apache.solr.client.solrj.SolrClient.request(SolrClient.java:1193) > at > org.apache.solr.client.solrj.impl.BaseHttpClusterStateProvider.fetchLiveNodes(BaseHttpClusterStateProvider.java:227) > at > org.apache.solr.client.solrj.impl.BaseHttpClusterStateProvider.init(BaseHttpClusterStateProvider.java:63) > at > org.apache.solr.client.solrj.impl.Http2ClusterStateProvider.<init>(Http2ClusterStateProvider.java:32) > at > org.apache.solr.client.solrj.impl.CloudHttp2SolrClient$Builder.build(CloudHttp2SolrClient.java:392) > ... 113 common frames omitted > > Here is my findings: > > org.apache.solr.client.solrj.impl.BaseHttpClusterStateProvider method void > init(List<String> solrUrls) > creates initialClient to get live nodes list: > > public abstract class BaseHttpClusterStateProvider implements > ClusterStateProvider { > > public void init(List<String> solrUrls) throws Exception { > for (String solrUrl : solrUrls) { > urlScheme = solrUrl.startsWith("https") ? "https" : "http"; > try (SolrClient initialClient = getSolrClient(solrUrl)) { > this.liveNodes = fetchLiveNodes(initialClient); > > org.apache.solr.client.solrj.impl.Http2ClusterStateProvider class method > getSolrClient rmethod returnes new instance of Http2SolrClient with > basicAuthAuthorizationStr = null while this.httpClient instance has not > null value basicAuthAuthorizationStr: > > public class Http2ClusterStateProvider extends > BaseHttpClusterStateProvider { > > @Override > protected SolrClient getSolrClient(String baseUrl) { > return new > Http2SolrClient.Builder(baseUrl).withHttpClient(httpClient).build(); > } > } > > Http2SolrClient.Builder class build() method ignores > basicAuthAuthorizationStr fiekd value provided in httpClient instance in > withHttpClient() method - basic authentication string taken from new > Http2SolrClient.Builder(baseUrl). builder instance with blank credentials. > > As result, initialClient instance has null basic credentials string and > connection to solr cluster fails (401 error). > > > Kind regards. > > > Andrei Minin | Principal Developer > > Intellective > > ami...@intellective.com > > www.intellective.com<http://www.intellective.com/> > > Follow us on LinkedIn<https://www.linkedin.com/company/intellectiv/> | > Twitter<https://twitter.com/intellectiv> | Facebook< > https://www.facebook.com/intellectiveglobal> >