KSQL-12554 | Ensure Deterministic UDF Loading by Avoiding Context ClassLoader Interference #10442
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
In the current implementation, although the Thread.setContextClassLoader() method is not explicitly used, there is a possibility that the context class loader could be altered elsewhere, which was affecting the integration tests. This can lead to non-deterministic behavior in the loading of user-defined functions (UDFs) and cause unpredictable test results.
To address this issue, we ensure that the correct class loader is used explicitly for UDF loading without relying on the thread's context class loader. This change prevents unintended interference and guarantees that UDFs are loaded consistently, improving the stability and reliability of the integration tests.
The fix involves using ClassGraph.overrideClassLoaders(loader) to explicitly set the class loader for classpath scanning, thus avoiding any potential conflicts caused by changes to the thread's context class loader.
Testing done
- All paths leading to UserFunctionLoader
- All paths leading to UserFunctionLoader.loadClass
- CustomUDF loading through a custom path
Reviewer checklist