Fixes janino bug returning incorrect results #26504
Open
+223
−54
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.
What is the purpose of the change
The bug comes from the fact that previously, we were creating an anonymous function callback within the janino generated code. This function was then referencing the local
DelegatingAsyncResultFuture
, effectively creating a closure. When the function was called back from different threads, they seemed to both reference the sameDelegatingAsyncResultFuture
rather than their own local ones. The result was returning incorrect "synchronous" results, so queries like the following might have issues:Here, the f1 column returned was retrieved by asking for it from the local
DelegatingAsyncResultFuture
, and so getting the wrong instance meant getting the wrong result.To fix it, I removed the inner anonymous function and just added the same logic on
DelegatingAsyncResultFuture
. It requires setting it up with all of the metadata (indexes, sync results), and when the result is complete, rather than calling the generated function, it just creates the resultRowData
itself.Brief change log
(for example:)
Verifying this change
Please make sure both new and modified tests in this PR follow the conventions for tests defined in our code quality guide.
(Please pick either of the following options)
This change is a trivial rework / code cleanup without any test coverage.
(or)
This change is already covered by existing tests, such as (please describe tests).
(or)
This change added tests and can be verified as follows:
(example:)
Does this pull request potentially affect one of the following parts:
@Public(Evolving)
: (yes / no)Documentation