diff options
author | Martin Polden <mpolden@mpolden.no> | 2018-04-13 14:27:01 +0200 |
---|---|---|
committer | Martin Polden <mpolden@mpolden.no> | 2018-04-13 14:27:01 +0200 |
commit | 8628ac354933cbac834d1f74cffb807bb933d323 (patch) | |
tree | a850793b45fca066500473e4607d5bd261e1bdc6 /controller-server | |
parent | 13c50d45f9137e4ee9b0be50fd7e2f560833ce52 (diff) |
Use rotation FQDN when checking health status
Old implementation accepted both our global DNS alias as well as the rotation
DNS name. The new one only accepts the latter.
Diffstat (limited to 'controller-server')
5 files changed, 22 insertions, 14 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 baf03485beb..9ccfdd3642e 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 @@ -363,7 +363,7 @@ public class ApplicationController { private LockedApplication withRotation(LockedApplication application, ZoneId zone) { if (zone.environment() == Environment.prod && application.deploymentSpec().globalServiceId().isPresent()) { try (RotationLock rotationLock = rotationRepository.lock()) { - Rotation rotation = rotationRepository.getRotation(application, rotationLock); + Rotation rotation = rotationRepository.getOrAssignRotation(application, rotationLock); application = application.with(rotation.id()); store(application); // store assigned rotation even if deployment fails diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/Controller.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/Controller.java index f63dc52fb1e..b99a7ec1fcd 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/Controller.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/Controller.java @@ -29,6 +29,7 @@ import com.yahoo.vespa.hosted.controller.api.integration.zone.ZoneRegistry; import com.yahoo.vespa.hosted.controller.persistence.ControllerDb; import com.yahoo.vespa.hosted.controller.persistence.ControllerDbProxy; import com.yahoo.vespa.hosted.controller.persistence.CuratorDb; +import com.yahoo.vespa.hosted.controller.rotation.Rotation; import com.yahoo.vespa.hosted.controller.versions.VersionStatus; import com.yahoo.vespa.hosted.controller.versions.VespaVersion; import com.yahoo.vespa.hosted.rotation.config.RotationsConfig; @@ -154,8 +155,8 @@ public class Controller extends AbstractComponent { public ZoneRegistry zoneRegistry() { return zoneRegistry; } - public Map<String, RotationStatus> getHealthStatus(String hostname) { - return globalRoutingService.getHealthStatus(hostname); + public Map<String, RotationStatus> rotationStatus(Rotation rotation) { + return globalRoutingService.getHealthStatus(rotation.name()); } // TODO: Model the response properly diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java index aebd23f2386..ab369a1baa5 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java @@ -411,12 +411,10 @@ public class ApplicationApiHandler extends LoggingRequestHandler { deploymentObject.setString("environment", deployment.zone().environment().value()); deploymentObject.setString("region", deployment.zone().region().value()); deploymentObject.setString("instance", application.id().instance().value()); // pointless - if (application.rotation().isPresent()) { - Map<String, RotationStatus> rotationHealthStatus = application.rotation() - .map(rotation -> controller.getHealthStatus(rotation.dnsName())) - .orElse(Collections.emptyMap()); + controller.applications().rotationRepository().getRotation(application).ifPresent(rotation -> { + Map<String, RotationStatus> rotationHealthStatus = controller.rotationStatus(rotation); setRotationStatus(deployment, rotationHealthStatus, deploymentObject); - } + }); if (recurseOverDeployments(request)) // List full deployment information when recursive. toSlime(deploymentObject, new DeploymentId(application.id(), deployment.zone()), deployment, request); @@ -572,11 +570,14 @@ public class ApplicationApiHandler extends LoggingRequestHandler { Slime slime = new Slime(); Cursor response = slime.setObject(); - Map<String, RotationStatus> rotationHealthStatus = controller.getHealthStatus(application.rotation().get().dnsName()); - for (String rotationEndpoint : rotationHealthStatus.keySet()) { + Map<String, RotationStatus> rotationStatus = controller.applications().rotationRepository() + .getRotation(application) + .map(controller::rotationStatus) + .orElseGet(Collections::emptyMap); + for (String rotationEndpoint : rotationStatus.keySet()) { if (rotationEndpoint.contains(toDns(environment)) && rotationEndpoint.contains(toDns(region))) { Cursor bcpStatusObject = response.setObject("bcpStatus"); - bcpStatusObject.setString("rotationStatus", rotationHealthStatus.getOrDefault(rotationEndpoint, RotationStatus.UNKNOWN).name()); + bcpStatusObject.setString("rotationStatus", rotationStatus.getOrDefault(rotationEndpoint, RotationStatus.UNKNOWN).name()); } } diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/rotation/RotationRepository.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/rotation/RotationRepository.java index c0d3fd4758e..08aedcd12b0 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/rotation/RotationRepository.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/rotation/RotationRepository.java @@ -13,6 +13,7 @@ import java.util.Comparator; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.logging.Logger; import java.util.stream.Collectors; @@ -45,6 +46,11 @@ public class RotationRepository { return new RotationLock(curator.lockRotations()); } + /** Get rotation for given application */ + public Optional<Rotation> getRotation(Application application) { + return application.rotation().map(r -> allRotations.get(r.id())); + } + /** * Returns a rotation for the given application * @@ -54,7 +60,7 @@ public class RotationRepository { * @param application The application requesting a rotation * @param lock Lock which must be acquired by the caller */ - public Rotation getRotation(Application application, RotationLock lock) { + public Rotation getOrAssignRotation(Application application, RotationLock lock) { if (application.rotation().isPresent()) { return allRotations.get(application.rotation().get().id()); } diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/rotation/RotationTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/rotation/RotationTest.java index c73bf9ac34e..f13c65a06fe 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/rotation/RotationTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/rotation/RotationTest.java @@ -68,7 +68,7 @@ public class RotationTest { assertEquals(URI.create("http://app1.tenant1.global.vespa.yahooapis.com:4080/"), application.rotation().get().url()); try (RotationLock lock = repository.lock()) { - Rotation rotation = repository.getRotation(tester.applications().require(application.id()), lock); + Rotation rotation = repository.getOrAssignRotation(tester.applications().require(application.id()), lock); assertEquals(expected, rotation); } @@ -93,7 +93,7 @@ public class RotationTest { application = tester.applications().require(application.id()); try (RotationLock lock = repository.lock()) { - Rotation rotation = repository.getRotation(application, lock); + Rotation rotation = repository.getOrAssignRotation(application, lock); Rotation assignedRotation = new Rotation(new RotationId("foo-1"), "foo-1.com"); assertEquals(assignedRotation, rotation); } |