SOLR-18051 Fix double registration of phaser and semaphore in HttpJettySolrClient #3992
+8
−2
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
https://issues.apache.org/jira/browse/SOLR-18051
Description
PR 2402 added support for CompletableFuture which accidentally introduced a double registration bug in HttpJettySolrClient by calling onRequestQueued/onComplete twice with asyncListener.queuedListener/completeListener. The registration is added once in the
makeRequesthelper inside ofdecorateRequest:and a second time below that during the following sequence:
This introduces three undesirable scenarios:
Solution
Remove the duplicate registration.
Tests
This is a difficult bug to reproduce in a test. One option that I tested and works is to expose the permits as a configurable value via system properties and make this an instance level configuration. If that's something we'd want to do it's straightforward to write a test that sets this value with the builder
withMaxAsyncRequests(1)and causes a deadlock.Checklist
Please review the following and check all that apply:
mainbranch../gradlew check.