[
https://issues.apache.org/jira/browse/KAFKA-4745?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15858686#comment-15858686
]
Ismael Juma commented on KAFKA-4745:
------------------------------------
Your improvement suggestion makes sense to me, would you like to submit a PR?
> KafkaLZ4BlockOutputStream.java incorrectly finishes the last frame
> ------------------------------------------------------------------
>
> Key: KAFKA-4745
> URL: https://issues.apache.org/jira/browse/KAFKA-4745
> Project: Kafka
> Issue Type: Bug
> Components: compression
> Affects Versions: 0.10.1.1
> Reporter: Will Droste
> Fix For: 0.10.1.1
>
>
> There is a scenario where by the delegated OutputStream does not call flush
> before close there will be missing data in the stream. The reason for this is
> the stream is actually marked close before it is actually flushed.
> The end mark is written before the flush, also the writeEndMark was finishing
> the stream so its redundant in this context to mark it finished. In my fork
> the 'finished=true' was removed from the 'writeEndMark' method.
> {code}
> @Override
> public void close() throws IOException {
> if (!finished) {
> writeEndMark();
> flush();
> finished = true;
> }
> if (out != null) {
> out.close();
> out = null;
> }
> }
> {code}
> should be
> {code}
> @Override
> public void close() throws IOException {
> if (!finished) {
> // finish any pending data
> writeBlock();
> // write out the end mark
> writeEndMark();
> // mark the stream as finished
> finished = true;
> }
> if (out != null) {
> out.close();
> out = null;
> }
> }
> {code}
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)