以apache-flume-1.7.0为例,
在TaildirSourceConfigurationConstants常数类中添加配置
public static final String SOURCE_RECURSIVE = "sourceRecursive";
public static final boolean DEFAULT_SOURCE_RECURSIVE = false;
TaildirSource类中
private boolean sourceRecurisive;
configure()方法中
sourceRecurisive=context.getBoolean(SOURCE_RECURSIVE,DEFAULT_SOURCE_RECURSIVE);
process -> reader.updateTailFiles->updateTailFiles-> taildir.getMatchingFiles()->getMatchingFiles->getMatchingFilesNoCache
因为需要传参,所以需要对以上方法重构
TaildirMatcher类
private List<File> getMatchingFilesNoCache(boolean recursive) {
if(recursive){
return getMatchingFilesNoCache();
}
List<File> result = Lists.newArrayList();
Queue<File> parentDirs = new ArrayBlockingQueue<>(20);
parentDirs.offer(parentDir);
while (parentDirs.size()>0){
File file = parentDirs.poll();
try (DirectoryStream<Path> stream = Files.newDirectoryStream(file.toPath(), fileFilter)) {
for (Path entry : stream) {
result.add(entry.toFile());
}
} catch (IOException e) {
logger.error("I/O exception occurred while listing parent directory. " +
"Files already matched will be returned. " + parentDir.toPath(), e);
}
File[] files = file.listFiles();
for (File file1 : files) {
if(file1.isDirectory()){
parentDirs.offer(file1);
}
}
}
return result;
}