Fix r2dbc connection pool returning multiple pooled objects pointing to same database connection #210
+45
−3
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.
R2dbc returns multiple pooled objects pointing to same database connection in case downstream gets disposed, e.g.
Mono
converted fromFlux
or otherPublisher
(e.g. any RxJava type)Flux.onError
,Mono.onError
invoked from timeout operator on different schedulerFlux.take
Dispose event in downstream causes ref.release().subscribe(); to be invoked that releases pooled references (without calling
preDestroy
or any kind of logging event). As a result another pending invocationConnectionPool#create
receives same database connection, that has not yet been closed and has not finished processing in initial subscription.This causes connection sharing issues on higher load that lead to lost cursor and data consistency issues (when transactions are leaked).