From 1004d3b0d27e4ba48071e5f72b433b4db184dce9 Mon Sep 17 00:00:00 2001 From: sullis Date: Fri, 23 Feb 2024 03:41:44 -0800 Subject: [PATCH] bugfix: reduce enum array allocation in QueryLogger (#12478) Motivation: reduce enum array allocation in QueryLogger Modifications: cache QueryLogEntry.values() in a static variable Result: Java enum .values() method is invoked exactly once Additional context: https://www.gamlor.info/wordpress/2017/08/javas-enum-values-hidden-allocations/ --- .../java/org/apache/pinot/broker/querylog/QueryLogger.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pinot-broker/src/main/java/org/apache/pinot/broker/querylog/QueryLogger.java b/pinot-broker/src/main/java/org/apache/pinot/broker/querylog/QueryLogger.java index e708a9edb702..a1ccd63e6c34 100644 --- a/pinot-broker/src/main/java/org/apache/pinot/broker/querylog/QueryLogger.java +++ b/pinot-broker/src/main/java/org/apache/pinot/broker/querylog/QueryLogger.java @@ -45,6 +45,7 @@ public class QueryLogger { private static final Logger LOGGER = LoggerFactory.getLogger(QueryLogger.class); + private static final QueryLogEntry[] QUERY_LOG_ENTRY_VALUES = QueryLogEntry.values(); private final int _maxQueryLengthToLog; private final RateLimiter _logRateLimiter; @@ -82,7 +83,7 @@ public void log(QueryLogParams params) { } final StringBuilder queryLogBuilder = new StringBuilder(); - for (QueryLogEntry value : QueryLogEntry.values()) { + for (QueryLogEntry value : QUERY_LOG_ENTRY_VALUES) { value.format(queryLogBuilder, this, params); queryLogBuilder.append(','); }