didfet 10 tahun lalu
induk
melakukan
a9b7c96178

+ 15 - 10
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) {

+ 1 - 1
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 {

+ 4 - 2
src/main/java/info/fetter/logstashforwarder/FileWatcher.java

@@ -314,6 +314,9 @@ public class FileWatcher {
 		List<File> 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");
 			}
 		}