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(