summaryrefslogtreecommitdiffstats
path: root/controller-server
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2019-02-06 15:21:14 +0100
committerMartin Polden <mpolden@mpolden.no>2019-02-06 15:21:14 +0100
commitdd11f96374d43d11e9f2b36e017078506871ade0 (patch)
tree6c7f96049fe37b75ca66eed31a2b1eadcc858129 /controller-server
parent6186a7b215fecda94d2e9e47de3b800ed4452f82 (diff)
Add DNS zone to routing policy
Diffstat (limited to 'controller-server')
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/RoutingPolicy.java17
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/RoutingPolicyMaintainer.java3
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/RoutingPolicySerializer.java9
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/RoutingPolicyMaintainerTest.java2
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/RoutingPolicySerializerTest.java5
5 files changed, 31 insertions, 5 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 d71e9c99a24..41e3a6086d2 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
@@ -12,6 +12,7 @@ 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.Optional;
import java.util.Set;
import java.util.stream.Collectors;
@@ -28,14 +29,16 @@ public class RoutingPolicy {
private final String recordId;
private final HostName alias;
private final HostName canonicalName;
+ private final Optional<String> dnsZone;
private final Set<RotationName> rotations;
public RoutingPolicy(ApplicationId owner, String recordId, HostName alias, HostName canonicalName,
- Set<RotationName> rotations) {
+ Optional<String> dnsZone, 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.dnsZone = Objects.requireNonNull(dnsZone, "dnsZone must be non-null");
this.rotations = ImmutableSortedSet.copyOf(Objects.requireNonNull(rotations, "rotations must be non-null"));
}
@@ -59,6 +62,11 @@ public class RoutingPolicy {
return canonicalName;
}
+ /** DNS zone for this, if any */
+ public Optional<String> dnsZone() {
+ return dnsZone;
+ }
+
/** The rotations in this policy */
public Set<RotationName> rotations() {
return rotations;
@@ -73,18 +81,19 @@ public class RoutingPolicy {
recordId.equals(that.recordId) &&
alias.equals(that.alias) &&
canonicalName.equals(that.canonicalName) &&
+ dnsZone.equals(that.dnsZone) &&
rotations.equals(that.rotations);
}
@Override
public int hashCode() {
- return Objects.hash(owner, recordId, alias, canonicalName, rotations);
+ return Objects.hash(owner, recordId, alias, canonicalName, dnsZone, rotations);
}
@Override
public String toString() {
- return String.format("%s: %s -> %s (rotations: %s), owned by %s", recordId, alias, canonicalName,
- rotations, owner.toShortString());
+ return String.format("%s: %s -> %s [rotations: %s%s], owned by %s", recordId, alias, canonicalName, rotations,
+ dnsZone.map(z -> ", DNS zone: " + z).orElse(""), 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 48e9caef1a5..42e8a572815 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,8 @@ public class RoutingPolicyMaintainer extends Maintainer {
} else {
id = nameService.createCname(name, data);
}
- return new RoutingPolicy(application, id.asString(), alias, loadBalancer.hostname(), loadBalancer.rotations());
+ return new RoutingPolicy(application, id.asString(), alias, loadBalancer.hostname(), loadBalancer.dnsZone(),
+ 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 0bc705ba485..479d87cbe71 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
@@ -12,7 +12,9 @@ import com.yahoo.vespa.hosted.controller.application.RoutingPolicy;
import java.util.Collections;
import java.util.LinkedHashSet;
+import java.util.Optional;
import java.util.Set;
+import java.util.function.Function;
/**
* Serializer and deserializer for a {@link RoutingPolicy}.
@@ -27,6 +29,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 dnsZoneField = "dnsZone";
private static final String rotationsField = "rotations";
public Slime toSlime(Set<RoutingPolicy> routingPolicies) {
@@ -38,6 +41,7 @@ public class RoutingPolicySerializer {
policyObject.setString(recordIdField, policy.recordId());
policyObject.setString(aliasField, policy.alias().value());
policyObject.setString(canonicalNameField, policy.canonicalName().value());
+ policy.dnsZone().ifPresent(dnsZone -> policyObject.setString(dnsZoneField, dnsZone));
Cursor rotationArray = policyObject.setArray(rotationsField);
policy.rotations().forEach(rotation -> {
rotationArray.addString(rotation.value());
@@ -64,9 +68,14 @@ public class RoutingPolicySerializer {
recordId.asString(),
HostName.from(inspect.field(aliasField).asString()),
HostName.from(inspect.field(canonicalNameField).asString()),
+ optionalField(inspect.field(dnsZoneField), Function.identity()),
rotations));
});
return Collections.unmodifiableSet(policies);
}
+ private static <T> Optional<T> optionalField(Inspector field, Function<String, T> fieldMapper) {
+ return Optional.of(field).filter(Inspector::valid).map(Inspector::asString).map(fieldMapper);
+ }
+
}
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 ceec3f04c81..f1c571da451 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
@@ -24,6 +24,7 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
+import java.util.Optional;
import java.util.Set;
import java.util.function.Supplier;
@@ -129,6 +130,7 @@ public class RoutingPolicyMaintainerTest {
ClusterSpec.Id.from("cluster-" + i),
HostName.from("loadbalancer-" + i + "-" + application.serializedForm() +
"-zone-" + zone.value()),
+ Optional.of("dns-zone-1"),
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 1c64aaf16c2..7dc31581d3b 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
@@ -10,6 +10,7 @@ import com.yahoo.vespa.hosted.controller.application.RoutingPolicy;
import org.junit.Test;
import java.util.Collections;
+import java.util.Optional;
import java.util.Set;
import static org.junit.Assert.assertEquals;
@@ -28,11 +29,13 @@ public class RoutingPolicySerializerTest {
"record-id-1",
HostName.from("my-pretty-alias"),
HostName.from("long-and-ugly-name"),
+ Optional.of("zone1"),
rotations),
new RoutingPolicy(owner,
"record-id-2",
HostName.from("my-pretty-alias-2"),
HostName.from("long-and-ugly-name-2"),
+ Optional.empty(),
rotations));
Set<RoutingPolicy> serialized = serializer.fromSlime(owner, serializer.toSlime(loadBalancers));
assertEquals(loadBalancers, serialized);
@@ -60,11 +63,13 @@ public class RoutingPolicySerializerTest {
"record-id-1",
HostName.from("my-pretty-alias"),
HostName.from("long-and-ugly-name"),
+ Optional.empty(),
Collections.emptySet()),
new RoutingPolicy(owner,
"record-id-2",
HostName.from("my-pretty-alias-2"),
HostName.from("long-and-ugly-name-2"),
+ Optional.empty(),
Collections.emptySet()));
RoutingPolicySerializer serializer = new RoutingPolicySerializer();
assertEquals(loadBalancers, serializer.fromSlime(owner, SlimeUtils.jsonToSlime(json)));