Skip to content

Commit

Permalink
Fixed bug (NPE) in FileLinesSpliterator
Browse files Browse the repository at this point in the history
  • Loading branch information
k-tomaszewski committed Jan 17, 2025
1 parent 63d8414 commit 21b8775
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -27,19 +27,15 @@ class FileLinesSpliterator implements Spliterator<String>, AutoCloseable, ReadCo
private static final Logger LOG = LoggerFactory.getLogger(FileLinesSpliterator.class);
private static final BiPredicate<Path, BasicFileAttributes> IS_FILE_PREDICATE = (path, attributes) -> attributes.isRegularFile();

final Path dataDir;
final Stream<Path> pathStream;
final Spliterator<Path> pathSpliterator;
final FileNamingStrategy fileNaming;
volatile Stream<String> fileLineStream;
volatile Spliterator<String> 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
Expand Down Expand Up @@ -102,7 +98,8 @@ private void closeDataFile() {
currentPath = null;
}

private BiPredicate<Path, BasicFileAttributes> toDataFilePredicate(Long minMillis, Long maxMillis) {
private static BiPredicate<Path, BasicFileAttributes> toDataFilePredicate(Long minMillis, Long maxMillis,
FileNamingStrategy fileNaming, Path dataDir) {
BiPredicate<Path, BasicFileAttributes> predicate = IS_FILE_PREDICATE;
if (minMillis != null || maxMillis != null) {
Predicate<String> fileNamePredicate = toFileNamePredicate(minMillis, maxMillis, fileNaming);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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<String> linesStream = StreamUtil.stream(new FileLinesSpliterator(dataDir, null, null, new BasicFileNaming()), false)) {
try (Stream<String> 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());
}
Expand Down

0 comments on commit 21b8775

Please sign in to comment.