Jason Gerlowski created SOLR-17464: -------------------------------------- Summary: Http2SolrClient.requestAsync triggers NPE when using a shared Jetty client Key: SOLR-17464 URL: https://issues.apache.org/jira/browse/SOLR-17464 Project: Solr Issue Type: Bug Security Level: Public (Default Security Level. Issues are Public) Reporter: Jason Gerlowski
Http2SolrClient can be configured to either create its own Jetty HttpClient, or reuse an existing one. In this latter "reuse" case, the Http2SolrClient never sets the "executor" instance variable. This causes a NullPointerException any time the SolrClient's "requestAsync" method is called, which expects "executor" to be set. The bug is easy to reproduce with the following JUnit code (that, as of writing, can be dropped into Http2SolrClientTest and run): {code} @Test public void testReproduceExecutorNPEBug() { DebugServlet.clear(); final var url = getBaseUrl() + DEBUG_SERVLET_PATH; final var queryParams = new ModifiableSolrParams(); queryParams.add("q", "*:*"); try (Http2SolrClient originalClient = new Http2SolrClient.Builder(url).withDefaultCollection(DEFAULT_CORE).build()) { // TODO The 'requestAsync' call below should succeed, but produces an NPE since try (Http2SolrClient derivedClient = new Http2SolrClient.Builder(url).withDefaultCollection(DEFAULT_CORE).withHttpClient(originalClient).build()) { final var future = derivedClient.requestAsync(new QueryRequest(queryParams)); final var results = future.join(); } } } {code} And the exception: {code} 3429 INFO (h2sc-21-thread-2) [n: c: s: r: x: t:] o.e.j.c.ResponseNotifier Exception while notifying listener org.apache.solr.client.solrj.impl.Http2SolrClient$1@34bcd66e => java.lang.NullPointerException: Cannot invoke "java.util.concurrent.ExecutorService.execute(java.lang.Runnable)" because "this.this$0.executor" is null at org.apache.solr.client.solrj.impl.Http2SolrClient$1.onHeaders(Http2SolrClient.java:447) java.lang.NullPointerException: Cannot invoke "java.util.concurrent.ExecutorService.execute(java.lang.Runnable)" because "this.this$0.executor" is null at org.apache.solr.client.solrj.impl.Http2SolrClient$1.onHeaders(Http2SolrClient.java:447) ~[main/:?] at org.eclipse.jetty.client.ResponseNotifier.notifyHeaders(ResponseNotifier.java:95) [jetty-client-10.0.22.jar:10.0.22] at org.eclipse.jetty.client.ResponseNotifier.notifyHeaders(ResponseNotifier.java:87) [jetty-client-10.0.22.jar:10.0.22] at org.eclipse.jetty.client.HttpReceiver.responseHeaders(HttpReceiver.java:327) [jetty-client-10.0.22.jar:10.0.22] at org.eclipse.jetty.http2.client.http.HttpReceiverOverHTTP2.onHeaders(HttpReceiverOverHTTP2.java:120) [http2-http-client-transport-10.0.22.jar:10.0.22] at org.eclipse.jetty.http2.client.http.HttpChannelOverHTTP2$Listener.onHeaders(HttpChannelOverHTTP2.java:186) [http2-http-client-transport-10.0.22.jar:10.0.22] ... {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