diff options
author | Bjørn Christian Seime <bjorncs@verizonmedia.com> | 2020-11-17 13:50:37 +0100 |
---|---|---|
committer | Bjørn Christian Seime <bjorncs@verizonmedia.com> | 2020-11-17 13:53:44 +0100 |
commit | afab4dbbb008ecd135b9a30b173ee3cf274f058b (patch) | |
tree | 5a1a8def385445e30a4aa17137cdd1c177045285 | |
parent | cdbf498c9182ac06bb21ce8ae7b745dd8c8f3c83 (diff) |
Allow extra dimensions for request based metric dimensions
Remove metric context cache. I doubt it will have any significant impact on performance.
3 files changed, 13 insertions, 43 deletions
diff --git a/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/JDiscFilterInvokerFilter.java b/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/JDiscFilterInvokerFilter.java index f046ccd5439..e4dbccf1bcb 100644 --- a/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/JDiscFilterInvokerFilter.java +++ b/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/JDiscFilterInvokerFilter.java @@ -22,6 +22,7 @@ import javax.servlet.http.HttpServletResponseWrapper; import java.io.IOException; import java.io.PrintWriter; import java.net.URI; +import java.util.Map; import java.util.Optional; import java.util.concurrent.atomic.AtomicReference; @@ -133,7 +134,7 @@ class JDiscFilterInvokerFilter implements Filter { final AccessLogEntry accessLogEntry = null; // Not used in this context. return new HttpRequestDispatch(jDiscContext, accessLogEntry, - getConnector(request).getRequestMetricContext(request), + getConnector(request).createRequestMetricContext(request, Map.of()), request, response); } catch (IOException e) { throw throwUnchecked(e); diff --git a/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/JDiscHttpServlet.java b/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/JDiscHttpServlet.java index 8ffc6759ae7..60ecd449c15 100644 --- a/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/JDiscHttpServlet.java +++ b/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/JDiscHttpServlet.java @@ -13,6 +13,7 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.Enumeration; +import java.util.Map; import java.util.Set; import java.util.logging.Level; import java.util.logging.Logger; @@ -128,7 +129,7 @@ class JDiscHttpServlet extends HttpServlet { } private static Metric.Context getMetricContext(HttpServletRequest request) { - return JDiscServerConnector.fromRequest(request).getRequestMetricContext(request); + return JDiscServerConnector.fromRequest(request).createRequestMetricContext(request, Map.of()); } private static String formatAttributes(final HttpServletRequest request) { diff --git a/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/JDiscServerConnector.java b/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/JDiscServerConnector.java index 7681bc5077d..86841458b13 100644 --- a/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/JDiscServerConnector.java +++ b/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/JDiscServerConnector.java @@ -14,9 +14,7 @@ import java.net.Socket; import java.net.SocketException; import java.util.HashMap; import java.util.Map; -import java.util.Objects; import java.util.Optional; -import java.util.concurrent.ConcurrentHashMap; /** * @author bjorncs @@ -25,7 +23,6 @@ class JDiscServerConnector extends ServerConnector { public static final String REQUEST_ATTRIBUTE = JDiscServerConnector.class.getName(); private final Metric.Context metricCtx; - private final Map<RequestDimensions, Metric.Context> requestMetricContextCache = new ConcurrentHashMap<>(); private final ConnectionStatistics statistics; private final ConnectorConfig config; private final boolean tcpKeepAlive; @@ -70,20 +67,18 @@ class JDiscServerConnector extends ServerConnector { return metricCtx; } - public Metric.Context getRequestMetricContext(HttpServletRequest request) { + public Metric.Context createRequestMetricContext(HttpServletRequest request, Map<String, String> extraDimensions) { String method = request.getMethod(); String scheme = request.getScheme(); boolean clientAuthenticated = request.getAttribute(com.yahoo.jdisc.http.servlet.ServletRequest.SERVLET_REQUEST_X509CERT) != null; - var requestDimensions = new RequestDimensions(method, scheme, clientAuthenticated); - return requestMetricContextCache.computeIfAbsent(requestDimensions, ignored -> { - Map<String, Object> dimensions = createConnectorDimensions(listenPort, connectorName); - dimensions.put(MetricDefinitions.METHOD_DIMENSION, method); - dimensions.put(MetricDefinitions.SCHEME_DIMENSION, scheme); - dimensions.put(MetricDefinitions.CLIENT_AUTHENTICATED_DIMENSION, Boolean.toString(clientAuthenticated)); - String serverName = Optional.ofNullable(request.getServerName()).orElse("unknown"); - dimensions.put(MetricDefinitions.REQUEST_SERVER_NAME_DIMENSION, serverName); - return metric.createContext(dimensions); - }); + Map<String, Object> dimensions = createConnectorDimensions(listenPort, connectorName); + dimensions.put(MetricDefinitions.METHOD_DIMENSION, method); + dimensions.put(MetricDefinitions.SCHEME_DIMENSION, scheme); + dimensions.put(MetricDefinitions.CLIENT_AUTHENTICATED_DIMENSION, Boolean.toString(clientAuthenticated)); + String serverName = Optional.ofNullable(request.getServerName()).orElse("unknown"); + dimensions.put(MetricDefinitions.REQUEST_SERVER_NAME_DIMENSION, serverName); + dimensions.putAll(extraDimensions); + return metric.createContext(dimensions); } public static JDiscServerConnector fromRequest(ServletRequest request) { @@ -105,31 +100,4 @@ class JDiscServerConnector extends ServerConnector { return props; } - private static class RequestDimensions { - final String method; - final String scheme; - final boolean clientAuthenticated; - - RequestDimensions(String method, String scheme, boolean clientAuthenticated) { - this.method = method; - this.scheme = scheme; - this.clientAuthenticated = clientAuthenticated; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - RequestDimensions that = (RequestDimensions) o; - return clientAuthenticated == that.clientAuthenticated && - Objects.equals(method, that.method) && - Objects.equals(scheme, that.scheme); - } - - @Override - public int hashCode() { - return Objects.hash(method, scheme, clientAuthenticated); - } - } - } |