DRILL-8489: Sender memory leak when rpc encode exception #2901
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.
DRILL-8489: Sender memory leak when rpc encode exception
Description
When encode throw Exception, if encode msg instanceof ReferenceCounted, netty can release msg, but drill convert msg to OutboundRpcMessage, so netty can not release msg.
we can reproduce this scenario by break point and add debug log. Seeing Testing#Test1
Documentation
(Please describe user-visible changes similar to what should appear in the Drill documentation.)
Testing
Test 1
1. set -Ddrill.memory.debug.allocator=TRUE
2. we add debug log as following
DrillByteBufAllocator #DrillByteBufAllocator
3. restart drillbit
4. Run tpch sql8
5.Break point: BroadcastSenderRootExec#innerNext#tunnels[i].sendRecordBatch(batch);
we resume program (F9, idea tool ) until there is memory had been allocated in the writableBatch object shown below
6.Break point: MessageToMessageEncoder#encode
we resume program (F9, idea tool ) until step 5 writableBatch encode
Test 2
4.This scenario is relatively easy to Reproduce by running the following script