diff options
author | Bjørn Christian Seime <bjorncs@verizonmedia.com> | 2021-02-03 14:17:50 +0100 |
---|---|---|
committer | Bjørn Christian Seime <bjorncs@verizonmedia.com> | 2021-02-03 14:17:50 +0100 |
commit | 9bd5a12c87d0a92d37b2c75a9530e96e104b7291 (patch) | |
tree | 7873008e74a284c2d02b76d4d3f3a0da3ad41508 /jdisc_http_service | |
parent | b8b85fab6fe1fd0f4f2d3ea363e60c0f230a4e89 (diff) |
Make queue size of log file handler configurable
Add new config parameter for connection log and request log.
Scale queue size on vcpu in config model.
Use LinkedBlockingQueue instead of ArrayBlockingQueue.
Diffstat (limited to 'jdisc_http_service')
6 files changed, 20 insertions, 19 deletions
diff --git a/jdisc_http_service/src/main/java/com/yahoo/container/logging/AccessLogHandler.java b/jdisc_http_service/src/main/java/com/yahoo/container/logging/AccessLogHandler.java index 4c156e2705f..376be879965 100644 --- a/jdisc_http_service/src/main/java/com/yahoo/container/logging/AccessLogHandler.java +++ b/jdisc_http_service/src/main/java/com/yahoo/container/logging/AccessLogHandler.java @@ -3,9 +3,6 @@ package com.yahoo.container.logging; import com.yahoo.container.core.AccessLogConfig; -import java.util.logging.Level; -import java.util.logging.LogRecord; - /** * @author Bjorn Borud */ @@ -14,7 +11,7 @@ class AccessLogHandler { private final LogFileHandler<RequestLogEntry> logFileHandler; AccessLogHandler(AccessLogConfig.FileHandler config, LogWriter<RequestLogEntry> logWriter) { - logFileHandler = new LogFileHandler<>(toCompression(config), config.pattern(), config.rotation(), config.symlink(), logWriter); + logFileHandler = new LogFileHandler<>(toCompression(config), config.pattern(), config.rotation(), config.symlink(), config.queueSize(), logWriter); } public void log(RequestLogEntry entry) { diff --git a/jdisc_http_service/src/main/java/com/yahoo/container/logging/ConnectionLogHandler.java b/jdisc_http_service/src/main/java/com/yahoo/container/logging/ConnectionLogHandler.java index 2a36e251d24..418fe47d3e0 100644 --- a/jdisc_http_service/src/main/java/com/yahoo/container/logging/ConnectionLogHandler.java +++ b/jdisc_http_service/src/main/java/com/yahoo/container/logging/ConnectionLogHandler.java @@ -2,21 +2,19 @@ package com.yahoo.container.logging; -import java.util.logging.Level; -import java.util.logging.LogRecord; - /** * @author mortent */ class ConnectionLogHandler { private final LogFileHandler<ConnectionLogEntry> logFileHandler; - public ConnectionLogHandler(String clusterName, LogWriter<ConnectionLogEntry> logWriter) { + public ConnectionLogHandler(String clusterName, int queueSize, LogWriter<ConnectionLogEntry> logWriter) { logFileHandler = new LogFileHandler<>( LogFileHandler.Compression.ZSTD, String.format("logs/vespa/qrs/ConnectionLog.%s.%s", clusterName, "%Y%m%d%H%M%S"), "0 60 ...", String.format("ConnectionLog.%s", clusterName), + queueSize, logWriter); } diff --git a/jdisc_http_service/src/main/java/com/yahoo/container/logging/FileConnectionLog.java b/jdisc_http_service/src/main/java/com/yahoo/container/logging/FileConnectionLog.java index 968ba74b4f2..3d09f193864 100644 --- a/jdisc_http_service/src/main/java/com/yahoo/container/logging/FileConnectionLog.java +++ b/jdisc_http_service/src/main/java/com/yahoo/container/logging/FileConnectionLog.java @@ -17,7 +17,7 @@ public class FileConnectionLog extends AbstractComponent implements ConnectionLo @Inject public FileConnectionLog(ConnectionLogConfig config) { - logHandler = new ConnectionLogHandler(config.cluster(), new JsonConnectionLogWriter()); + logHandler = new ConnectionLogHandler(config.cluster(), config.queueSize(), new JsonConnectionLogWriter()); } @Override 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 7839a13b0ca..5aca804ba64 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 @@ -20,10 +20,11 @@ import java.nio.file.Path; import java.nio.file.Paths; import java.util.ArrayList; import java.util.Optional; -import java.util.concurrent.ArrayBlockingQueue; +import java.util.concurrent.BlockingQueue; import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; +import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.TimeUnit; import java.util.logging.Level; import java.util.logging.Logger; @@ -40,13 +41,13 @@ class LogFileHandler <LOGTYPE> { enum Compression {NONE, GZIP, ZSTD} private final static Logger logger = Logger.getLogger(LogFileHandler.class.getName()); - private final ArrayBlockingQueue<Operation<LOGTYPE>> logQueue = new ArrayBlockingQueue<>(10000); + private final BlockingQueue<Operation<LOGTYPE>> logQueue; final LogThread<LOGTYPE> logThread; @FunctionalInterface private interface Pollable<T> { Operation<T> poll() throws InterruptedException; } - LogFileHandler(Compression compression, String filePattern, String rotationTimes, String symlinkName, LogWriter<LOGTYPE> logWriter) { - this(compression, filePattern, calcTimesMinutes(rotationTimes), symlinkName, logWriter); + LogFileHandler(Compression compression, String filePattern, String rotationTimes, String symlinkName, int queueSize, LogWriter<LOGTYPE> logWriter) { + this(compression, filePattern, calcTimesMinutes(rotationTimes), symlinkName, queueSize, logWriter); } LogFileHandler( @@ -54,7 +55,9 @@ class LogFileHandler <LOGTYPE> { String filePattern, long[] rotationTimes, String symlinkName, + int queueSize, LogWriter<LOGTYPE> logWriter) { + this.logQueue = new LinkedBlockingQueue<>(queueSize); this.logThread = new LogThread<LOGTYPE>(logWriter, filePattern, compression, rotationTimes, symlinkName, this::poll); this.logThread.start(); } diff --git a/jdisc_http_service/src/main/resources/configdefinitions/container.logging.connection-log.def b/jdisc_http_service/src/main/resources/configdefinitions/container.logging.connection-log.def index 3a2d49120c9..0606598aec7 100644 --- a/jdisc_http_service/src/main/resources/configdefinitions/container.logging.connection-log.def +++ b/jdisc_http_service/src/main/resources/configdefinitions/container.logging.connection-log.def @@ -1,4 +1,7 @@ namespace=container.logging # Name of the cluster -cluster string
\ No newline at end of file +cluster string + +# Max queue length of file handler +queueSize int default=2048
\ No newline at end of file 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 013f42cd5b0..7ae46f50492 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 @@ -43,7 +43,7 @@ public class LogFileHandlerTestCase { String pattern = root.getAbsolutePath() + "/logfilehandlertest.%Y%m%d%H%M%S"; long[] rTimes = {1000, 2000, 10000}; - LogFileHandler<String> h = new LogFileHandler<>(Compression.NONE, pattern, rTimes, null, new StringLogWriter()); + LogFileHandler<String> h = new LogFileHandler<>(Compression.NONE, pattern, rTimes, null, 2048, new StringLogWriter()); long now = System.currentTimeMillis(); long millisPerDay = 60*60*24*1000; long tomorrowDays = (now / millisPerDay) +1; @@ -65,7 +65,7 @@ public class LogFileHandlerTestCase { File logFile = temporaryFolder.newFile("testLogFileG1.txt"); //create logfilehandler - LogFileHandler<String> h = new LogFileHandler<>(Compression.NONE, logFile.getAbsolutePath(), "0 5 ...", null, new StringLogWriter()); + LogFileHandler<String> h = new LogFileHandler<>(Compression.NONE, logFile.getAbsolutePath(), "0 5 ...", null, 2048, new StringLogWriter()); //write log h.publish("testDeleteFileFirst1"); @@ -78,7 +78,7 @@ public class LogFileHandlerTestCase { File logFile = temporaryFolder.newFile("testLogFileG2.txt"); //create logfilehandler - LogFileHandler<String> h = new LogFileHandler<>(Compression.NONE, logFile.getAbsolutePath(), "0 5 ...", null, new StringLogWriter()); + LogFileHandler<String> h = new LogFileHandler<>(Compression.NONE, logFile.getAbsolutePath(), "0 5 ...", null, 2048, new StringLogWriter()); //write log h.publish("testDeleteFileDuringLogging1"); @@ -104,7 +104,7 @@ public class LogFileHandlerTestCase { } }; LogFileHandler<String> handler = new LogFileHandler<>( - Compression.NONE, root.getAbsolutePath() + "/logfilehandlertest.%Y%m%d%H%M%S%s", new long[]{0}, "symlink", new StringLogWriter()); + Compression.NONE, root.getAbsolutePath() + "/logfilehandlertest.%Y%m%d%H%M%S%s", new long[]{0}, "symlink", 2048, new StringLogWriter()); String message = formatter.format(new LogRecord(Level.INFO, "test")); handler.publishAndWait(message); @@ -150,7 +150,7 @@ public class LogFileHandlerTestCase { File root = temporaryFolder.newFolder("testcompression" + compression.name()); LogFileHandler<String> h = new LogFileHandler<>( - compression, root.getAbsolutePath() + "/logfilehandlertest.%Y%m%d%H%M%S%s", new long[]{0}, null, new StringLogWriter()); + compression, root.getAbsolutePath() + "/logfilehandlertest.%Y%m%d%H%M%S%s", new long[]{0}, null, 2048, new StringLogWriter()); int logEntries = 10000; for (int i = 0; i < logEntries; i++) { h.publish("test"); |