From 8c20acd50f36f475f34f9699bf45f45241d7b4da Mon Sep 17 00:00:00 2001 From: Henning Baldersheim Date: Wed, 10 Oct 2018 13:29:05 +0200 Subject: LogFileDB must ensure directory exists. --- .../src/main/java/com/yahoo/log/LogFileDb.java | 14 ++++++++++--- .../src/test/java/com/yahoo/log/LogFileDbTest.java | 23 +++++++++++----------- 2 files changed, 23 insertions(+), 14 deletions(-) diff --git a/vespalog/src/main/java/com/yahoo/log/LogFileDb.java b/vespalog/src/main/java/com/yahoo/log/LogFileDb.java index d0fa64805bf..4d26f7c0da9 100644 --- a/vespalog/src/main/java/com/yahoo/log/LogFileDb.java +++ b/vespalog/src/main/java/com/yahoo/log/LogFileDb.java @@ -4,6 +4,7 @@ package com.yahoo.log; import static java.nio.charset.StandardCharsets.UTF_8; import static java.nio.file.StandardOpenOption.*; +import java.io.File; import java.io.OutputStream; import java.nio.file.Files; import java.nio.file.Path; @@ -28,12 +29,18 @@ public class LogFileDb { } private static OutputStream metaFile() throws java.io.IOException { - String fn = getDefaults().underVespaHome(DBDIR + "logfiles." + dayStamp()); + File dir = new File(getDefaults().underVespaHome(DBDIR)); + if (!dir.exists()) { + if (!dir.mkdirs()) { + System.err.println("Failed creating logfiledb directory '" + dir.getPath() + "'."); + } + } + String fn = dir + "logfiles." + dayStamp(); Path path = Paths.get(fn); return Files.newOutputStream(path, CREATE, APPEND); } - public static void nowLoggingTo(String filename) { + public static boolean nowLoggingTo(String filename) { if (filename.contains("\n")) { throw new IllegalArgumentException("Cannot use filename with newline: "+filename); } @@ -44,7 +51,8 @@ public class LogFileDb { out.write(data); } catch (java.io.IOException e) { System.err.println("Saving meta-data about logfile "+filename+" failed: "+e); - // ignore + return false; } + return true; } } diff --git a/vespalog/src/test/java/com/yahoo/log/LogFileDbTest.java b/vespalog/src/test/java/com/yahoo/log/LogFileDbTest.java index 4dd7bd0978c..021a12774e9 100644 --- a/vespalog/src/test/java/com/yahoo/log/LogFileDbTest.java +++ b/vespalog/src/test/java/com/yahoo/log/LogFileDbTest.java @@ -3,8 +3,12 @@ package com.yahoo.log; import java.io.File; import static com.yahoo.vespa.defaults.Defaults.getDefaults; + +import com.yahoo.io.IOUtils; import org.junit.Test; +import static org.junit.Assert.assertTrue; + /** * @author arnej */ @@ -14,16 +18,13 @@ public class LogFileDbTest { public void canSave() { System.err.println("VH: "+System.getenv("VESPA_HOME")); File dir = new File(getDefaults().underVespaHome(LogFileDb.DBDIR)); - dir.mkdirs(); - if (dir.isDirectory()) { - System.err.println("using directory: "+dir); - new File(getDefaults().underVespaHome("logs/extra")).mkdirs(); - String fn = getDefaults().underVespaHome("logs/extra/foo-bar.log"); - LogFileDb.nowLoggingTo(fn); - fn = getDefaults().underVespaHome("logs/extra/stamped-1.log"); - LogFileDb.nowLoggingTo(fn); - } else { - System.err.println("cannot create directory: "+dir); - } + assertTrue(!dir.exists() || IOUtils.recursiveDeleteDir(dir)); + System.err.println("using directory: "+dir); + File extraDir = new File(getDefaults().underVespaHome("logs/extra")); + assertTrue(!extraDir.exists() || IOUtils.recursiveDeleteDir(extraDir)); + String fn = getDefaults().underVespaHome("logs/extra/foo-bar.log"); + assertTrue(LogFileDb.nowLoggingTo(fn)); + fn = getDefaults().underVespaHome("logs/extra/stamped-1.log"); + assertTrue(LogFileDb.nowLoggingTo(fn)); } } -- cgit v1.2.3