Removes usage of ConcurrentHashMap in LocalXAResource.java to avoid thread pinning in JDKs of version 22 and lower #8900
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.
This PR removes usage of the
java.util.concurrent.ConcurrentHashMap
class inLocalXAResource
to avoid thread pinning issues (ConcurrentHashMap
usessynchronized
internally, and association computation involves IO).This initial revision of this PR is as simple as can be at the possible expense of too coarse a lock, serializing all access to the associations
Map
through a singleReentrantLock
.In the normal JTA course of events this should probably be fine? It is worth bearing in mind that a JTA implementation can conceivably perform any association-mutating operation on a given thread-specific transaction branch from any thread, which makes things tricky.
Because of that, I plan to immediately and subsequently explore doing this in a more performant way in a subsequent revision, but this PR will exist so that if it is deemed necessary to push it as-is we can do so. I don't know offhand whether this will help or hurt overall performance.