You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@flume.apache.org by "Muhammad Ehsan ul Haque (JIRA)" <ji...@apache.org> on 2014/02/09 15:54:20 UTC
[jira] [Created] (FLUME-2318) SpoolingDirectory is unable to handle
empty files
Muhammad Ehsan ul Haque created FLUME-2318:
----------------------------------------------
Summary: SpoolingDirectory is unable to handle empty files
Key: FLUME-2318
URL: https://issues.apache.org/jira/browse/FLUME-2318
Project: Flume
Issue Type: Bug
Components: Sinks+Sources
Affects Versions: v1.4.0
Reporter: Muhammad Ehsan ul Haque
Fix For: v1.4.0
Empty files should be returned as an empty event instead of no event.
h4. Scenario
>From the start consume files in this order
# f1: File with data or empty file
# f2: Empty File
# No file in spooling directory
h4. Expected Outcome
# channel.take() should return event with f1 data.
# channel.take() should return event with f2 data (empty data).
# channel.take() should return null.
h4. What happens
# channel.take() returns event with f1 data.
# channel.take() returns null.
# Exception is raised when the SpoolDirectorySource thread tries to read events from the ReliableSpoolingFileEventReader. Snippet of trace is
2014-02-09 15:46:35,832 (pool-1-thread-1) [INFO - org.apache.flume.client.avro.ReliableSpoolingFileEventReader.rollCurrentFile(ReliableSpoolingFileEventReader.java:346)] Preparing to move file /tmp/1391957195572-0/file1 to /tmp/1391957195572-0/file1.COMPLETED
2014-02-09 15:46:36,334 (pool-1-thread-1) [INFO - org.apache.flume.client.avro.ReliableSpoolingFileEventReader.readEvents(ReliableSpoolingFileEventReader.java:228)] Last read was never committed - resetting mark position.
2014-02-09 15:46:36,335 (pool-1-thread-1) [INFO - org.apache.flume.client.avro.ReliableSpoolingFileEventReader.rollCurrentFile(ReliableSpoolingFileEventReader.java:346)] Preparing to move file /tmp/1391957195572-0/file2 to /tmp/1391957195572-0/file2.COMPLETED
2014-02-09 15:46:36,839 (pool-1-thread-1) [ERROR - org.apache.flume.source.SpoolDirectorySource$SpoolDirectoryRunnable.run(SpoolDirectorySource.java:252)] FATAL: Spool Directory source null: { spoolDir: /tmp/1391957195572-0 }: Uncaught exception in SpoolDirectorySource thread. Restart or reconfigure Flume to continue processing.
java.lang.IllegalStateException: File should not roll when commit is outstanding.
at org.apache.flume.client.avro.ReliableSpoolingFileEventReader.readEvents(ReliableSpoolingFileEventReader.java:225)
at org.apache.flume.source.SpoolDirectorySource$SpoolDirectoryRunnable.run(SpoolDirectorySource.java:224)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:351)
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:178)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:178)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:722)
h4. Unit Test
In TestSpoolDirectorySource
{code}
@Test
public void testWithEmptyFile2()
throws InterruptedException, IOException {
Context context = new Context();
File f1 = new File(tmpDir.getAbsolutePath() + "/file1");
Files.write("some data".getBytes(), f1);
File f2 = new File(tmpDir.getAbsolutePath() + "/file2");
Files.write(new byte[0], f2);
context.put(SpoolDirectorySourceConfigurationConstants.SPOOL_DIRECTORY,
tmpDir.getAbsolutePath());
Configurables.configure(source, context);
source.start();
Thread.sleep(10);
for (int i=0; i<2; i++) {
Transaction txn = channel.getTransaction();
txn.begin();
Event e = channel.take();
txn.commit();
txn.close();
}
Transaction txn = channel.getTransaction();
txn.begin();
Assert.assertNull(channel.take());
txn.commit();
txn.close();
}
{code}
--
This message was sent by Atlassian JIRA
(v6.1.5#6160)