diff options
author | Harald Musum <musum@yahooinc.com> | 2022-10-19 22:56:11 +0200 |
---|---|---|
committer | Harald Musum <musum@yahooinc.com> | 2022-10-19 22:56:11 +0200 |
commit | 949d2498fe3ab83f8758dadf9cc0919d29a0147b (patch) | |
tree | 1b324a1f573395317e07adc7f756d85153c9bca3 /container-search/src/main/java/com/yahoo/search | |
parent | fe8b8d1f1434aa84736432ba93f3c4543e21a885 (diff) |
Synchronize when accesing or changing file name
Also start counters on 0
Diffstat (limited to 'container-search/src/main/java/com/yahoo/search')
-rw-r--r-- | container-search/src/main/java/com/yahoo/search/logging/Spooler.java | 18 |
1 files changed, 9 insertions, 9 deletions
diff --git a/container-search/src/main/java/com/yahoo/search/logging/Spooler.java b/container-search/src/main/java/com/yahoo/search/logging/Spooler.java index 39f088c4ee4..c4fe858dffc 100644 --- a/container-search/src/main/java/com/yahoo/search/logging/Spooler.java +++ b/container-search/src/main/java/com/yahoo/search/logging/Spooler.java @@ -36,7 +36,7 @@ public class Spooler { private static final Comparator<File> ordering = new TimestampCompare(); private static final int defaultMaxEntriesPerFile = 100; // Maximum delay between first write to a file and when we should close file and move it for further processing - static final Duration maxDelayAfterFirstWrite = Duration.ofSeconds(10); + static final Duration maxDelayAfterFirstWrite = Duration.ofSeconds(5); private Path processingPath; private Path readyPath; @@ -44,9 +44,9 @@ public class Spooler { private Path successesPath; // Number of next entry to be written to the current file - AtomicInteger entryCounter = new AtomicInteger(1); - AtomicLong fileNameBase = new AtomicLong(1); - AtomicInteger fileCounter = new AtomicInteger(1); + AtomicInteger entryCounter = new AtomicInteger(0); + AtomicLong fileNameBase = new AtomicLong(0); + AtomicInteger fileCounter = new AtomicInteger(0); private final Path spoolPath; private final int maxEntriesPerFile; @@ -172,20 +172,20 @@ public class Spooler { switchFileIfNeeded(file, fileName); } - private void switchFileIfNeeded(Path file, String fileName) throws IOException { + private synchronized void switchFileIfNeeded(Path file, String fileName) throws IOException { if (file.toFile().exists() - && (entryCounter.get() > maxEntriesPerFile || firstWriteTimestamp.get().plus(maxDelayAfterFirstWrite).isBefore(clock.instant()))) { + && (entryCounter.get() >= maxEntriesPerFile || firstWriteTimestamp.get().plus(maxDelayAfterFirstWrite).isBefore(clock.instant()))) { Path target = spoolPath.resolve(readyPath).resolve(file.relativize(file)).resolve(fileName); - log.log(Level.INFO, "Finished writing file " + file + " with " + entryCounter.get() + "entries, moving it to " + target); + log.log(Level.INFO, "Finished writing file " + file + " with " + entryCounter.get() + " entries, moving it to " + target); Files.move(file, target); entryCounter.set(1); - fileNameBase.set(newFileNameBase(clock)); fileCounter.incrementAndGet(); + fileNameBase.set(newFileNameBase(clock)); firstWriteTimestamp.set(Instant.EPOCH); } } - String currentFileName() { + synchronized String currentFileName() { return fileNameBase.get() + "-" + fileCounter; } |