From a9b7c9617870bd9e28127ff50f1f6ed58656e15a Mon Sep 17 00:00:00 2001 From: didfet Date: Fri, 5 Jun 2015 18:45:25 +0200 Subject: [PATCH] Fix bug #8. --- .../fetter/logstashforwarder/FileReader.java | 25 +++++++++++-------- .../fetter/logstashforwarder/FileState.java | 2 +- .../fetter/logstashforwarder/FileWatcher.java | 6 +++-- 3 files changed, 20 insertions(+), 13 deletions(-) diff --git a/src/main/java/info/fetter/logstashforwarder/FileReader.java b/src/main/java/info/fetter/logstashforwarder/FileReader.java index 39ce483..982340b 100644 --- a/src/main/java/info/fetter/logstashforwarder/FileReader.java +++ b/src/main/java/info/fetter/logstashforwarder/FileReader.java @@ -63,20 +63,25 @@ public class FileReader extends Reader { } private int readFile(FileState state, int spaceLeftInSpool) { - int eventListSizeBefore = eventList.size(); File file = state.getFile(); long pointer = state.getPointer(); - if(logger.isTraceEnabled()) { - logger.trace("File : " + file + " pointer : " + pointer); - logger.trace("Space left in spool : " + spaceLeftInSpool); - } - if(isCompressedFile(state)) { - pointer = file.length(); + if(state.isDeleted() || state.getRandomAccessFile() == null) { // Don't try to read this file + pointerMap.put(file, pointer); + return 0; } else { - pointer = readLines(state, spaceLeftInSpool); + int eventListSizeBefore = eventList.size(); + if(logger.isTraceEnabled()) { + logger.trace("File : " + file + " pointer : " + pointer); + logger.trace("Space left in spool : " + spaceLeftInSpool); + } + if(isCompressedFile(state)) { + pointer = file.length(); + } else { + pointer = readLines(state, spaceLeftInSpool); + } + pointerMap.put(file, pointer); + return eventList.size() - eventListSizeBefore; // Return number of events read } - pointerMap.put(file, pointer); - return eventList.size() - eventListSizeBefore; // Return number of events read } private boolean isCompressedFile(FileState state) { diff --git a/src/main/java/info/fetter/logstashforwarder/FileState.java b/src/main/java/info/fetter/logstashforwarder/FileState.java index e3623a7..5933100 100644 --- a/src/main/java/info/fetter/logstashforwarder/FileState.java +++ b/src/main/java/info/fetter/logstashforwarder/FileState.java @@ -64,7 +64,7 @@ public class FileState { private void setFileFromDirectoryAndName() throws FileNotFoundException { file = new File(directory + File.separator + fileName); if(file.exists()) { - randomAccessFile = new RandomAccessFile(file, "r"); + randomAccessFile = null; lastModified = file.lastModified(); size = file.length(); } else { diff --git a/src/main/java/info/fetter/logstashforwarder/FileWatcher.java b/src/main/java/info/fetter/logstashforwarder/FileWatcher.java index 5f0d9e9..2ed714f 100644 --- a/src/main/java/info/fetter/logstashforwarder/FileWatcher.java +++ b/src/main/java/info/fetter/logstashforwarder/FileWatcher.java @@ -314,6 +314,9 @@ public class FileWatcher { List markedList = null; for(File file : oldWatchMap.keySet()) { FileState state = oldWatchMap.get(file); + if(state.getRandomAccessFile() == null) { + state.setDeleted(); + } if(state.isDeleted()) { if(! file.exists()) { if(markedList == null) { @@ -328,8 +331,7 @@ public class FileWatcher { } if(markedList != null) { for(File file : markedList) { - FileState state = oldWatchMap.remove(file); - + oldWatchMap.remove(file); logger.trace("\tFile : " + file + " removed"); } }