diff options
4 files changed, 26 insertions, 15 deletions
diff --git a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/http/ValuesFetcher.java b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/http/ValuesFetcher.java index b316a620a9b..037fca95588 100644 --- a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/http/ValuesFetcher.java +++ b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/http/ValuesFetcher.java @@ -10,6 +10,7 @@ import ai.vespa.metricsproxy.service.VespaServices; import java.time.Instant; import java.util.List; +import java.util.Optional; import java.util.logging.Logger; import java.util.stream.Collectors; @@ -65,12 +66,14 @@ public class ValuesFetcher { public static ConsumerId getConsumerOrDefault(String requestedConsumer, MetricsConsumers consumers) { if (requestedConsumer == null) return defaultMetricsConsumerId; - ConsumerId consumerId = toConsumerId(requestedConsumer); - if (! consumers.getAllConsumers().contains(consumerId)) { - log.info("No consumer with id '" + requestedConsumer + "' - using the default consumer instead."); - return defaultMetricsConsumerId; - } - return consumerId; + Optional<ConsumerId> consumerId = consumers.getAllConsumers().stream() + .filter(consumer -> consumer.id.equalsIgnoreCase(requestedConsumer)) + .findFirst(); + + if (consumerId.isPresent()) return consumerId.get(); + + log.info("No consumer with id '" + requestedConsumer + "' - using the default consumer instead."); + return defaultMetricsConsumerId; } } diff --git a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/metric/model/ConsumerId.java b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/metric/model/ConsumerId.java index 9ec22154627..12da0f7dcea 100644 --- a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/metric/model/ConsumerId.java +++ b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/metric/model/ConsumerId.java @@ -9,7 +9,9 @@ import java.util.Objects; public class ConsumerId { public final String id; - private ConsumerId(String id) { this.id = id; } + private ConsumerId(String id) { + this.id = Objects.requireNonNull(id); + } public static ConsumerId toConsumerId(String id) { return new ConsumerId(id); } diff --git a/metrics-proxy/src/test/java/ai/vespa/metricsproxy/http/metrics/MetricsHandlerTestBase.java b/metrics-proxy/src/test/java/ai/vespa/metricsproxy/http/metrics/MetricsHandlerTestBase.java index 1c6a09c3ee0..b6521a89ce7 100644 --- a/metrics-proxy/src/test/java/ai/vespa/metricsproxy/http/metrics/MetricsHandlerTestBase.java +++ b/metrics-proxy/src/test/java/ai/vespa/metricsproxy/http/metrics/MetricsHandlerTestBase.java @@ -13,6 +13,7 @@ import org.junit.Ignore; import org.junit.Test; import java.io.IOException; +import java.util.Locale; import static ai.vespa.metricsproxy.metric.dimensions.PublicDimensions.INTERNAL_SERVICE_ID; import static ai.vespa.metricsproxy.metric.dimensions.PublicDimensions.REASON; @@ -151,6 +152,16 @@ public abstract class MetricsHandlerTestBase<MODEL> extends HttpHandlerTestBase assertEquals("custom-val", dummy1Metrics.dimensions.get(REASON)); } + @Test + public void consumer_name_is_case_insensitive() { + GenericJsonModel jsonModel = getResponseAsGenericJsonModel(CUSTOM_CONSUMER.toUpperCase(Locale.ROOT)); + GenericService dummyService = jsonModel.services.get(0); + GenericMetrics dummy0Metrics = getMetricsForService("dummy0", dummyService); + + // If name was case-sensitive, this would be the default value. + assertEquals("custom-val", dummy0Metrics.dimensions.get(REASON)); + } + private static GenericMetrics getMetricsForService(String serviceInstance, GenericService service) { for (var metrics : service.metrics) { if (getServiceIdDimension(metrics).equals(serviceInstance)) diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/Nodes.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/Nodes.java index 41a23ac21ff..d641f59eafb 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/Nodes.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/Nodes.java @@ -132,9 +132,7 @@ public class Nodes { illegal("Cannot add " + node + ": Child nodes need to be allocated"); Optional<Node> existing = node(node.hostname()); if (existing.isPresent()) - illegal("Cannot add " + node + ": A node with this name already exists (" + - existing.get() + ", " + existing.get().history() + "). Node to be added: " + - node + ", " + node.history()); + illegal("Cannot add " + node + ": A node with this name already exists"); } return db.addNodesInState(nodes.asList(), Node.State.reserved, Agent.system); } @@ -291,16 +289,13 @@ public class Nodes { List<Node> nodesToDirty = (nodeToDirty.type().isHost() ? Stream.concat(list().childrenOf(hostname).asList().stream(), Stream.of(nodeToDirty)) : - Stream.of(nodeToDirty)) - .filter(node -> node.state() != Node.State.dirty) - .collect(Collectors.toList()); + Stream.of(nodeToDirty)).filter(node -> node.state() != Node.State.dirty).toList(); List<String> hostnamesNotAllowedToDirty = nodesToDirty.stream() .filter(node -> node.state() != Node.State.provisioned) .filter(node -> node.state() != Node.State.failed) .filter(node -> node.state() != Node.State.parked) .filter(node -> node.state() != Node.State.breakfixed) - .map(Node::hostname) - .collect(Collectors.toList()); + .map(Node::hostname).toList(); if ( ! hostnamesNotAllowedToDirty.isEmpty()) illegal("Could not deallocate " + nodeToDirty + ": " + hostnamesNotAllowedToDirty + " are not in states [provisioned, failed, parked, breakfixed]"); |