This is an automated email from the ASF dual-hosted git repository.

dsmiley pushed a commit to branch branch_10x
in repository https://gitbox.apache.org/repos/asf/solr.git


The following commit(s) were added to refs/heads/branch_10x by this push:
     new 060ea23410c SOLR-18051: HttpJettySolrClient.requestAsync 
performance/reliability (#3992)
060ea23410c is described below

commit 060ea23410c350e1e5f81f0c104bdc0db4c607e0
Author: jvanneman <[email protected]>
AuthorDate: Sun Jan 25 00:53:13 2026 -0500

    SOLR-18051: HttpJettySolrClient.requestAsync performance/reliability (#3992)
    
    Improve HttpJettySolrClient.requestAsync (used in 
sharded/distributed-search and more) to increase throughput and prevent a rare 
deadlock.
    
    Fix double registration of phaser and semaphore in HttpJettySolrClient, 
which had detrimental effects.
---
 .../SOLR-18051-fix-double-registration-bug.yml     |  8 ++
 .../client/solrj/jetty/HttpJettySolrClient.java    | 86 +++++++++++-----------
 2 files changed, 49 insertions(+), 45 deletions(-)

diff --git a/changelog/unreleased/SOLR-18051-fix-double-registration-bug.yml 
b/changelog/unreleased/SOLR-18051-fix-double-registration-bug.yml
new file mode 100644
index 00000000000..918950bc94e
--- /dev/null
+++ b/changelog/unreleased/SOLR-18051-fix-double-registration-bug.yml
@@ -0,0 +1,8 @@
+# See https://github.com/apache/solr/blob/main/dev-docs/changelog.adoc
+title: Improve HttpJettySolrClient.requestAsync (used in 
sharded/distributed-search and more) to increase throughput and prevent a rare 
deadlock.
+type: fixed # added, changed, fixed, deprecated, removed, dependency_update, 
security, other
+authors:
+  - name: James Vanneman
+links:
+  - name: SOLR-18051
+    url: https://issues.apache.org/jira/browse/SOLR-18051
diff --git 
a/solr/solrj-jetty/src/java/org/apache/solr/client/solrj/jetty/HttpJettySolrClient.java
 
b/solr/solrj-jetty/src/java/org/apache/solr/client/solrj/jetty/HttpJettySolrClient.java
index 072a2add953..cac90ba4670 100644
--- 
a/solr/solrj-jetty/src/java/org/apache/solr/client/solrj/jetty/HttpJettySolrClient.java
+++ 
b/solr/solrj-jetty/src/java/org/apache/solr/client/solrj/jetty/HttpJettySolrClient.java
@@ -401,51 +401,47 @@ public class HttpJettySolrClient extends 
HttpSolrClientBase {
       future.completeExceptionally(e);
       return future;
     }
-    mrrv.request
-        .onRequestQueued(asyncTracker.queuedListener)
-        .onComplete(asyncTracker.completeListener)
-        .send(
-            new InputStreamResponseListener() {
-              // MDC snapshot from requestAsync's thread
-              MDCCopyHelper mdcCopyHelper = new MDCCopyHelper();
-
-              @Override
-              public void onHeaders(Response response) {
-                super.onHeaders(response);
-                InputStreamResponseListener listener = this;
-                executor.execute(
-                    () -> {
-                      InputStream is = listener.getInputStream();
-                      try {
-                        NamedList<Object> body =
-                            processErrorsAndResponse(solrRequest, response, 
is, url);
-                        mdcCopyHelper.onBegin(null);
-                        log.debug("response processing success");
-                        future.complete(body);
-                      } catch (CancellationException e) {
-                        mdcCopyHelper.onBegin(null);
-                        log.debug("response processing cancelled", e);
-                        if (!future.isDone()) {
-                          future.cancel(true);
-                        }
-                      } catch (Throwable e) {
-                        mdcCopyHelper.onBegin(null);
-                        log.debug("response processing failed", e);
-                        future.completeExceptionally(e);
-                      } finally {
-                        log.debug("response processing completed");
-                        mdcCopyHelper.onComplete(null);
-                      }
-                    });
-              }
-
-              @Override
-              public void onFailure(Response response, Throwable failure) {
-                super.onFailure(response, failure);
-                future.completeExceptionally(
-                    new SolrServerException(failure.getMessage(), failure));
-              }
-            });
+    mrrv.request.send(
+        new InputStreamResponseListener() {
+          // MDC snapshot from requestAsync's thread
+          MDCCopyHelper mdcCopyHelper = new MDCCopyHelper();
+
+          @Override
+          public void onHeaders(Response response) {
+            super.onHeaders(response);
+            InputStreamResponseListener listener = this;
+            executor.execute(
+                () -> {
+                  InputStream is = listener.getInputStream();
+                  try {
+                    NamedList<Object> body =
+                        processErrorsAndResponse(solrRequest, response, is, 
url);
+                    mdcCopyHelper.onBegin(null);
+                    log.debug("response processing success");
+                    future.complete(body);
+                  } catch (CancellationException e) {
+                    mdcCopyHelper.onBegin(null);
+                    log.debug("response processing cancelled", e);
+                    if (!future.isDone()) {
+                      future.cancel(true);
+                    }
+                  } catch (Throwable e) {
+                    mdcCopyHelper.onBegin(null);
+                    log.debug("response processing failed", e);
+                    future.completeExceptionally(e);
+                  } finally {
+                    log.debug("response processing completed");
+                    mdcCopyHelper.onComplete(null);
+                  }
+                });
+          }
+
+          @Override
+          public void onFailure(Response response, Throwable failure) {
+            super.onFailure(response, failure);
+            future.completeExceptionally(new 
SolrServerException(failure.getMessage(), failure));
+          }
+        });
 
     // SOLR-17916: Disable request aborting
     // future.exceptionally(

Reply via email to