summaryrefslogtreecommitdiffstats
path: root/jdisc_http_service
diff options
context:
space:
mode:
authorAndreas Eriksen <andreer@verizonmedia.com>2021-02-25 14:37:09 +0100
committerGitHub <noreply@github.com>2021-02-25 14:37:09 +0100
commitf8860affa5d88eafb99f3d16a8c33ba5fbd6b4a9 (patch)
treed5330dbbfcb0bfae2c11c299dc1a636b8aec9af7 /jdisc_http_service
parentb17daad2cbff98d1cff1133f6f88c605b07fd001 (diff)
compress previous log file on startup (#16674)
Diffstat (limited to 'jdisc_http_service')
-rw-r--r--jdisc_http_service/src/main/java/com/yahoo/container/logging/LogFileHandler.java12
-rw-r--r--jdisc_http_service/src/test/java/com/yahoo/container/logging/LogFileHandlerTestCase.java24
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",