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