Fix connection pool bug which can cause delays in obtaining a connection #3079
+29
−9
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.
It has been observed in some environments that integration tests such as
GraphBinaryGroovyRemoteFeatureTest
can encounter 16 second delays between test executions. Investigation shows this can occur if one thread is attempting to obtain a connection and another thread is creating or releasing a connection at the same time. It is possible for the thread releasing or creating a connection to signal thehasAvailableConnection
condition after the other thread has determined there are no available connections but before callingawait
on the condition. Thus the thread obtaining the connection will wait for default timeout of 16 seconds before attempting to retrieve a connection again, causing the observed delays.This fix involves locking the
waitLock
before obtaining and potentially calling await for an available connection which prevents other threads from signalling thehasAvailableConnection
before other threads callawait
. The fix was tested by observing integration test execution on environments which previously produced the 16 second delays and also by executingProfilingApplication
. The results ofProfilingApplication
did not demonstrate any degradation of average requests per second.