diff options
author | Valerij Fredriksen <freva@users.noreply.github.com> | 2020-11-03 18:57:25 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-11-03 18:57:25 +0100 |
commit | bd4909c4f3dd0175e82d75f4cb529e29fd55a6b0 (patch) | |
tree | 480399a3b3b497a3631f60154028241c7f493d5f /controller-server | |
parent | 0997ddfd9b032f44fa9767b1602f5f9f2bd744b5 (diff) | |
parent | 3a2ddaa4153c560f8c2c8d4aae2a55d5303c2718 (diff) |
Merge pull request #15165 from vespa-engine/freva/tag-instances-with-exclusive-to
Tag instances with exclusiveTo
Diffstat (limited to 'controller-server')
3 files changed, 40 insertions, 18 deletions
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/ResourceTagMaintainer.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/ResourceTagMaintainer.java index 863302223ac..634e5ba10ce 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/ResourceTagMaintainer.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/ResourceTagMaintainer.java @@ -7,9 +7,11 @@ import com.yahoo.config.provision.HostName; import com.yahoo.config.provision.zone.ZoneId; import com.yahoo.vespa.hosted.controller.Controller; import com.yahoo.vespa.hosted.controller.api.integration.aws.ResourceTagger; +import com.yahoo.vespa.hosted.controller.api.integration.configserver.Node; import java.time.Duration; import java.util.Map; +import java.util.Optional; import java.util.logging.Level; import java.util.stream.Collectors; @@ -31,7 +33,7 @@ public class ResourceTagMaintainer extends ControllerMaintainer { .ofCloud(CloudName.from("aws")) .reachable() .zones().forEach(zone -> { - Map<HostName, ApplicationId> applicationOfHosts = getTenantOfParentHosts(zone.getId()); + Map<HostName, Optional<ApplicationId>> applicationOfHosts = getTenantOfParentHosts(zone.getId()); int taggedResources = resourceTagger.tagResources(zone, applicationOfHosts); if (taggedResources > 0) log.log(Level.INFO, "Tagged " + taggedResources + " resources in " + zone.getId()); @@ -39,14 +41,14 @@ public class ResourceTagMaintainer extends ControllerMaintainer { return true; } - private Map<HostName, ApplicationId> getTenantOfParentHosts(ZoneId zoneId) { + private Map<HostName, Optional<ApplicationId>> getTenantOfParentHosts(ZoneId zoneId) { return controller().serviceRegistry().configServer().nodeRepository() .list(zoneId) .stream() - .filter(node -> node.parentHostname().isPresent() && node.owner().isPresent()) + .filter(node -> node.type().isHost()) .collect(Collectors.toMap( - node -> node.parentHostname().get(), - node -> node.owner().get(), + Node::hostname, + Node::exclusiveTo, (node1, node2) -> node1 )); } diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/NodeRepositoryMock.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/NodeRepositoryMock.java index 72cc000ef98..01112cbb696 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/NodeRepositoryMock.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/NodeRepositoryMock.java @@ -97,6 +97,7 @@ public class NodeRepositoryMock implements NodeRepository { .resources(new NodeResources(24, 24, 500, 1)) .clusterId("clusterA") .clusterType(Node.ClusterType.container) + .exclusiveTo(ApplicationId.from("t1", "a1", "i1")) .build(); var nodeB = new Node.Builder() .hostname(HostName.from("hostB")) diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ResourceTagMaintainerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ResourceTagMaintainerTest.java index e42d99c1fee..ad8d0050c73 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ResourceTagMaintainerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ResourceTagMaintainerTest.java @@ -3,16 +3,20 @@ package com.yahoo.vespa.hosted.controller.maintenance; import com.yahoo.config.provision.ApplicationId; import com.yahoo.config.provision.HostName; +import com.yahoo.config.provision.NodeType; import com.yahoo.config.provision.zone.ZoneId; import com.yahoo.vespa.hosted.controller.ControllerTester; import com.yahoo.vespa.hosted.controller.api.integration.aws.MockResourceTagger; +import com.yahoo.vespa.hosted.controller.api.integration.configserver.Node; import com.yahoo.vespa.hosted.controller.integration.ZoneApiMock; import org.junit.Test; import java.time.Duration; +import java.util.List; import java.util.Map; +import java.util.Optional; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; /** * @author olaa @@ -30,24 +34,39 @@ public class ResourceTagMaintainerTest { mockResourceTagger); resourceTagMaintainer.maintain(); assertEquals(2, mockResourceTagger.getValues().size()); - Map<HostName, ApplicationId> applicationForHost = mockResourceTagger.getValues().get(ZoneId.from("prod.region-2")); - assertEquals(ApplicationId.from("tenant1", "app1", "default"), applicationForHost.get(HostName.from("parentHostA"))); - assertEquals(ApplicationId.from("tenant2", "app2", "default"), applicationForHost.get(HostName.from("parentHostB"))); - - + Map<HostName, Optional<ApplicationId>> applicationForHost = mockResourceTagger.getValues().get(ZoneId.from("prod.region-2")); + assertEquals(ApplicationId.from("t1", "a1", "i1"), applicationForHost.get(HostName.from("parentHostA.prod.region-2")).get()); + assertEquals(Optional.empty(), applicationForHost.get(HostName.from("parentHostB.prod.region-2"))); } private void setUpZones() { ZoneApiMock nonAwsZone = ZoneApiMock.newBuilder().withId("test.region-1").build(); ZoneApiMock awsZone1 = ZoneApiMock.newBuilder().withId("prod.region-2").withCloud("aws").build(); ZoneApiMock awsZone2 = ZoneApiMock.newBuilder().withId("test.region-3").withCloud("aws").build(); - tester.zoneRegistry().setZones( - nonAwsZone, - awsZone1, - awsZone2); - tester.configServer().nodeRepository().setFixedNodes(nonAwsZone.getId()); - tester.configServer().nodeRepository().setFixedNodes(awsZone1.getId()); - tester.configServer().nodeRepository().setFixedNodes(awsZone2.getId()); + tester.zoneRegistry().setZones(nonAwsZone, awsZone1, awsZone2); + setNodes(awsZone1.getId()); + setNodes(nonAwsZone.getId()); + } + + public void setNodes(ZoneId zone) { + var hostA = new Node.Builder() + .hostname(HostName.from("parentHostA." + zone.value())) + .type(NodeType.host) + .owner(ApplicationId.from("hosted-vespa", "tenant-host", "default")) + .exclusiveTo(ApplicationId.from("t1", "a1", "i1")) + .build(); + var nodeA = new Node.Builder() + .hostname(HostName.from("hostA." + zone.value())) + .type(NodeType.tenant) + .parentHostname(HostName.from("parentHostA." + zone.value())) + .owner(ApplicationId.from("tenant1", "app1", "default")) + .build(); + var hostB = new Node.Builder() + .hostname(HostName.from("parentHostB." + zone.value())) + .type(NodeType.host) + .owner(ApplicationId.from("hosted-vespa", "tenant-host", "default")) + .build(); + tester.configServer().nodeRepository().setNodes(zone, List.of(hostA, nodeA, hostB)); } } |