diff --git a/src/main/java/io/github/k_tomaszewski/eternaldb/FileLinesSpliterator.java b/src/main/java/io/github/k_tomaszewski/eternaldb/FileLinesSpliterator.java index f878bef..d522387 100644 --- a/src/main/java/io/github/k_tomaszewski/eternaldb/FileLinesSpliterator.java +++ b/src/main/java/io/github/k_tomaszewski/eternaldb/FileLinesSpliterator.java @@ -27,19 +27,15 @@ class FileLinesSpliterator implements Spliterator, AutoCloseable, ReadCo private static final Logger LOG = LoggerFactory.getLogger(FileLinesSpliterator.class); private static final BiPredicate IS_FILE_PREDICATE = (path, attributes) -> attributes.isRegularFile(); - final Path dataDir; final Stream pathStream; final Spliterator pathSpliterator; - final FileNamingStrategy fileNaming; volatile Stream fileLineStream; volatile Spliterator fileLineSpliterator; volatile Path currentPath; public FileLinesSpliterator(Path dataDir, Long minMillis, Long maxMillis, FileNamingStrategy fileNaming) throws IOException { - this.dataDir = dataDir; - pathStream = Files.find(dataDir, fileNaming.maxDirectoryDepth(), toDataFilePredicate(minMillis, maxMillis)); + pathStream = Files.find(dataDir, fileNaming.maxDirectoryDepth(), toDataFilePredicate(minMillis, maxMillis, fileNaming, dataDir)); pathSpliterator = pathStream.sorted().spliterator(); - this.fileNaming = fileNaming; } @Override @@ -102,7 +98,8 @@ private void closeDataFile() { currentPath = null; } - private BiPredicate toDataFilePredicate(Long minMillis, Long maxMillis) { + private static BiPredicate toDataFilePredicate(Long minMillis, Long maxMillis, + FileNamingStrategy fileNaming, Path dataDir) { BiPredicate predicate = IS_FILE_PREDICATE; if (minMillis != null || maxMillis != null) { Predicate fileNamePredicate = toFileNamePredicate(minMillis, maxMillis, fileNaming); diff --git a/src/test/java/io/github/k_tomaszewski/eternaldb/FileLinesSpliteratorTest.java b/src/test/java/io/github/k_tomaszewski/eternaldb/FileLinesSpliteratorTest.java index 8589f79..4e53f58 100644 --- a/src/test/java/io/github/k_tomaszewski/eternaldb/FileLinesSpliteratorTest.java +++ b/src/test/java/io/github/k_tomaszewski/eternaldb/FileLinesSpliteratorTest.java @@ -27,9 +27,12 @@ void shouldProvideLinesFromAllFilesKeepingTimeOrdering() throws IOException { db.write("E", toMillis(now.minusMonths(1))); db.write("F", toMillis(now.minusMonths(1).minusNanos(1000000))); + final long fromTs = toMillis(now.minusMonths(1).minusNanos(1000000)); + final long toTs = toMillis(now); + // when String result; - try (Stream linesStream = StreamUtil.stream(new FileLinesSpliterator(dataDir, null, null, new BasicFileNaming()), false)) { + try (Stream linesStream = StreamUtil.stream(new FileLinesSpliterator(dataDir, fromTs, toTs, new BasicFileNaming()), false)) { result = linesStream.map(line -> line.substring(line.indexOf('\t') + 2, line.length() - 1)) .collect(Collectors.joining()); }