Will Droste created KAFKA-4745:
----------------------------------

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

Reply via email to