aboutsummaryrefslogtreecommitdiffstats
path: root/controller-server/src/main/java/com/yahoo
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2019-11-22 11:11:22 +0100
committerMartin Polden <mpolden@mpolden.no>2019-11-22 11:11:22 +0100
commitf55d830d8d56a28b6f81446a3a65c162094f4da2 (patch)
treed823d0ae8af8397970116511f3604efcb6b1e7b5 /controller-server/src/main/java/com/yahoo
parente83e90e93a4b012df3d30fd2cf6eab0f433ac645 (diff)
Avoid duplicating endpoint URLs
When routing is configured through routing polices, one policy exists per deployment, but the global endpoint URL may naturally be the same across multiple deployments.
Diffstat (limited to 'controller-server/src/main/java/com/yahoo')
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java36
1 files changed, 22 insertions, 14 deletions
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 c8f5720327a..c406ef0bbd8 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
@@ -109,6 +109,7 @@ import java.util.Arrays;
import java.util.Base64;
import java.util.Comparator;
import java.util.HashSet;
+import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Optional;
@@ -749,35 +750,42 @@ public class ApplicationApiHandler extends LoggingRequestHandler {
}));
}
- // Rotation
- Cursor globalRotationsArray = object.setArray("globalRotations");
+ // Global endpoints
+ var globalEndpointUrls = new LinkedHashSet<String>();
+
+ // Add default global endpoints. These are backed by rotations.
instance.endpointsIn(controller.system())
.scope(Endpoint.Scope.global)
.legacy(false) // Hide legacy names
.asList().stream()
.map(Endpoint::url)
.map(URI::toString)
- .forEach(globalRotationsArray::addString);
-
- instance.rotations().stream()
- .map(AssignedRotation::rotationId)
- .findFirst()
- .ifPresent(rotation -> object.setString("rotationId", rotation.asString()));
+ .forEach(globalEndpointUrls::add);
- // Per-cluster rotations
+ // Per-cluster endpoints. These are backed by load balancers.
Set<RoutingPolicy> routingPolicies = controller.applications().routingPolicies().get(instance.id());
- for (RoutingPolicy policy : routingPolicies) {
+ for (var policy : routingPolicies) {
policy.rotationEndpointsIn(controller.system()).asList().stream()
.map(Endpoint::url)
.map(URI::toString)
- .forEach(globalRotationsArray::addString);
+ .forEach(globalEndpointUrls::add);
}
+ var globalRotationsArray = object.setArray("globalRotations");
+ globalEndpointUrls.forEach(globalRotationsArray::addString);
+
+ // Legacy field. Identifies the first assigned rotation, if any.
+ instance.rotations().stream()
+ .map(AssignedRotation::rotationId)
+ .findFirst()
+ .ifPresent(rotation -> object.setString("rotationId", rotation.asString()));
+
+
// Deployments sorted according to deployment spec
List<Deployment> deployments = deploymentSpec.instance(instance.name())
- .map(spec -> new DeploymentSteps(spec, controller::system))
- .map(steps -> steps.sortedDeployments(instance.deployments().values()))
- .orElse(List.copyOf(instance.deployments().values()));
+ .map(spec -> new DeploymentSteps(spec, controller::system))
+ .map(steps -> steps.sortedDeployments(instance.deployments().values()))
+ .orElse(List.copyOf(instance.deployments().values()));
Cursor deploymentsArray = object.setArray("deployments");
for (Deployment deployment : deployments) {