Don't share the same DBS object amongst multiple threads #9311
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.
Fixes #9221
Fixes #9253
Status
not-tested
Description
Instead of using a global cache of DBSReader, which are then shared between multiple threads, make sure each thread constructs its own DBSReader object (and then reuse it within the thread).
This PR also fixes how we evaluate whether the DBSReader object is pointing to the global instance or not (no need to make any calls to the server).
I wanted to get rid of this __dbses global variable:
https://github.com/dmwm/WMCore/blob/master/src/python/WMCore/WorkQueue/WorkQueueUtils.py#L30
but it would require substantial changes to the start policy algorithms. Given that only those are now using this global var, and they are sequential, I decided to let them be.
Is it backward compatible (if not, which system it affects?)
yes
Related PRs
no
External dependencies / deployment changes
Needs to be validated on both levels: global and local workqueue.