aboutsummaryrefslogtreecommitdiffstats
path: root/controller-server
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2019-02-06 14:06:06 +0100
committerMartin Polden <mpolden@mpolden.no>2019-02-06 14:40:04 +0100
commit6186a7b215fecda94d2e9e47de3b800ed4452f82 (patch)
tree80f22bd75a1edcd1a2fb2a403acabeaba221ea87 /controller-server
parent8adc7d48476437d33c910e46a6da85d36acedebe (diff)
Add rotations to routing policy
Diffstat (limited to 'controller-server')
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/RoutingPolicy.java21
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/RoutingPolicyMaintainer.java2
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/RoutingPolicySerializer.java11
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/RoutingPolicyMaintainerTest.java10
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/RoutingPolicySerializerTest.java15
5 files changed, 45 insertions, 14 deletions
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/RoutingPolicy.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/RoutingPolicy.java
index 4934c29afe4..d71e9c99a24 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/RoutingPolicy.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/RoutingPolicy.java
@@ -2,14 +2,17 @@
package com.yahoo.vespa.hosted.controller.application;
import com.google.common.base.Strings;
+import com.google.common.collect.ImmutableSortedSet;
import com.yahoo.config.provision.ApplicationId;
import com.yahoo.config.provision.ClusterSpec;
import com.yahoo.config.provision.HostName;
+import com.yahoo.config.provision.RotationName;
import com.yahoo.vespa.hosted.controller.api.integration.zone.ZoneId;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
+import java.util.Set;
import java.util.stream.Collectors;
/**
@@ -25,12 +28,15 @@ public class RoutingPolicy {
private final String recordId;
private final HostName alias;
private final HostName canonicalName;
+ private final Set<RotationName> rotations;
- public RoutingPolicy(ApplicationId owner, String recordId, HostName alias, HostName canonicalName) {
+ public RoutingPolicy(ApplicationId owner, String recordId, HostName alias, HostName canonicalName,
+ Set<RotationName> rotations) {
this.owner = Objects.requireNonNull(owner, "owner must be non-null");
this.recordId = Objects.requireNonNull(recordId, "recordId must be non-null");
this.alias = Objects.requireNonNull(alias, "alias must be non-null");
this.canonicalName = Objects.requireNonNull(canonicalName, "canonicalName must be non-null");
+ this.rotations = ImmutableSortedSet.copyOf(Objects.requireNonNull(rotations, "rotations must be non-null"));
}
/** The application owning this */
@@ -53,6 +59,11 @@ public class RoutingPolicy {
return canonicalName;
}
+ /** The rotations in this policy */
+ public Set<RotationName> rotations() {
+ return rotations;
+ }
+
@Override
public boolean equals(Object o) {
if (this == o) return true;
@@ -61,17 +72,19 @@ public class RoutingPolicy {
return owner.equals(that.owner) &&
recordId.equals(that.recordId) &&
alias.equals(that.alias) &&
- canonicalName.equals(that.canonicalName);
+ canonicalName.equals(that.canonicalName) &&
+ rotations.equals(that.rotations);
}
@Override
public int hashCode() {
- return Objects.hash(owner, recordId, alias, canonicalName);
+ return Objects.hash(owner, recordId, alias, canonicalName, rotations);
}
@Override
public String toString() {
- return String.format("%s: %s -> %s, owned by %s", recordId, alias, canonicalName, owner.toShortString());
+ return String.format("%s: %s -> %s (rotations: %s), owned by %s", recordId, alias, canonicalName,
+ rotations, owner.toShortString());
}
public static String createAlias(ClusterSpec.Id clusterId, ApplicationId applicationId, ZoneId zoneId) {
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/RoutingPolicyMaintainer.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/RoutingPolicyMaintainer.java
index 800c1fa83c2..48e9caef1a5 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/RoutingPolicyMaintainer.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/RoutingPolicyMaintainer.java
@@ -107,7 +107,7 @@ public class RoutingPolicyMaintainer extends Maintainer {
} else {
id = nameService.createCname(name, data);
}
- return new RoutingPolicy(application, id.asString(), alias, loadBalancer.hostname());
+ return new RoutingPolicy(application, id.asString(), alias, loadBalancer.hostname(), loadBalancer.rotations());
}
/** Find all load balancers assigned to application in given zone */
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/RoutingPolicySerializer.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/RoutingPolicySerializer.java
index 45dc6485805..0bc705ba485 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/RoutingPolicySerializer.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/RoutingPolicySerializer.java
@@ -3,6 +3,7 @@ package com.yahoo.vespa.hosted.controller.persistence;
import com.yahoo.config.provision.ApplicationId;
import com.yahoo.config.provision.HostName;
+import com.yahoo.config.provision.RotationName;
import com.yahoo.slime.ArrayTraverser;
import com.yahoo.slime.Cursor;
import com.yahoo.slime.Inspector;
@@ -26,6 +27,7 @@ public class RoutingPolicySerializer {
private static final String recordIdField = "recordId";
private static final String aliasField = "alias";
private static final String canonicalNameField = "canonicalName";
+ private static final String rotationsField = "rotations";
public Slime toSlime(Set<RoutingPolicy> routingPolicies) {
Slime slime = new Slime();
@@ -36,6 +38,10 @@ public class RoutingPolicySerializer {
policyObject.setString(recordIdField, policy.recordId());
policyObject.setString(aliasField, policy.alias().value());
policyObject.setString(canonicalNameField, policy.canonicalName().value());
+ Cursor rotationArray = policyObject.setArray(rotationsField);
+ policy.rotations().forEach(rotation -> {
+ rotationArray.addString(rotation.value());
+ });
});
return slime;
}
@@ -48,6 +54,8 @@ public class RoutingPolicySerializer {
field = root.field(aliasesField); // TODO: Remove after 7.9 has been released
}
field.traverse((ArrayTraverser) (i, inspect) -> {
+ Set<RotationName> rotations = new LinkedHashSet<>();
+ inspect.field(rotationsField).traverse((ArrayTraverser) (j, rotation) -> rotations.add(RotationName.from(rotation.asString())));
Inspector recordId = inspect.field(recordIdField);
if (!recordId.valid()) {
recordId = inspect.field(idField); // TODO: Remove after 7.9 has been released
@@ -55,7 +63,8 @@ public class RoutingPolicySerializer {
policies.add(new RoutingPolicy(owner,
recordId.asString(),
HostName.from(inspect.field(aliasField).asString()),
- HostName.from(inspect.field(canonicalNameField).asString())));
+ HostName.from(inspect.field(canonicalNameField).asString()),
+ rotations));
});
return Collections.unmodifiableSet(policies);
}
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/RoutingPolicyMaintainerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/RoutingPolicyMaintainerTest.java
index 558ab51638a..ceec3f04c81 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/RoutingPolicyMaintainerTest.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/RoutingPolicyMaintainerTest.java
@@ -119,15 +119,17 @@ public class RoutingPolicyMaintainerTest {
}
- private List<LoadBalancer> makeLoadBalancers(ZoneId zone, ApplicationId applicationId, int count) {
+ private List<LoadBalancer> makeLoadBalancers(ZoneId zone, ApplicationId application, int count) {
List<LoadBalancer> loadBalancers = new ArrayList<>();
+ Set<RotationName> rotations = Collections.singleton(RotationName.from("r1"));
for (int i = 0; i < count; i++) {
loadBalancers.add(
new LoadBalancer("LB-" + i + "-Z-" + zone.value(),
- applicationId,
+ application,
ClusterSpec.Id.from("cluster-" + i),
- HostName.from("loadbalancer-" + i + "-" + applicationId.serializedForm() +
- "-zone-" + zone.value())));
+ HostName.from("loadbalancer-" + i + "-" + application.serializedForm() +
+ "-zone-" + zone.value()),
+ rotations));
}
return loadBalancers;
}
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/RoutingPolicySerializerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/RoutingPolicySerializerTest.java
index 87609021ba5..1c64aaf16c2 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/RoutingPolicySerializerTest.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/RoutingPolicySerializerTest.java
@@ -4,10 +4,12 @@ package com.yahoo.vespa.hosted.controller.persistence;
import com.google.common.collect.ImmutableSet;
import com.yahoo.config.provision.ApplicationId;
import com.yahoo.config.provision.HostName;
+import com.yahoo.config.provision.RotationName;
import com.yahoo.vespa.config.SlimeUtils;
import com.yahoo.vespa.hosted.controller.application.RoutingPolicy;
import org.junit.Test;
+import java.util.Collections;
import java.util.Set;
import static org.junit.Assert.assertEquals;
@@ -21,14 +23,17 @@ public class RoutingPolicySerializerTest {
public void test_serialization() {
RoutingPolicySerializer serializer = new RoutingPolicySerializer();
ApplicationId owner = ApplicationId.defaultId();
+ Set<RotationName> rotations = Set.of(RotationName.from("r1"), RotationName.from("r2"));
Set<RoutingPolicy> loadBalancers = ImmutableSet.of(new RoutingPolicy(owner,
"record-id-1",
HostName.from("my-pretty-alias"),
- HostName.from("long-and-ugly-name")),
+ HostName.from("long-and-ugly-name"),
+ rotations),
new RoutingPolicy(owner,
"record-id-2",
HostName.from("my-pretty-alias-2"),
- HostName.from("long-and-ugly-name-2")));
+ HostName.from("long-and-ugly-name-2"),
+ rotations));
Set<RoutingPolicy> serialized = serializer.fromSlime(owner, serializer.toSlime(loadBalancers));
assertEquals(loadBalancers, serialized);
}
@@ -54,11 +59,13 @@ public class RoutingPolicySerializerTest {
Set<RoutingPolicy> loadBalancers = ImmutableSet.of(new RoutingPolicy(owner,
"record-id-1",
HostName.from("my-pretty-alias"),
- HostName.from("long-and-ugly-name")),
+ HostName.from("long-and-ugly-name"),
+ Collections.emptySet()),
new RoutingPolicy(owner,
"record-id-2",
HostName.from("my-pretty-alias-2"),
- HostName.from("long-and-ugly-name-2")));
+ HostName.from("long-and-ugly-name-2"),
+ Collections.emptySet()));
RoutingPolicySerializer serializer = new RoutingPolicySerializer();
assertEquals(loadBalancers, serializer.fromSlime(owner, SlimeUtils.jsonToSlime(json)));
}