diff options
Diffstat (limited to 'container-core')
12 files changed, 32 insertions, 66 deletions
diff --git a/container-core/src/main/java/com/yahoo/container/handler/metrics/ErrorResponse.java b/container-core/src/main/java/com/yahoo/container/handler/metrics/ErrorResponse.java index b553763c2b5..650555bf427 100644 --- a/container-core/src/main/java/com/yahoo/container/handler/metrics/ErrorResponse.java +++ b/container-core/src/main/java/com/yahoo/container/handler/metrics/ErrorResponse.java @@ -1,6 +1,7 @@ // Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.container.handler.metrics; +import ai.vespa.json.Jackson; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; @@ -16,15 +17,13 @@ public class ErrorResponse extends JsonResponse { private static final Logger log = Logger.getLogger(ErrorResponse.class.getName()); - private static final ObjectMapper objectMapper = new ObjectMapper(); - public ErrorResponse(int code, String message) { super(code, asErrorJson(message != null ? message : "<null>")); } static String asErrorJson(String message) { try { - return objectMapper.writeValueAsString(Map.of("error", message)); + return Jackson.mapper().writeValueAsString(Map.of("error", message)); } catch (JsonProcessingException e) { log.log(WARNING, "Could not encode error message to json:", e); return "Could not encode error message to json, check the log for details."; diff --git a/container-core/src/main/java/com/yahoo/container/handler/metrics/HttpHandlerBase.java b/container-core/src/main/java/com/yahoo/container/handler/metrics/HttpHandlerBase.java index d0c1197b91e..d94a4e64bd3 100644 --- a/container-core/src/main/java/com/yahoo/container/handler/metrics/HttpHandlerBase.java +++ b/container-core/src/main/java/com/yahoo/container/handler/metrics/HttpHandlerBase.java @@ -1,8 +1,8 @@ // Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.container.handler.metrics; +import ai.vespa.json.Jackson; import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ArrayNode; import com.fasterxml.jackson.databind.node.ObjectNode; import com.yahoo.container.jdisc.HttpRequest; @@ -31,7 +31,6 @@ import static java.util.logging.Level.WARNING; */ public abstract class HttpHandlerBase extends ThreadedHttpRequestHandler implements CapabilityRequiringRequestHandler { - private static final ObjectMapper jsonMapper = new ObjectMapper(); private final Duration defaultTimeout; protected HttpHandlerBase(Executor executor) { @@ -85,6 +84,7 @@ public abstract class HttpHandlerBase extends ThreadedHttpRequestHandler impleme base.append(":").append(port); } String uriBase = base.toString(); + var jsonMapper = Jackson.mapper(); ArrayNode linkList = jsonMapper.createArrayNode(); for (String api : resources) { ObjectNode resource = jsonMapper.createObjectNode(); diff --git a/container-core/src/main/java/com/yahoo/container/jdisc/state/HostLifeGatherer.java b/container-core/src/main/java/com/yahoo/container/jdisc/state/HostLifeGatherer.java index 876c3657b9d..dff03f920b1 100644 --- a/container-core/src/main/java/com/yahoo/container/jdisc/state/HostLifeGatherer.java +++ b/container-core/src/main/java/com/yahoo/container/jdisc/state/HostLifeGatherer.java @@ -1,13 +1,11 @@ // Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.container.jdisc.state; +import ai.vespa.json.Jackson; import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ObjectNode; import com.yahoo.component.Vtag; -import java.io.IOException; -import java.nio.file.Path; import java.time.Instant; /** @@ -15,9 +13,8 @@ import java.time.Instant; */ public class HostLifeGatherer { - private static final ObjectMapper jsonMapper = new ObjectMapper(); - public static JsonNode getHostLifePacket() { + var jsonMapper = Jackson.mapper(); ObjectNode jsonObject = jsonMapper.createObjectNode(); jsonObject.put("timestamp", Instant.now().getEpochSecond()); jsonObject.put("application", "host_life"); diff --git a/container-core/src/main/java/com/yahoo/container/jdisc/state/MetricsPacketsHandler.java b/container-core/src/main/java/com/yahoo/container/jdisc/state/MetricsPacketsHandler.java index b94fadec213..a682dcd3965 100644 --- a/container-core/src/main/java/com/yahoo/container/jdisc/state/MetricsPacketsHandler.java +++ b/container-core/src/main/java/com/yahoo/container/jdisc/state/MetricsPacketsHandler.java @@ -1,6 +1,7 @@ // Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.container.jdisc.state; +import ai.vespa.json.Jackson; import ai.vespa.metrics.set.InfrastructureMetricSet; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonNode; @@ -51,7 +52,7 @@ import static com.yahoo.container.jdisc.state.StateHandler.getSnapshotProviderOr */ public class MetricsPacketsHandler extends AbstractRequestHandler { - private static final ObjectMapper jsonMapper = new ObjectMapper(); + private static final ObjectMapper jsonMapper = Jackson.mapper(); static final String APPLICATION_KEY = "application"; static final String TIMESTAMP_KEY = "timestamp"; @@ -226,8 +227,7 @@ public class MetricsPacketsHandler extends AbstractRequestHandler { MetricValue value = metric.getValue(); if (value instanceof CountMetric) { metrics.put(name + ".count", ((CountMetric) value).getCount()); - } else if (value instanceof GaugeMetric) { - GaugeMetric gauge = (GaugeMetric) value; + } else if (value instanceof GaugeMetric gauge) { metrics.put(name + ".average", sanitizeDouble(gauge.getAverage())) .put(name + ".last", sanitizeDouble(gauge.getLast())) .put(name + ".max", sanitizeDouble(gauge.getMax())) @@ -252,8 +252,7 @@ public class MetricsPacketsHandler extends AbstractRequestHandler { MetricValue value = metric.getValue(); if (value instanceof CountMetric) { metrics.put(name + ".count", ((CountMetric) value).getCount()); - } else if (value instanceof GaugeMetric) { - GaugeMetric gauge = (GaugeMetric) value; + } else if (value instanceof GaugeMetric gauge) { metrics.put(name + ".average", sanitizeDouble(gauge.getAverage())); metrics.put(name + ".last", sanitizeDouble(gauge.getLast())); metrics.put(name + ".max", sanitizeDouble(gauge.getMax())); @@ -262,7 +261,7 @@ public class MetricsPacketsHandler extends AbstractRequestHandler { metrics.put(name + ".count", gauge.getCount()); if (gauge.getPercentiles().isPresent()) { for (Tuple2<String, Double> prefixAndValue : gauge.getPercentiles().get()) { - metrics.put(name + "." + prefixAndValue.first + "percentile", prefixAndValue.second.doubleValue()); + metrics.put(name + "." + prefixAndValue.first + "percentile", prefixAndValue.second); } } } else { diff --git a/container-core/src/main/java/com/yahoo/container/jdisc/state/StateHandler.java b/container-core/src/main/java/com/yahoo/container/jdisc/state/StateHandler.java index 045b13e5d63..281acfdce0f 100644 --- a/container-core/src/main/java/com/yahoo/container/jdisc/state/StateHandler.java +++ b/container-core/src/main/java/com/yahoo/container/jdisc/state/StateHandler.java @@ -1,6 +1,7 @@ // Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.container.jdisc.state; +import ai.vespa.json.Jackson; import ai.vespa.metrics.ContainerMetrics; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonNode; @@ -45,7 +46,7 @@ import static com.yahoo.container.jdisc.state.JsonUtil.sanitizeDouble; */ public class StateHandler extends AbstractRequestHandler implements CapabilityRequiringRequestHandler { - private static final ObjectMapper jsonMapper = new ObjectMapper(); + private static final ObjectMapper jsonMapper = Jackson.mapper(); public static final String STATE_API_ROOT = "/state/v1"; private static final String METRICS_PATH = "metrics"; @@ -73,7 +74,7 @@ public class StateHandler extends AbstractRequestHandler implements CapabilityRe static SnapshotProvider getSnapshotProviderOrThrow(ComponentRegistry<SnapshotProvider> preprocessors) { List<SnapshotProvider> allPreprocessors = preprocessors.allComponents(); - if (allPreprocessors.size() > 0) { + if (!allPreprocessors.isEmpty()) { return allPreprocessors.get(0); } else { throw new IllegalArgumentException("At least one snapshot provider is required."); diff --git a/container-core/src/main/java/com/yahoo/container/logging/JSONFormatter.java b/container-core/src/main/java/com/yahoo/container/logging/JSONFormatter.java index adf44e8b384..13964931779 100644 --- a/container-core/src/main/java/com/yahoo/container/logging/JSONFormatter.java +++ b/container-core/src/main/java/com/yahoo/container/logging/JSONFormatter.java @@ -1,10 +1,10 @@ // Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.container.logging; +import ai.vespa.json.Jackson; import com.fasterxml.jackson.core.JsonEncoding; import com.fasterxml.jackson.core.JsonFactory; import com.fasterxml.jackson.core.JsonGenerator; -import com.fasterxml.jackson.databind.ObjectMapper; import com.yahoo.yolean.trace.TraceNode; import java.io.IOException; @@ -32,10 +32,10 @@ public class JSONFormatter implements LogWriter<RequestLogEntry> { private final JsonFactory generatorFactory; - private static Logger logger = Logger.getLogger(JSONFormatter.class.getName()); + private static final Logger logger = Logger.getLogger(JSONFormatter.class.getName()); public JSONFormatter() { - generatorFactory = new JsonFactory(new ObjectMapper()); + generatorFactory = new JsonFactory(Jackson.mapper()); } @Override diff --git a/container-core/src/main/java/com/yahoo/container/logging/JsonConnectionLogWriter.java b/container-core/src/main/java/com/yahoo/container/logging/JsonConnectionLogWriter.java index 407fa7860f6..0ca26671446 100644 --- a/container-core/src/main/java/com/yahoo/container/logging/JsonConnectionLogWriter.java +++ b/container-core/src/main/java/com/yahoo/container/logging/JsonConnectionLogWriter.java @@ -1,10 +1,10 @@ // Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.container.logging; +import ai.vespa.json.Jackson; import com.fasterxml.jackson.core.JsonEncoding; import com.fasterxml.jackson.core.JsonFactory; import com.fasterxml.jackson.core.JsonGenerator; -import com.fasterxml.jackson.databind.ObjectMapper; import com.yahoo.container.logging.ConnectionLogEntry.SslHandshakeFailure.ExceptionEntry; import java.io.IOException; @@ -20,7 +20,7 @@ import java.util.Optional; */ class JsonConnectionLogWriter implements LogWriter<ConnectionLogEntry> { - private final JsonFactory jsonFactory = new JsonFactory(new ObjectMapper()); + private final JsonFactory jsonFactory = new JsonFactory(Jackson.mapper()); @Override public void write(ConnectionLogEntry record, OutputStream outputStream) throws IOException { diff --git a/container-core/src/main/java/com/yahoo/jdisc/http/filter/util/FilterUtils.java b/container-core/src/main/java/com/yahoo/jdisc/http/filter/util/FilterUtils.java index 1698613a264..665254ad2ca 100644 --- a/container-core/src/main/java/com/yahoo/jdisc/http/filter/util/FilterUtils.java +++ b/container-core/src/main/java/com/yahoo/jdisc/http/filter/util/FilterUtils.java @@ -1,23 +1,18 @@ // Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.jdisc.http.filter.util; +import ai.vespa.json.Jackson; import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ObjectNode; import com.fasterxml.jackson.databind.node.TextNode; import com.yahoo.jdisc.Response; import com.yahoo.jdisc.handler.ContentChannel; import com.yahoo.jdisc.handler.ResponseHandler; import com.yahoo.jdisc.http.Cookie; -import com.yahoo.jdisc.http.filter.DiscFilterRequest; -import com.yahoo.jdisc.http.server.jetty.RequestUtils; import java.io.UncheckedIOException; -import java.net.URI; -import java.net.URISyntaxException; import java.nio.ByteBuffer; import java.util.List; -import java.util.Optional; /** * Helper methods for auth0/okta request filters. @@ -26,17 +21,6 @@ import java.util.Optional; */ public class FilterUtils { - private static final ObjectMapper mapper = new ObjectMapper(); - - public static boolean isDifferentOrigin(DiscFilterRequest request) { - try { - String origin = request.getHeader("Origin"); - if (origin != null && !URI.create(origin).getHost().equals(request.getServerName())) - return true; - } catch (RuntimeException ignored) { } - return false; - } - public static void sendRedirectResponse(ResponseHandler handler, List<Cookie> cookies, String location) { Response response = createResponse(Response.Status.FOUND, cookies); response.headers().add("Location", location); @@ -47,6 +31,7 @@ public class FilterUtils { Response response = createResponse(code, cookies); ContentChannel contentChannel = handler.handleResponse(response); try { + var mapper = Jackson.mapper(); ObjectNode jsonNode = mapper.createObjectNode(); jsonNode.set("message", TextNode.valueOf(message)); byte[] jsonBytes = mapper.writerWithDefaultPrettyPrinter().writeValueAsBytes(jsonNode); @@ -64,15 +49,4 @@ public class FilterUtils { return response; } - public static URI createUriFromRequest(DiscFilterRequest request, String path, Optional<String> hostOverride) { - try { - // Prefer local port as observed by client over local listen port - int port = Optional.ofNullable((Integer)request.getAttribute(RequestUtils.JDICS_REQUEST_PORT)) - .orElse(request.getUri().getPort()); - String host = hostOverride.orElse(request.getServerName()); - return new URI(request.getScheme(), null, host, port, path, null, null); - } catch (URISyntaxException e) { - throw new RuntimeException(e); - } - } } diff --git a/container-core/src/test/java/com/yahoo/container/handler/metrics/MetricsV2HandlerTest.java b/container-core/src/test/java/com/yahoo/container/handler/metrics/MetricsV2HandlerTest.java index 2fa55a3dd59..e1acf4708c1 100644 --- a/container-core/src/test/java/com/yahoo/container/handler/metrics/MetricsV2HandlerTest.java +++ b/container-core/src/test/java/com/yahoo/container/handler/metrics/MetricsV2HandlerTest.java @@ -1,8 +1,8 @@ // Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.container.handler.metrics; +import ai.vespa.json.Jackson; import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ArrayNode; import com.github.tomakehurst.wiremock.junit5.WireMockExtension; import com.yahoo.container.jdisc.RequestHandlerTestDriver; @@ -33,8 +33,6 @@ import static org.junit.jupiter.api.Assertions.*; */ public class MetricsV2HandlerTest { - private static final ObjectMapper jsonMapper = new ObjectMapper(); - private static final String URI_BASE = "http://localhost"; private static final String V2_URI = URI_BASE + V2_PATH; @@ -80,7 +78,7 @@ public class MetricsV2HandlerTest { @Test void v2_response_contains_values_uri() throws Exception { String response = testDriver.sendRequest(V2_URI).readAll(); - JsonNode root = jsonMapper.readTree(response); + JsonNode root = Jackson.mapper().readTree(response); assertTrue(root.has("resources")); ArrayNode resources = (ArrayNode) root.get("resources"); @@ -100,7 +98,7 @@ public class MetricsV2HandlerTest { @Test void invalid_path_yields_error_response() throws Exception { String response = testDriver.sendRequest(V2_URI + "/invalid").readAll(); - JsonNode root = jsonMapper.readTree(response); + JsonNode root = Jackson.mapper().readTree(response); assertTrue(root.has("error")); assertTrue(root.get("error").textValue().startsWith("No content")); } @@ -127,7 +125,7 @@ public class MetricsV2HandlerTest { private JsonNode getResponseAsJson(String consumer) { String response = testDriver.sendRequest(VALUES_URI + consumerQuery(consumer)).readAll(); try { - return jsonMapper.readTree(response); + return Jackson.mapper().readTree(response); } catch (IOException e) { fail("Failed to create json object: " + e.getMessage()); throw new RuntimeException(e); diff --git a/container-core/src/test/java/com/yahoo/container/handler/metrics/PrometheusV1HandlerTest.java b/container-core/src/test/java/com/yahoo/container/handler/metrics/PrometheusV1HandlerTest.java index e206188dcd8..9e0f9685328 100644 --- a/container-core/src/test/java/com/yahoo/container/handler/metrics/PrometheusV1HandlerTest.java +++ b/container-core/src/test/java/com/yahoo/container/handler/metrics/PrometheusV1HandlerTest.java @@ -1,8 +1,8 @@ // Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.container.handler.metrics; +import ai.vespa.json.Jackson; import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ArrayNode; import com.github.tomakehurst.wiremock.junit5.WireMockExtension; import com.yahoo.container.jdisc.RequestHandlerTestDriver; @@ -28,8 +28,6 @@ import static org.junit.jupiter.api.Assertions.assertTrue; */ public class PrometheusV1HandlerTest { - private static final ObjectMapper jsonMapper = new ObjectMapper(); - private static final String URI_BASE = "http://localhost"; private static final String V1_URI = URI_BASE + PrometheusV1Handler.V1_PATH; @@ -76,7 +74,7 @@ public class PrometheusV1HandlerTest { @Test void v1_response_contains_values_uri() throws Exception { String response = testDriver.sendRequest(V1_URI).readAll(); - JsonNode root = jsonMapper.readTree(response); + JsonNode root = Jackson.mapper().readTree(response); assertTrue(root.has("resources")); ArrayNode resources = (ArrayNode) root.get("resources"); @@ -96,7 +94,7 @@ public class PrometheusV1HandlerTest { @Test void invalid_path_yields_error_response() throws Exception { String response = testDriver.sendRequest(V1_URI + "/invalid").readAll(); - JsonNode root = jsonMapper.readTree(response); + JsonNode root = Jackson.mapper().readTree(response); assertTrue(root.has("error")); assertTrue(root.get("error").textValue().startsWith("No content")); } diff --git a/container-core/src/test/java/com/yahoo/container/jdisc/state/MetricsPacketsHandlerTest.java b/container-core/src/test/java/com/yahoo/container/jdisc/state/MetricsPacketsHandlerTest.java index 3eeb8cb7e80..e0251b81463 100644 --- a/container-core/src/test/java/com/yahoo/container/jdisc/state/MetricsPacketsHandlerTest.java +++ b/container-core/src/test/java/com/yahoo/container/jdisc/state/MetricsPacketsHandlerTest.java @@ -1,8 +1,8 @@ // Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.container.jdisc.state; +import ai.vespa.json.Jackson; import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; import com.yahoo.container.jdisc.RequestHandlerTestDriver; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -238,7 +238,7 @@ public class MetricsPacketsHandlerTest extends StateHandlerTestBase { private List<JsonNode> toJsonPackets(String response) throws Exception { List<JsonNode> jsonPackets = new ArrayList<>(); String[] packets = response.split(PACKET_SEPARATOR); - ObjectMapper mapper = new ObjectMapper(); + var mapper = Jackson.mapper(); for (String packet : packets) { jsonPackets.add(mapper.readTree(mapper.getFactory().createParser(packet))); } diff --git a/container-core/src/test/java/com/yahoo/container/jdisc/state/StateHandlerTestBase.java b/container-core/src/test/java/com/yahoo/container/jdisc/state/StateHandlerTestBase.java index 56a6d49f398..4b6ce82a940 100644 --- a/container-core/src/test/java/com/yahoo/container/jdisc/state/StateHandlerTestBase.java +++ b/container-core/src/test/java/com/yahoo/container/jdisc/state/StateHandlerTestBase.java @@ -1,8 +1,8 @@ // Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.container.jdisc.state; +import ai.vespa.json.Jackson; import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; import com.yahoo.component.ComponentId; import com.yahoo.component.provider.ComponentRegistry; import com.yahoo.container.core.ApplicationMetadataConfig; @@ -60,7 +60,7 @@ public class StateHandlerTestBase { } JsonNode requestAsJson(String requestUri) throws Exception { - ObjectMapper mapper = new ObjectMapper(); + var mapper = Jackson.mapper(); return mapper.readTree(mapper.getFactory().createParser(requestAsString(requestUri))); } |