[
https://issues.apache.org/jira/browse/KAFKA-4745?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15858450#comment-15858450
]
Will Droste commented on KAFKA-4745:
------------------------------------
Excellent thanks for the quick reply, next time I'll check the latest must of
been on a tag.
IMHO I would not call 'flush' there because the underlying OutputStream should
finish the stream based on the close. If they correctly abide by the spec.. It
should not be required however if the design decision here is to be
conservative I totally understand. I often flush and close at the application
layer to be sure.
> 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
>
> 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)