Sorry, forgot to include the reference: [1] https://github.com/apache/solr/blob/f97264ada4349dfe5c95733e7193cbcedad6914f/solr/solrj/src/java/org/apache/solr/client/solrj/impl/Http2SolrClient.java#L455-L461
El lun, 3 oct 2022 a la(s) 12:52, Tomas Fernandez Lobbe ([email protected]) escribió: > Hello, > I was looking at the way SolrJ (Solr's client library) is using Jetty to > issue requests to Solr server (using Jetty server). As of now, Solr is > using Jetty 9.4.48 in main (don't know if that's relevant to my question, > unless behavior in this area recently changed). > From what I could see in the code and docs, the way Jetty client handles a > new request to a particular destination is: > 1. Add request to a queue > 2. Attempt to get a connection from the pool > 3. If successful getting a connection, use that to send the request, > otherwise, just exit, something else will grab the request from the queue > and send it when connections are available. > > Caller is expected to provide listener(s) that will receive a callback for > events happening in the request/response. Solr is using an > "InputStreamResponseListener" like[1]: > > InputStreamResponseListener listener = new > InputStreamResponseListener(); > req.send(listener); > Response response = listener.get(idleTimeout, TimeUnit.MILLISECONDS); > InputStream is = listener.getInputStream(); > return processErrorsAndResponse(solrRequest, parser, response, is); > > This pattern looks similar to what's in the Jetty docs, and even similar > to what the blocking APIs in Jetty client itself are using. > > The thread that sends the request (because it was successful acquiring the > connection from the pool) will continue fetching requests from the queue > and sending those for as long as there are requests in the queue. My > question is, can't this be problematic as the queue grows? Can the thread > that sends a request "FOO" be stuck sending other requests from the queue > for longer than the request "FOO" takes to be processed on the server side, > and a response is available on the client (at which point the > listener.get(...) would return immediately). > > Would it make more sense for the `send` to happen on the client's > executor, something like? > > httpClient.getExecutor().execute(() -> req.send(listener)); > > Thanks, > Tomás >
_______________________________________________ jetty-users mailing list [email protected] To unsubscribe from this list, visit https://www.eclipse.org/mailman/listinfo/jetty-users
