Denes Arvay created FLUME-3085:
----------------------------------

             Summary: HDFS Sink can skip flushing some BucketWriters, might 
lead to data loss
                 Key: FLUME-3085
                 URL: https://issues.apache.org/jira/browse/FLUME-3085
             Project: Flume
          Issue Type: Bug
          Components: Sinks+Sources
    Affects Versions: 1.7.0
            Reporter: Denes Arvay
            Assignee: Denes Arvay
            Priority: Critical


The {{HDFSEventSink.process()}} is already prepared for a rare race condition, 
namely when the BucketWriter acquired in [line 
389|https://github.com/apache/flume/blob/trunk/flume-ng-sinks/flume-hdfs-sink/src/main/java/org/apache/flume/sink/hdfs/HDFSEventSink.java#L389]
 gets closed by an other thread (e.g. because the {{idleTimeout}} or the 
{{rollInterval}}) before the {{append()}} is called in [line 
406|https://github.com/apache/flume/blob/trunk/flume-ng-sinks/flume-hdfs-sink/src/main/java/org/apache/flume/sink/hdfs/HDFSEventSink.java#L406].
If this is the case the {{BucketWriter.append()}} call throws a 
{{BucketClosedException}} and the sink creates a new {{BucketWriter}} instance 
and appends to it.
But this newly created instance won't be added to the {{writers}} list, which 
means that it won't be flushed after the processing loop finished: 
https://github.com/apache/flume/blob/trunk/flume-ng-sinks/flume-hdfs-sink/src/main/java/org/apache/flume/sink/hdfs/HDFSEventSink.java#L429

This has multiple consequences:
- unflushed data might get lost
- the {{BucketWriter}}'s {{idleAction}} won't be scheduled 
(https://github.com/apache/flume/blob/trunk/flume-ng-sinks/flume-hdfs-sink/src/main/java/org/apache/flume/sink/hdfs/BucketWriter.java#L450),
 which means that it won't be closed nor renamed if the idle timeout is the 
only trigger for closing the file.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Reply via email to