[ 
https://issues.apache.org/jira/browse/KAFKA-4745?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15859922#comment-15859922
 ] 

ASF GitHub Bot commented on KAFKA-4745:
---------------------------------------

GitHub user wdroste opened a pull request:

    https://github.com/apache/kafka/pull/2528

    KAFKA-4745 -Optimize close to remove unnecessary flush

    -Remove unnecessary 'flush', the underlying stream should handle it on 
close, also most apps flush before close.

You can merge this pull request into a Git repository by running:

    $ git pull https://github.com/wdroste/kafka trunk

Alternatively you can review and apply these changes as the patch at:

    https://github.com/apache/kafka/pull/2528.patch

To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:

    This closes #2528
    
----
commit d4a939e14879634be52976a92c55e0181b8addcb
Author: Will Droste <william.dro...@arris.com>
Date:   2017-02-09T18:00:37Z

    KAFKA-4745 -Remove unnecessary 'flush', the underlying stream should handle 
it on close, also most apps flush before close.

----


> 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)

Reply via email to