HIVE-29488: NPE in Kryo deserializer when query plan contains ExprNodeGenericFuncDesc with Guava collections#6352
Conversation
…util.Collection.isEmpty()" because "this.delegate" is null Based on a fix by Naresh Panchetty Ramanaiah.
3b152b0 to
513255d
Compare
|
The test TestVectorizationContext had failed, because it changed the children list after creating the ExprNodeGenericFuncDesc. I checked the code, and this modification-after-instantiation seems to be limited to the test class. There are a few candidates that in principle could modify the list, but I don't think that happens in the code:
I therefore propose to change TestVectorizationContext so that it takes into account that ExprNodeGenericFuncDesc makes a copy of the children list. |
zabetak
left a comment
There was a problem hiding this comment.
I like the fix cause it is generic and improves the encapsulation of ExprNodeGenericFuncDesc class. However, at the same time it changes a bit the existing behavior and increases a bit the memory footprint and GC activity. I saw the comment that changes in this class will not affect the overall behavior of Hive so I am OK to merge the PR as is.
As far as I see there aren't many places where we pass in the constructor something different from an ArrayList so another potential fix would be to change the creation of the IN function call in TypeCheckProcFactory by wrapping children into an ArrayList. This is less general but closer to the root cause that led to this issue.
I am OK with any of the above options so the approval remains no matter which we pick. The remaining comments are mostly nits that we don't necessarily have to address (or defer in follow-up).
|
|
Many thanks to @thomasrebele @nareshpr @deniskuzZ @ayushtkn for pushing this work forward, reviewing and providing valuable feedback! |



See HIVE-29488.
Thank you @nareshpr for providing an initial version of the q file test and a first version of the fix!
What changes were proposed in this pull request?
Put the children of ExprNodeGenericFuncDesc in their own list object.
Why are the changes needed?
Fixes an NPE due to the Kryo library when CBO is disabled.
Does this PR introduce any user-facing change?
No
How was this patch tested?
A q file test was added.