[
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 <[email protected]>
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)