diff options
author | Andreas Eriksen <andreer@verizonmedia.com> | 2021-02-25 14:37:09 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-02-25 14:37:09 +0100 |
commit | f8860affa5d88eafb99f3d16a8c33ba5fbd6b4a9 (patch) | |
tree | d5330dbbfcb0bfae2c11c299dc1a636b8aec9af7 /jdisc_http_service/src | |
parent | b17daad2cbff98d1cff1133f6f88c605b07fd001 (diff) |
compress previous log file on startup (#16674)
Diffstat (limited to 'jdisc_http_service/src')
-rw-r--r-- | jdisc_http_service/src/main/java/com/yahoo/container/logging/LogFileHandler.java | 12 | ||||
-rw-r--r-- | jdisc_http_service/src/test/java/com/yahoo/container/logging/LogFileHandlerTestCase.java | 24 |
2 files changed, 34 insertions, 2 deletions
diff --git a/jdisc_http_service/src/main/java/com/yahoo/container/logging/LogFileHandler.java b/jdisc_http_service/src/main/java/com/yahoo/container/logging/LogFileHandler.java index 3e257813b5e..0f2a9e42eb8 100644 --- a/jdisc_http_service/src/main/java/com/yahoo/container/logging/LogFileHandler.java +++ b/jdisc_http_service/src/main/java/com/yahoo/container/logging/LogFileHandler.java @@ -366,6 +366,7 @@ class LogFileHandler <LOGTYPE> { throw new RuntimeException("Couldn't open log file '" + fileName + "'", e); } + if(oldFileName == null) oldFileName = getOldFileNameFromSymlink(); // To compress previous file, if so configured createSymlinkToCurrentFile(); nextRotationTime = 0; //figure it out later (lazy evaluation) @@ -465,6 +466,15 @@ class LogFileHandler <LOGTYPE> { } } + private String getOldFileNameFromSymlink() { + if(symlinkName == null) return null; + try { + return Paths.get(fileName).resolveSibling(symlinkName).toRealPath().toString(); + } catch (IOException e) { + return null; + } + } + private static final long lengthOfDayMillis = 24 * 60 * 60 * 1000; private static long timeOfDayMillis(long time) { return time % lengthOfDayMillis; @@ -475,8 +485,6 @@ class LogFileHandler <LOGTYPE> { private static class Operation<LOGTYPE> { enum Type {log, flush, close, rotate} - ; - final Type type; final Optional<LOGTYPE> log; diff --git a/jdisc_http_service/src/test/java/com/yahoo/container/logging/LogFileHandlerTestCase.java b/jdisc_http_service/src/test/java/com/yahoo/container/logging/LogFileHandlerTestCase.java index 8f78530327e..dad8f5e3f90 100644 --- a/jdisc_http_service/src/test/java/com/yahoo/container/logging/LogFileHandlerTestCase.java +++ b/jdisc_http_service/src/test/java/com/yahoo/container/logging/LogFileHandlerTestCase.java @@ -125,6 +125,30 @@ public class LogFileHandlerTestCase { } @Test(timeout = /*5 minutes*/300_000) + public void compresses_previous_log_file() throws InterruptedException, IOException { + File root = temporaryFolder.newFolder("compressespreviouslogfile"); + LogFileHandler<String> firstHandler = new LogFileHandler<>( + Compression.ZSTD, root.getAbsolutePath() + "/compressespreviouslogfile.%Y%m%d%H%M%S%s", new long[]{0}, "symlink", 2048, "thread-name", new StringLogWriter()); + firstHandler.publishAndWait("test"); + firstHandler.shutdown(); + + assertThat(Files.size(Paths.get(firstHandler.getFileName()))).isEqualTo(5); + assertThat(root.toPath().resolve("symlink").toRealPath().toString()).isEqualTo(firstHandler.getFileName()); + + LogFileHandler<String> secondHandler = new LogFileHandler<>( + Compression.ZSTD, root.getAbsolutePath() + "/compressespreviouslogfile.%Y%m%d%H%M%S%s", new long[]{0}, "symlink", 2048, "thread-name", new StringLogWriter()); + secondHandler.publishAndWait("test"); + secondHandler.rotateNow(); + + assertThat(root.toPath().resolve("symlink").toRealPath().toString()).isEqualTo(secondHandler.getFileName()); + + while (Files.exists(root.toPath().resolve(firstHandler.getFileName()))) Thread.sleep(1); + + assertThat(Files.exists(Paths.get(firstHandler.getFileName() + ".zst"))).isTrue(); + secondHandler.shutdown(); + } + + @Test(timeout = /*5 minutes*/300_000) public void testcompression_gzip() throws InterruptedException, IOException { testcompression( Compression.GZIP, "gz", |