in src/main/java/com/uber/rss/tools/FileDescriptorStressTest.java [36:77]
public void run() {
int filesPerDir = 1000;
int dirCount = (int)Math.ceil(((double)fileCount)/filesPerDir);
System.out.println(String.format("Creating %s files with %s directories inside %s", fileCount, dirCount, rootDir));
List<FileOutputStream> fileStreams = new ArrayList<>();
try {
for (int i = 0; i < dirCount; i++) {
Path dirPath = Paths.get(rootDir, "dir" + i);
dirPath.toFile().mkdirs();
dirPath.toFile().deleteOnExit();
System.out.println(String.format("Creating files under %s, current file descriptors: %s", dirPath.toAbsolutePath(), SystemUtils.getFileDescriptorCount()));
for (int j = 0; j < filesPerDir; j++) {
if (fileStreams.size() >= fileCount) {
break;
}
Path filePath = Paths.get(dirPath.toString(), "file" + j);
filePath.toFile().deleteOnExit();
try {
FileOutputStream stream = new FileOutputStream(filePath.toString(), true);
fileStreams.add(stream);
if (stream.getChannel().position() == 0) {
stream.write(0);
stream.flush();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
} finally {
System.out.println(String.format("Created %s files, current file descriptors: %s", fileStreams.size(), SystemUtils.getFileDescriptorCount()));
fileStreams.forEach(t-> {
try {
t.close();
} catch (IOException e) {
e.printStackTrace();
}
});
}
}