diff options
author | Martin Polden <mpolden@mpolden.no> | 2019-04-15 11:52:21 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-04-15 11:52:21 +0100 |
commit | 8ddfcb4da9ef67c5ffb728a87b631285458c5279 (patch) | |
tree | 45e9b2be283fc76761c9044ba6d1c55ab59a6870 /controller-server | |
parent | bfe7f7d715a303eec90192a561a13cefa6a79e5b (diff) | |
parent | 1ccc2d44e1370def0d609b1fb490a4ee103965ef (diff) |
Merge pull request #9132 from vespa-engine/mpolden/include-rotation-id-in-deploy
Include rotation ID in rotation CNAMEs passed to config server
Diffstat (limited to 'controller-server')
3 files changed, 24 insertions, 1 deletions
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java index 4c5be570a02..b94475fc9b5 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java @@ -58,6 +58,7 @@ import com.yahoo.vespa.hosted.controller.deployment.DeploymentSteps; import com.yahoo.vespa.hosted.controller.deployment.DeploymentTrigger; import com.yahoo.vespa.hosted.controller.persistence.CuratorDb; import com.yahoo.vespa.hosted.controller.rotation.Rotation; +import com.yahoo.vespa.hosted.controller.rotation.RotationId; import com.yahoo.vespa.hosted.controller.rotation.RotationLock; import com.yahoo.vespa.hosted.controller.rotation.RotationRepository; import com.yahoo.vespa.hosted.controller.security.AccessControl; @@ -325,7 +326,10 @@ public class ApplicationController { // Assign global rotation application = withRotation(application, zone); Application app = application.get(); + // Include global DNS names cnames = app.endpointsIn(controller.system()).asList().stream().map(Endpoint::dnsName).collect(Collectors.toSet()); + // Include rotation ID to ensure that deployment can respond to health checks with rotation ID as Host header + app.rotation().map(RotationId::asString).ifPresent(cnames::add); // Update application with information from application package if ( ! preferOldestVersion && ! application.get().deploymentJobs().deployedInternally() 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 ada5be83876..4322dae3b62 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 @@ -12,6 +12,7 @@ import com.yahoo.config.provision.InstanceName; import com.yahoo.config.provision.RegionName; import com.yahoo.config.provision.SystemName; import com.yahoo.config.provision.TenantName; +import com.yahoo.config.provision.zone.ZoneId; import com.yahoo.vespa.flags.Flags; import com.yahoo.vespa.flags.InMemoryFlagSource; import com.yahoo.vespa.hosted.controller.api.application.v4.model.DeployOptions; @@ -21,7 +22,6 @@ import com.yahoo.vespa.hosted.controller.api.integration.deployment.ApplicationV import com.yahoo.vespa.hosted.controller.api.integration.deployment.SourceRevision; import com.yahoo.vespa.hosted.controller.api.integration.dns.Record; import com.yahoo.vespa.hosted.controller.api.integration.routing.RoutingEndpoint; -import com.yahoo.config.provision.zone.ZoneId; import com.yahoo.vespa.hosted.controller.application.ApplicationPackage; import com.yahoo.vespa.hosted.controller.application.Deployment; import com.yahoo.vespa.hosted.controller.application.DeploymentJobs.JobError; @@ -35,9 +35,11 @@ import com.yahoo.vespa.hosted.controller.rotation.RotationLock; import org.junit.Test; import java.time.Duration; +import java.util.Collection; import java.util.List; import java.util.Map; import java.util.Optional; +import java.util.Set; import java.util.function.Function; import java.util.function.Supplier; @@ -283,6 +285,16 @@ public class ControllerTest { .build(); tester.deployCompletely(application, applicationPackage); + Collection<Deployment> deployments = tester.application(application.id()).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", + "app1.tenant1.global.vespa.yahooapis.com", + "app1--tenant1.global.vespa.yahooapis.com"), + tester.configServer().rotationCnames().get(new DeploymentId(application.id(), deployment.zone()))); + } assertEquals(3, tester.controllerTester().nameService().records().size()); Optional<Record> record = tester.controllerTester().findCname("app1--tenant1.global.vespa.yahooapis.com"); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/ConfigServerMock.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/ConfigServerMock.java index 1222ae30c8a..56d8694400c 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/ConfigServerMock.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/ConfigServerMock.java @@ -59,6 +59,7 @@ public class ConfigServerMock extends AbstractComponent implements ConfigServer private final Set<DeploymentId> suspendedApplications = new HashSet<>(); private final Map<ZoneId, List<LoadBalancer>> loadBalancers = new HashMap<>(); private final Map<DeploymentId, List<Log>> warnings = new HashMap<>(); + private final Map<DeploymentId, Set<String>> rotationCnames = new HashMap<>(); private Version lastPrepareVersion = null; private RuntimeException prepareException = null; @@ -179,6 +180,10 @@ public class ConfigServerMock extends AbstractComponent implements ConfigServer warnings.put(deployment, List.copyOf(logs)); } + public Map<DeploymentId, Set<String>> rotationCnames() { + return Collections.unmodifiableMap(rotationCnames); + } + @Override public NodeRepositoryMock nodeRepository() { return nodeRepository; @@ -222,6 +227,8 @@ public class ConfigServerMock extends AbstractComponent implements ConfigServer if (nodeRepository().list(deployment.zoneId(), deployment.applicationId()).isEmpty()) provision(deployment.zoneId(), deployment.applicationId()); + this.rotationCnames.put(deployment, Set.copyOf(rotationCnames)); + return new PreparedApplication() { // TODO: Remove when no longer part of interface |