Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# See https://github.com/apache/solr/blob/main/dev-docs/changelog.adoc
title: Fix phaser/semaphore double registration bug in HttpJettySolrClient
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
Original file line number Diff line number Diff line change
Expand Up @@ -401,51 +401,47 @@ public CompletableFuture<NamedList<Object>> requestAsync(
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(
Expand Down