Yoel Cabo Lopez created STORM-2218: -------------------------------------- Summary: When using Block Compression in the SequenceFileBolt some Tuples may be acked before the data is flushed to HDFS Key: STORM-2218 URL: https://issues.apache.org/jira/browse/STORM-2218 Project: Apache Storm Issue Type: Bug Components: storm-hdfs Reporter: Yoel Cabo Lopez Priority: Minor
In AbstractHDFSBolt, the tuples are being acked after calling syncAllWriters(), that basically ends up calling doSync() in every writer. In the case of the SequenceFileWriter, that is the same as calling the hsync() method of SequenceFile.Writer: https://github.com/apache/storm/blob/master/external/storm-hdfs/src/main/java/org/apache/storm/hdfs/common/SequenceFileWriter.java#L52 The problem in the case of the block compression is that if there is a compression block opened it is not flushed with hsync(), instead it is necessary to call the sync() method, that adds a sync marker, compresses the block and writes it to the output stream that is flushed with hsync(). This is also done automatically when a certain size is reached in the compression block, but we cannot have certainty of the data being flushed until we call sync() and then hsync(): https://github.com/apache/hadoop/blob/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/io/SequenceFile.java#L1549 The easy fix is just add a call to sync() in case the writer is using Block Compression. I'm concerned about the impact that would have in the block size, but I think it is the only way of writing the data reliably in this case. -- This message was sent by Atlassian JIRA (v6.3.4#6332)