summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2018-09-21 11:02:43 +0200
committerMartin Polden <mpolden@mpolden.no>2018-09-21 11:05:22 +0200
commita46f1e46ed09a7b09107c35e6abd2edc4d58d6df (patch)
treebb344e343dff7f54eabc8cd7225447c103bba433
parent65e3b39f715917fdd158218070efde5a8ee93a19 (diff)
Pass rotation FQDN to metrics service
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/MetricsService.java4
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/DeploymentMetricsMaintainer.java16
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/MetricsServiceMock.java23
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/DeploymentMetricsMaintainerTest.java8
4 files changed, 34 insertions, 17 deletions
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/MetricsService.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/MetricsService.java
index ff0628ccccc..7265273d0d0 100644
--- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/MetricsService.java
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/MetricsService.java
@@ -21,6 +21,10 @@ public interface MetricsService {
DeploymentMetrics getDeploymentMetrics(ApplicationId application, ZoneId zone);
// TODO: Remove default once implementation catches up
+ /**
+ * Get status for a global rotation
+ * @param rotationName The fully qualified domain name of the rotation
+ */
default Map<HostName, RotationStatus> getRotationStatus(String rotationName) {
return Collections.emptyMap();
}
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/DeploymentMetricsMaintainer.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/DeploymentMetricsMaintainer.java
index 73bc29ed47e..6ea9d548367 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/DeploymentMetricsMaintainer.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/DeploymentMetricsMaintainer.java
@@ -90,14 +90,14 @@ public class DeploymentMetricsMaintainer extends Maintainer {
/** Get global rotation status for application */
private Map<HostName, RotationStatus> rotationStatus(Application application) {
- return application.rotation()
- .map(rotation -> controller().metricsService().getRotationStatus(rotation.id().asString()))
- .map(rotationStatus -> {
- Map<HostName, RotationStatus> result = new TreeMap<>();
- rotationStatus.forEach((hostname, status) -> result.put(hostname, from(status)));
- return result;
- })
- .orElseGet(Collections::emptyMap);
+ return applications.rotationRepository().getRotation(application)
+ .map(rotation -> controller().metricsService().getRotationStatus(rotation.name()))
+ .map(rotationStatus -> {
+ Map<HostName, RotationStatus> result = new TreeMap<>();
+ rotationStatus.forEach((hostname, status) -> result.put(hostname, from(status)));
+ return result;
+ })
+ .orElseGet(Collections::emptyMap);
}
private static RotationStatus from(com.yahoo.vespa.hosted.controller.api.integration.routing.RotationStatus status) {
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/MetricsServiceMock.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/MetricsServiceMock.java
index d3b5fdf9415..474af154b09 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/MetricsServiceMock.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/MetricsServiceMock.java
@@ -16,20 +16,31 @@ import java.util.Map;
public class MetricsServiceMock implements MetricsService {
private final Map<String, Double> metrics = new HashMap<>();
- private final Map<HostName, RotationStatus> rotationStatus = new HashMap<>();
+ private final Map<String, Map<HostName, RotationStatus>> rotationStatus = new HashMap<>();
+
+ public MetricsServiceMock addRotation(String rotationName) {
+ rotationStatus.put(rotationName, new HashMap<>());
+ return this;
+ }
public MetricsServiceMock setMetric(String key, Double value) {
metrics.put(key, value);
return this;
}
- public MetricsServiceMock setRotationIn(String hostname) {
- rotationStatus.put(HostName.from(hostname), RotationStatus.IN);
+ public MetricsServiceMock setZoneIn(String rotationName, String vipName) {
+ if (!rotationStatus.containsKey(rotationName)) {
+ throw new IllegalArgumentException("Unknown rotation: " + rotationName);
+ }
+ rotationStatus.get(rotationName).put(HostName.from(vipName), RotationStatus.IN);
return this;
}
- public MetricsServiceMock setRotationOut(String hostname) {
- rotationStatus.put(HostName.from(hostname), RotationStatus.OUT);
+ public MetricsServiceMock setZoneOut(String rotationName, String vipName) {
+ if (!rotationStatus.containsKey(rotationName)) {
+ throw new IllegalArgumentException("Unknown rotation: " + rotationName);
+ }
+ rotationStatus.get(rotationName).put(HostName.from(vipName), RotationStatus.OUT);
return this;
}
@@ -58,7 +69,7 @@ public class MetricsServiceMock implements MetricsService {
@Override
public Map<HostName, RotationStatus> getRotationStatus(String rotationName) {
- return rotationStatus;
+ return rotationStatus.get(rotationName);
}
}
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/DeploymentMetricsMaintainerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/DeploymentMetricsMaintainerTest.java
index 91958cf838e..e11440a372c 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/DeploymentMetricsMaintainerTest.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/DeploymentMetricsMaintainerTest.java
@@ -108,20 +108,22 @@ public class DeploymentMetricsMaintainerTest {
Supplier<Application> app = () -> tester.application(application.id());
Supplier<Deployment> deployment1 = () -> app.get().deployments().get(zone1);
Supplier<Deployment> deployment2 = () -> app.get().deployments().get(zone2);
+ String assignedRotation = "rotation-fqdn-01";
+ tester.controllerTester().metricsService().addRotation(assignedRotation);
// No status gathered yet
assertEquals(RotationStatus.unknown, app.get().rotationStatus(deployment1.get()));
assertEquals(RotationStatus.unknown, app.get().rotationStatus(deployment2.get()));
// One rotation out, one in
- metricsService.setRotationIn("proxy.prod.us-west-1.vip.test");
- metricsService.setRotationOut("proxy.prod.us-east-3.vip.test");
+ metricsService.setZoneIn(assignedRotation, "proxy.prod.us-west-1.vip.test");
+ metricsService.setZoneOut(assignedRotation,"proxy.prod.us-east-3.vip.test");
maintainer.maintain();
assertEquals(RotationStatus.in, app.get().rotationStatus(deployment1.get()));
assertEquals(RotationStatus.out, app.get().rotationStatus(deployment2.get()));
// All rotations in
- metricsService.setRotationIn("proxy.prod.us-east-3.vip.test");
+ metricsService.setZoneIn(assignedRotation,"proxy.prod.us-east-3.vip.test");
maintainer.maintain();
assertEquals(RotationStatus.in, app.get().rotationStatus(deployment1.get()));
assertEquals(RotationStatus.in, app.get().rotationStatus(deployment2.get()));