From 83bd7804654aff81692e322325592002a68c2949 Mon Sep 17 00:00:00 2001 From: Harald Musum Date: Fri, 3 Feb 2023 14:36:12 +0100 Subject: Add flag deciding if we should keep success files flag is false by default --- .../main/java/com/yahoo/search/logging/Spooler.java | 12 +++++++++--- .../java/com/yahoo/search/logging/SpoolerTest.java | 19 ++++++++++++++++--- 2 files changed, 25 insertions(+), 6 deletions(-) (limited to 'container-search') 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 c4fe858dffc..46f7fbb0b3c 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 @@ -52,16 +52,22 @@ public class Spooler { private final int maxEntriesPerFile; private final Clock clock; private final AtomicReference firstWriteTimestamp = new AtomicReference<>(); + private final boolean keepSuccessFiles; public Spooler(Clock clock) { - this(defaultSpoolPath, defaultMaxEntriesPerFile, clock); + this(clock, false); } - public Spooler(Path spoolPath, int maxEntriesPerFile, Clock clock) { + public Spooler(Clock clock, boolean keepSuccessFiles) { + this(defaultSpoolPath, defaultMaxEntriesPerFile, clock, keepSuccessFiles); + } + + public Spooler(Path spoolPath, int maxEntriesPerFile, Clock clock, boolean keepSuccessFiles) { this.spoolPath = spoolPath; this.maxEntriesPerFile = maxEntriesPerFile; this.clock = clock; this.fileNameBase.set(newFileNameBase(clock)); + this.keepSuccessFiles = keepSuccessFiles; firstWriteTimestamp.set(Instant.EPOCH); createDirs(spoolPath); } @@ -114,7 +120,7 @@ public class Spooler { throw new UncheckedIOException("Unable to process file " + f.toPath(), e); // TODO: Move to failures path } finally { - if (succcess) { + if (succcess && keepSuccessFiles) { Path file = f.toPath(); Path target = spoolPath.resolve(successesPath).resolve(f.toPath().relativize(file)).resolve(f.getName()); try { diff --git a/container-search/src/test/java/com/yahoo/search/logging/SpoolerTest.java b/container-search/src/test/java/com/yahoo/search/logging/SpoolerTest.java index bfcf3b5e3e5..eb5d7f85481 100644 --- a/container-search/src/test/java/com/yahoo/search/logging/SpoolerTest.java +++ b/container-search/src/test/java/com/yahoo/search/logging/SpoolerTest.java @@ -28,7 +28,7 @@ public class SpoolerTest { Path spoolDir = tempDir.resolve("spool"); int maxEntriesPerFile = 1; - Spooler spooler = new Spooler(spoolDir, maxEntriesPerFile, clock); + Spooler spooler = new Spooler(spoolDir, maxEntriesPerFile, clock, true); TestLogger logger = new TestLogger(spooler); assertTrue(sendEntry(logger, "Yo entry")); @@ -60,7 +60,7 @@ public class SpoolerTest { Path spoolDir = tempDir.resolve("spool"); int maxEntriesPerFile = 2; - Spooler spooler = new Spooler(spoolDir, maxEntriesPerFile, clock); + Spooler spooler = new Spooler(spoolDir, maxEntriesPerFile, clock, true); TestLogger logger = new TestLogger(spooler); assertTrue(sendEntry(logger, "Yo entry")); @@ -111,7 +111,7 @@ public class SpoolerTest { @Test public void failingToTransportIsRetried() throws IOException { Path spoolDir = tempDir.resolve("spool"); - Spooler spooler = new Spooler(spoolDir, 1, clock); + Spooler spooler = new Spooler(spoolDir, 1, clock, true); FailingToTransportSecondEntryLogger logger = new FailingToTransportSecondEntryLogger(spooler); assertTrue(sendEntry(logger, "Yo entry")); @@ -126,6 +126,19 @@ public class SpoolerTest { assertEquals(2, spooler.listFilesInPath(spooler.successesPath()).size()); } + @Test + public void noSuccessFiles() throws IOException { + Path spoolDir = tempDir.resolve("spool"); + boolean keepSuccessFiles = false; + Spooler spooler = new Spooler(spoolDir, 1, clock, keepSuccessFiles); + FailingToTransportSecondEntryLogger logger = new FailingToTransportSecondEntryLogger(spooler); + + assertTrue(sendEntry(logger, "Yo entry")); + logger.manualRun(); // Success for first message + assertEquals(0, spooler.listFilesInPath(spooler.successesPath()).size()); + } + + private boolean sendEntry(Logger logger, String x) { return logger.newEntry() .blob(x.getBytes()) -- cgit v1.2.3