Fix bug causing KafkaProducer to double-compress message batches on retry

This commit is contained in:
Dana Powers
2016-07-13 09:15:57 -07:00
parent 594f7079da
commit ca9d2fabc3

View File

@@ -89,6 +89,12 @@ class MessageSetBuffer(object):
return self._buffer.tell() >= self._batch_size
def close(self):
# This method may be called multiple times on the same batch
# i.e., on retries
# we need to make sure we only close it out once
# otherwise compressed messages may be double-compressed
# see Issue 718
if not self._closed:
if self._compressor:
# TODO: avoid copies with bytearray / memoryview
self._buffer.seek(4)
@@ -105,6 +111,7 @@ class MessageSetBuffer(object):
size = self._buffer.tell() - 4
self._buffer.seek(0)
self._buffer.write(Int32.encode(size))
self._buffer.seek(0)
self._closed = True