summaryrefslogtreecommitdiffstats
path: root/controller-server
diff options
context:
space:
mode:
authorValerij Fredriksen <freva@users.noreply.github.com>2020-11-03 18:57:25 +0100
committerGitHub <noreply@github.com>2020-11-03 18:57:25 +0100
commitbd4909c4f3dd0175e82d75f4cb529e29fd55a6b0 (patch)
tree480399a3b3b497a3631f60154028241c7f493d5f /controller-server
parent0997ddfd9b032f44fa9767b1602f5f9f2bd744b5 (diff)
parent3a2ddaa4153c560f8c2c8d4aae2a55d5303c2718 (diff)
Merge pull request #15165 from vespa-engine/freva/tag-instances-with-exclusive-to
Tag instances with exclusiveTo
Diffstat (limited to 'controller-server')
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/ResourceTagMaintainer.java12
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/NodeRepositoryMock.java1
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ResourceTagMaintainerTest.java45
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));
}
}