You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@kafka.apache.org by "Satish Duggana (JIRA)" <ji...@apache.org> on 2017/02/07 04:52:41 UTC
[jira] [Created] (KAFKA-4741) Memory leak in
RecordAccumulator#append
Satish Duggana created KAFKA-4741:
-------------------------------------
Summary: Memory leak in RecordAccumulator#append
Key: KAFKA-4741
URL: https://issues.apache.org/jira/browse/KAFKA-4741
Project: Kafka
Issue Type: Bug
Components: clients
Reporter: Satish Duggana
RecordAccumulator creates a `ByteBuffer` from free memory pool. This should be deallocated when invocations encounter an exception or throwing any exceptions.
I added todo comment lines in the below code for cases to deallocate that buffer.
{code:title=RecordProducer.java|borderStyle=solid}
ByteBuffer buffer = free.allocate(size, maxTimeToBlock);
synchronized (dq) {
// Need to check if producer is closed again after grabbing the dequeue lock.
if (closed)
// todo buffer should be cleared.
throw new IllegalStateException("Cannot send after the producer is closed.");
// todo buffer should be cleared up when tryAppend throws an Exception
RecordAppendResult appendResult = tryAppend(timestamp, key, value, callback, dq);
if (appendResult != null) {
// Somebody else found us a batch, return the one we waited for! Hopefully this doesn't happen often...
free.deallocate(buffer);
return appendResult;
}
{code}
I will raise PR for the same soon.
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)