summaryrefslogtreecommitdiffstats
path: root/controller-server
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2019-01-24 14:44:06 +0100
committerMartin Polden <mpolden@mpolden.no>2019-01-25 15:41:10 +0100
commit9b584cba86753aa3c6b137d22a3aac17c7192d21 (patch)
tree8596e67a7ce006544f45c6a716c87c740cf2299d /controller-server
parent8dfb89833baa33458953178cd426e929336b114f (diff)
Clean up NameService interface
Diffstat (limited to 'controller-server')
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/DnsMaintainer.java16
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/LoadBalancerAliasMaintainer.java12
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTest.java70
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/DnsMaintainerTest.java51
4 files changed, 65 insertions, 84 deletions
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/DnsMaintainer.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/DnsMaintainer.java
index df368c3c60c..15b238dca15 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/DnsMaintainer.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/DnsMaintainer.java
@@ -47,14 +47,14 @@ public class DnsMaintainer extends Maintainer {
/** Remove DNS alias for unassigned rotation */
private void removeDnsAlias(Rotation rotation) {
// When looking up CNAME by data, the data must be a FQDN
- nameService.findRecord(Record.Type.CNAME, RecordData.fqdn(rotation.name())).stream()
- .filter(DnsMaintainer::canUpdate)
- .forEach(record -> {
- log.info(String.format("Removing DNS record %s (%s) because it points to the unassigned " +
- "rotation %s (%s)", record.id().asString(),
- record.name().asString(), rotation.id().asString(), rotation.name()));
- nameService.removeRecord(record.id());
- });
+ nameService.findRecords(Record.Type.CNAME, RecordData.fqdn(rotation.name())).stream()
+ .filter(DnsMaintainer::canUpdate)
+ .forEach(record -> {
+ log.info(String.format("Removing DNS record %s (%s) because it points to the unassigned " +
+ "rotation %s (%s)", record.id().asString(),
+ record.name().asString(), rotation.id().asString(), rotation.name()));
+ nameService.removeRecord(record.id());
+ });
}
/** Returns whether we can update the given record */
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/LoadBalancerAliasMaintainer.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/LoadBalancerAliasMaintainer.java
index 6c5000e3e3d..407fdfbe466 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/LoadBalancerAliasMaintainer.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/LoadBalancerAliasMaintainer.java
@@ -95,11 +95,15 @@ public class LoadBalancerAliasMaintainer extends Maintainer {
HostName alias = HostName.from(LoadBalancerAlias.createAlias(loadBalancer.cluster(), application, zone));
RecordName name = RecordName.from(alias.value());
RecordData data = RecordData.fqdn(loadBalancer.hostname().value());
- Optional<Record> existingRecord = nameService.findRecord(Record.Type.CNAME, name);
+ List<Record> existingRecords = nameService.findRecords(Record.Type.CNAME, name);
+ if (existingRecords.size() > 1) {
+ throw new IllegalStateException("Found more than 1 CNAME record for " + name.asString() + ": " + existingRecords);
+ }
+ Optional<Record> record = existingRecords.stream().findFirst();
RecordId id;
- if(existingRecord.isPresent()) {
- id = existingRecord.get().id();
- nameService.updateRecord(existingRecord.get().id(), data);
+ if (record.isPresent()) {
+ id = record.get().id();
+ nameService.updateRecord(id, data);
} else {
id = nameService.createCname(name, data);
}
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 d4dff6ecff3..06417da8157 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
@@ -280,26 +280,26 @@ public class ControllerTest {
.region("us-central-1") // Two deployments should result in each DNS alias being registered once
.build();
+ Function<String, Optional<Record>> findCname = (name) -> tester.controllerTester().nameService()
+ .findRecords(Record.Type.CNAME,
+ RecordName.from(name))
+ .stream()
+ .findFirst();
+
tester.deployCompletely(application, applicationPackage);
assertEquals(3, tester.controllerTester().nameService().records().size());
- Optional<Record> record = tester.controllerTester().nameService().findRecord(
- Record.Type.CNAME, RecordName.from("app1--tenant1.global.vespa.yahooapis.com")
- );
+ Optional<Record> record = findCname.apply("app1--tenant1.global.vespa.yahooapis.com");
assertTrue(record.isPresent());
assertEquals("app1--tenant1.global.vespa.yahooapis.com", record.get().name().asString());
assertEquals("rotation-fqdn-01.", record.get().data().asString());
- record = tester.controllerTester().nameService().findRecord(
- Record.Type.CNAME, RecordName.from("app1--tenant1.global.vespa.oath.cloud")
- );
+ record = findCname.apply("app1--tenant1.global.vespa.oath.cloud");
assertTrue(record.isPresent());
assertEquals("app1--tenant1.global.vespa.oath.cloud", record.get().name().asString());
assertEquals("rotation-fqdn-01.", record.get().data().asString());
- record = tester.controllerTester().nameService().findRecord(
- Record.Type.CNAME, RecordName.from("app1.tenant1.global.vespa.yahooapis.com")
- );
+ record = findCname.apply("app1.tenant1.global.vespa.yahooapis.com");
assertTrue(record.isPresent());
assertEquals("app1.tenant1.global.vespa.yahooapis.com", record.get().name().asString());
assertEquals("rotation-fqdn-01.", record.get().data().asString());
@@ -309,6 +309,12 @@ public class ControllerTest {
public void testUpdatesExistingDnsAlias() {
DeploymentTester tester = new DeploymentTester();
+ Function<String, Optional<Record>> findCname = (name) -> tester.controllerTester().nameService()
+ .findRecords(Record.Type.CNAME,
+ RecordName.from(name))
+ .stream()
+ .findFirst();
+
// Application 1 is deployed and deleted
{
Application app1 = tester.createApplication("app1", "tenant1", 1, 1L);
@@ -322,16 +328,12 @@ public class ControllerTest {
tester.deployCompletely(app1, applicationPackage);
assertEquals(3, tester.controllerTester().nameService().records().size());
- Optional<Record> record = tester.controllerTester().nameService().findRecord(
- Record.Type.CNAME, RecordName.from("app1--tenant1.global.vespa.yahooapis.com")
- );
+ Optional<Record> record = findCname.apply("app1--tenant1.global.vespa.yahooapis.com");
assertTrue(record.isPresent());
assertEquals("app1--tenant1.global.vespa.yahooapis.com", record.get().name().asString());
assertEquals("rotation-fqdn-01.", record.get().data().asString());
- record = tester.controllerTester().nameService().findRecord(
- Record.Type.CNAME, RecordName.from("app1.tenant1.global.vespa.yahooapis.com")
- );
+ record = findCname.apply("app1.tenant1.global.vespa.yahooapis.com");
assertTrue(record.isPresent());
assertEquals("app1.tenant1.global.vespa.yahooapis.com", record.get().name().asString());
assertEquals("rotation-fqdn-01.", record.get().data().asString());
@@ -353,19 +355,13 @@ public class ControllerTest {
}
// Records remain
- record = tester.controllerTester().nameService().findRecord(
- Record.Type.CNAME, RecordName.from("app1--tenant1.global.vespa.yahooapis.com")
- );
+ record = findCname.apply("app1--tenant1.global.vespa.yahooapis.com");
assertTrue(record.isPresent());
- record = tester.controllerTester().nameService().findRecord(
- Record.Type.CNAME, RecordName.from("app1--tenant1.global.vespa.oath.cloud")
- );
+ record = findCname.apply("app1--tenant1.global.vespa.oath.cloud");
assertTrue(record.isPresent());
- record = tester.controllerTester().nameService().findRecord(
- Record.Type.CNAME, RecordName.from("app1.tenant1.global.vespa.yahooapis.com")
- );
+ record = findCname.apply("app1.tenant1.global.vespa.yahooapis.com");
assertTrue(record.isPresent());
}
@@ -381,27 +377,20 @@ public class ControllerTest {
tester.deployCompletely(app2, applicationPackage);
assertEquals(6, tester.controllerTester().nameService().records().size());
- Optional<Record> record = tester.controllerTester().nameService().findRecord(
- Record.Type.CNAME, RecordName.from("app2--tenant2.global.vespa.yahooapis.com")
- );
+ Optional<Record> record = findCname.apply("app2--tenant2.global.vespa.yahooapis.com");
assertTrue(record.isPresent());
assertEquals("app2--tenant2.global.vespa.yahooapis.com", record.get().name().asString());
assertEquals("rotation-fqdn-01.", record.get().data().asString());
- record = tester.controllerTester().nameService().findRecord(
- Record.Type.CNAME, RecordName.from("app2--tenant2.global.vespa.oath.cloud")
- );
+ record = findCname.apply("app2--tenant2.global.vespa.oath.cloud");
assertTrue(record.isPresent());
assertEquals("app2--tenant2.global.vespa.oath.cloud", record.get().name().asString());
assertEquals("rotation-fqdn-01.", record.get().data().asString());
- record = tester.controllerTester().nameService().findRecord(
- Record.Type.CNAME, RecordName.from("app2.tenant2.global.vespa.yahooapis.com")
- );
+ record = findCname.apply("app2.tenant2.global.vespa.yahooapis.com");
assertTrue(record.isPresent());
assertEquals("app2.tenant2.global.vespa.yahooapis.com", record.get().name().asString());
assertEquals("rotation-fqdn-01.", record.get().data().asString());
-
}
// Application 1 is recreated, deployed and assigned a new rotation
@@ -421,24 +410,17 @@ public class ControllerTest {
// Existing DNS records are updated to point to the newly assigned rotation
assertEquals(6, tester.controllerTester().nameService().records().size());
- Optional<Record> record = tester.controllerTester().nameService().findRecord(
- Record.Type.CNAME, RecordName.from("app1--tenant1.global.vespa.yahooapis.com")
- );
+ Optional<Record> record = findCname.apply("app1--tenant1.global.vespa.yahooapis.com");
assertTrue(record.isPresent());
assertEquals("rotation-fqdn-02.", record.get().data().asString());
- record = tester.controllerTester().nameService().findRecord(
- Record.Type.CNAME, RecordName.from("app1--tenant1.global.vespa.oath.cloud")
- );
+ record = findCname.apply("app1--tenant1.global.vespa.oath.cloud");
assertTrue(record.isPresent());
assertEquals("rotation-fqdn-02.", record.get().data().asString());
- record = tester.controllerTester().nameService().findRecord(
- Record.Type.CNAME, RecordName.from("app1.tenant1.global.vespa.yahooapis.com")
- );
+ record = findCname.apply("app1.tenant1.global.vespa.yahooapis.com");
assertTrue(record.isPresent());
assertEquals("rotation-fqdn-02.", record.get().data().asString());
-
}
}
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/DnsMaintainerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/DnsMaintainerTest.java
index 92f3e87f001..3d2a3ccd842 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/DnsMaintainerTest.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/DnsMaintainerTest.java
@@ -17,6 +17,7 @@ import org.junit.Test;
import java.time.Duration;
import java.util.Optional;
+import java.util.function.Function;
import static com.yahoo.vespa.hosted.controller.api.integration.deployment.JobType.component;
import static com.yahoo.vespa.hosted.controller.api.integration.deployment.JobType.systemTest;
@@ -33,9 +34,9 @@ public class DnsMaintainerTest {
public void removes_record_for_unassigned_rotation() {
DeploymentTester tester = new DeploymentTester();
Application application = tester.createApplication("app1", "tenant1", 1, 1L);
- DnsMaintainer dnsMaintainer = new DnsMaintainer(tester.controller(), Duration.ofHours(12),
- new JobControl(new MockCuratorDb()),
- tester.controllerTester().nameService());
+ DnsMaintainer maintainer = new DnsMaintainer(tester.controller(), Duration.ofHours(12),
+ new JobControl(new MockCuratorDb()),
+ tester.controllerTester().nameService());
ApplicationPackage applicationPackage = new ApplicationPackageBuilder()
.environment(Environment.prod)
@@ -44,39 +45,36 @@ public class DnsMaintainerTest {
.region("us-central-1")
.build();
+ Function<String, Optional<Record>> findCname = (name) -> tester.controllerTester().nameService()
+ .findRecords(Record.Type.CNAME,
+ RecordName.from(name))
+ .stream()
+ .findFirst();
+
// Deploy application
tester.deployCompletely(application, applicationPackage);
assertEquals(3, tester.controllerTester().nameService().records().size());
- Optional<Record> record = tester.controllerTester().nameService().findRecord(
- Record.Type.CNAME, RecordName.from("app1--tenant1.global.vespa.yahooapis.com")
- );
+ Optional<Record> record = findCname.apply("app1--tenant1.global.vespa.yahooapis.com");
assertTrue(record.isPresent());
assertEquals("app1--tenant1.global.vespa.yahooapis.com", record.get().name().asString());
assertEquals("rotation-fqdn-01.", record.get().data().asString());
- record = tester.controllerTester().nameService().findRecord(
- Record.Type.CNAME, RecordName.from("app1--tenant1.global.vespa.oath.cloud")
- );
+ record = findCname.apply("app1--tenant1.global.vespa.oath.cloud");
assertTrue(record.isPresent());
assertEquals("app1--tenant1.global.vespa.oath.cloud", record.get().name().asString());
assertEquals("rotation-fqdn-01.", record.get().data().asString());
- record = tester.controllerTester().nameService().findRecord(
- Record.Type.CNAME, RecordName.from("app1.tenant1.global.vespa.yahooapis.com")
- );
+ record = findCname.apply("app1.tenant1.global.vespa.yahooapis.com");
assertTrue(record.isPresent());
assertEquals("app1.tenant1.global.vespa.yahooapis.com", record.get().name().asString());
assertEquals("rotation-fqdn-01.", record.get().data().asString());
// DnsMaintainer does nothing
- dnsMaintainer.maintain();
- assertTrue("DNS record is not removed", tester.controllerTester().nameService().findRecord(
- Record.Type.CNAME, RecordName.from("app1--tenant1.global.vespa.yahooapis.com")).isPresent());
- assertTrue("DNS record is not removed", tester.controllerTester().nameService().findRecord(
- Record.Type.CNAME, RecordName.from("app1--tenant1.global.vespa.oath.cloud")).isPresent());
- assertTrue("DNS record is not removed", tester.controllerTester().nameService().findRecord(
- Record.Type.CNAME, RecordName.from("app1.tenant1.global.vespa.yahooapis.com")).isPresent());
+ maintainer.maintain();
+ assertTrue("DNS record is not removed", findCname.apply("app1--tenant1.global.vespa.yahooapis.com").isPresent());
+ assertTrue("DNS record is not removed", findCname.apply("app1--tenant1.global.vespa.oath.cloud").isPresent());
+ assertTrue("DNS record is not removed", findCname.apply("app1.tenant1.global.vespa.yahooapis.com").isPresent());
// Remove application
applicationPackage = new ApplicationPackageBuilder()
@@ -91,15 +89,12 @@ public class DnsMaintainerTest {
tester.applications().deleteApplication(application.id(), Optional.of(new OktaAccessToken("okta-token")));
// DnsMaintainer removes records
- dnsMaintainer.maintain();
- assertFalse("DNS record removed", tester.controllerTester().nameService().findRecord(
- Record.Type.CNAME, RecordName.from("app1--tenant1.global.vespa.yahooapis.com")).isPresent());
- dnsMaintainer.maintain();
- assertFalse("DNS record removed", tester.controllerTester().nameService().findRecord(
- Record.Type.CNAME, RecordName.from("app1--tenant1.global.vespa.oath.cloud")).isPresent());
- dnsMaintainer.maintain();
- assertFalse("DNS record removed", tester.controllerTester().nameService().findRecord(
- Record.Type.CNAME, RecordName.from("app1.tenant1.global.vespa.yahooapis.com")).isPresent());
+ maintainer.maintain();
+ assertFalse("DNS record removed", findCname.apply("app1--tenant1.global.vespa.yahooapis.com").isPresent());
+ maintainer.maintain();
+ assertFalse("DNS record removed", findCname.apply("app1--tenant1.global.vespa.oath.cloud").isPresent());
+ maintainer.maintain();
+ assertFalse("DNS record removed", findCname.apply("app1.tenant1.global.vespa.yahooapis.com").isPresent());
}
}