summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBjørn Christian Seime <bjorncs@verizonmedia.com>2020-11-17 13:50:37 +0100
committerBjørn Christian Seime <bjorncs@verizonmedia.com>2020-11-17 13:53:44 +0100
commitafab4dbbb008ecd135b9a30b173ee3cf274f058b (patch)
tree5a1a8def385445e30a4aa17137cdd1c177045285
parentcdbf498c9182ac06bb21ce8ae7b745dd8c8f3c83 (diff)
Allow extra dimensions for request based metric dimensions
Remove metric context cache. I doubt it will have any significant impact on performance.
-rw-r--r--jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/JDiscFilterInvokerFilter.java3
-rw-r--r--jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/JDiscHttpServlet.java3
-rw-r--r--jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/JDiscServerConnector.java50
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);
- }
- }
-
}