summaryrefslogtreecommitdiffstats
path: root/controller-server
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2021-11-12 11:21:39 +0100
committerMartin Polden <mpolden@mpolden.no>2021-11-12 11:29:39 +0100
commitfab02119d34f9cdba4ad4bb3ba736b61f0d6e11d (patch)
treec9e8a1d8cad7a7c4c4bb0823ba5b41e09e964e3e /controller-server
parentccf1fa3639fa60ab775fdd0630bde5183d234a45 (diff)
Account for instance when computing container endpoints
Diffstat (limited to 'controller-server')
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/RoutingController.java8
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTest.java62
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/MetricsReporterTest.java2
3 files changed, 47 insertions, 25 deletions
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/RoutingController.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/RoutingController.java
index be533b0c53b..a6edff86895 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/RoutingController.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/RoutingController.java
@@ -243,7 +243,8 @@ public class RoutingController {
Instance instance = application.require(instanceName);
boolean registerLegacyNames = requiresLegacyNames(application.deploymentSpec(), instanceName);
Set<ContainerEndpoint> containerEndpoints = new HashSet<>();
- EndpointList endpoints = declaredEndpointsOf(application);
+ DeploymentId deployment = new DeploymentId(instance.id(), zone);
+ EndpointList endpoints = declaredEndpointsOf(application).targets(deployment);
EndpointList globalEndpoints = endpoints.scope(Endpoint.Scope.global);
// Add endpoints backed by a rotation, and register them in DNS if necessary
for (var assignedRotation : instance.rotations()) {
@@ -280,9 +281,7 @@ public class RoutingController {
}
// Add endpoints not backed by a rotation (i.e. other routing methods so that the config server always knows
// about global names, even when not using rotations)
- DeploymentId deployment = new DeploymentId(instance.id(), zone);
globalEndpoints.not().requiresRotation()
- .targets(deployment)
.groupingBy(Endpoint::cluster)
.forEach((clusterId, clusterEndpoints) -> {
containerEndpoints.add(new ContainerEndpoint(clusterId.value(),
@@ -291,8 +290,7 @@ public class RoutingController {
});
// Add application endpoints
EndpointList applicationEndpoints = endpoints.scope(Endpoint.Scope.application)
- .not().direct() // These are handled by RoutingPolicies
- .targets(deployment);
+ .not().direct(); // These are handled by RoutingPolicies
for (var endpoint : applicationEndpoints) {
Set<ZoneId> targetZones = endpoint.targets().stream()
.map(t -> t.deployment().zoneId())
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTest.java
index 1e8e444896f..9472801ef2c 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTest.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTest.java
@@ -6,6 +6,7 @@ import com.yahoo.component.Version;
import com.yahoo.config.application.api.DeploymentSpec;
import com.yahoo.config.application.api.ValidationId;
import com.yahoo.config.application.api.ValidationOverrides;
+import com.yahoo.config.provision.ApplicationId;
import com.yahoo.config.provision.AthenzDomain;
import com.yahoo.config.provision.AthenzService;
import com.yahoo.config.provision.CloudName;
@@ -233,35 +234,58 @@ public class ControllerTest {
@Test
public void testDnsUpdatesForGlobalEndpoint() {
- var context = tester.newDeploymentContext("tenant1", "app1", "default");
+ var betaContext = tester.newDeploymentContext("tenant1", "app1", "beta");
+ var defaultContext = tester.newDeploymentContext("tenant1", "app1", "default");
ApplicationPackage applicationPackage = new ApplicationPackageBuilder()
+ .instances("beta,default")
.endpoint("default", "foo")
.region("us-west-1")
.region("us-central-1") // Two deployments should result in each DNS alias being registered once
.build();
- context.submit(applicationPackage).deploy();
+ betaContext.submit(applicationPackage).deploy();
+
+ { // Expected rotation names are passed to beta instance deployments
+ Collection<Deployment> betaDeployments = betaContext.instance().deployments().values();
+ assertFalse(betaDeployments.isEmpty());
+ for (Deployment deployment : betaDeployments) {
+ assertEquals("Rotation names are passed to config server in " + deployment.zone(),
+ Set.of("rotation-id-01",
+ "beta--app1--tenant1.global.vespa.oath.cloud"),
+ tester.configServer().containerEndpointNames(betaContext.deploymentIdIn(deployment.zone())));
+ }
+ betaContext.flushDnsUpdates();
+ }
- Collection<Deployment> deployments = context.instance().deployments().values();
- assertFalse(deployments.isEmpty());
- for (Deployment deployment : deployments) {
- assertEquals("Rotation names are passed to config server in " + deployment.zone(),
- Set.of("rotation-id-01",
- "app1--tenant1.global.vespa.oath.cloud"),
- tester.configServer().containerEndpointNames(context.deploymentIdIn(deployment.zone())));
+ { // Expected rotation names are passed to default instance deployments
+ Collection<Deployment> defaultDeployments = defaultContext.instance().deployments().values();
+ assertFalse(defaultDeployments.isEmpty());
+ for (Deployment deployment : defaultDeployments) {
+ assertEquals("Rotation names are passed to config server in " + deployment.zone(),
+ Set.of("rotation-id-02",
+ "app1--tenant1.global.vespa.oath.cloud"),
+ tester.configServer().containerEndpointNames(defaultContext.deploymentIdIn(deployment.zone())));
+ }
+ defaultContext.flushDnsUpdates();
}
- context.flushDnsUpdates();
- assertEquals(1, tester.controllerTester().nameService().records().size());
+ Map<String, String> rotationCnames = Map.of("beta--app1--tenant1.global.vespa.oath.cloud", "rotation-fqdn-01.",
+ "app1--tenant1.global.vespa.oath.cloud", "rotation-fqdn-02.");
+ rotationCnames.forEach((cname, data) -> {
+ var record = tester.controllerTester().findCname(cname);
+ assertTrue(record.isPresent());
+ assertEquals(cname, record.get().name().asString());
+ assertEquals(data, record.get().data().asString());
+ });
- var record = tester.controllerTester().findCname("app1--tenant1.global.vespa.oath.cloud");
- assertTrue(record.isPresent());
- assertEquals("app1--tenant1.global.vespa.oath.cloud", record.get().name().asString());
- assertEquals("rotation-fqdn-01.", record.get().data().asString());
+ Map<ApplicationId, List<String>> globalDnsNamesByInstance = Map.of(betaContext.instanceId(), List.of("beta--app1--tenant1.global.vespa.oath.cloud"),
+ defaultContext.instanceId(), List.of("app1--tenant1.global.vespa.oath.cloud"));
- List<String> globalDnsNames = tester.controller().routing().readDeclaredEndpointsOf(context.instanceId())
- .scope(Endpoint.Scope.global)
- .mapToList(Endpoint::dnsName);
- assertEquals(List.of("app1--tenant1.global.vespa.oath.cloud"), globalDnsNames);
+ globalDnsNamesByInstance.forEach((instance, dnsNames) -> {
+ List<String> actualDnsNames = tester.controller().routing().readDeclaredEndpointsOf(instance)
+ .scope(Endpoint.Scope.global)
+ .mapToList(Endpoint::dnsName);
+ assertEquals("Global DNS names for " + instance, dnsNames, actualDnsNames);
+ });
}
@Test
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/MetricsReporterTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/MetricsReporterTest.java
index e65f6e087c5..7619cf71f1a 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/MetricsReporterTest.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/MetricsReporterTest.java
@@ -280,7 +280,7 @@ public class MetricsReporterTest {
context.submit(applicationPackage).deploy();
reporter.maintain();
- assertEquals("Deployment queues name services requests", 15, metrics.getMetric(MetricsReporter.NAME_SERVICE_REQUESTS_QUEUED).intValue());
+ assertEquals("Deployment queues name services requests", 6, metrics.getMetric(MetricsReporter.NAME_SERVICE_REQUESTS_QUEUED).intValue());
context.flushDnsUpdates();
reporter.maintain();