fix: make sure use of non-threadsafe UdfIndex is synchronized #3486
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.
Description
UdfIndex
is not thread-safe, and is used in two place in the codebase where it could be accessed by different threads:UdfFactory
andUdfAggregateFunctionFactory
.This PR adds synchronization to
UdfFactory
and `UdfAggregateFunctionFactory' to make this access thread-safe.Currently
addFunction
is always called (in clock time) beforegetFunction
. (Although this access pattern is not enforced in the class).Note that this doesn't make the access safe, because there is no obvious happens-before relationship between the actions on a thread calling
addFunction
and another thread callinggetFunction
.There could be an accidental happens-before due to the way threads are currently started in the server but relying on this is fragile. By synchronizing we guarantee a happens-before relationship between threads accessing these functions.
Testing done
Non functional change
Reviewer checklist