diff options
author | Jon Bratseth <bratseth@verizonmedia.com> | 2020-01-23 13:13:02 +0100 |
---|---|---|
committer | Jon Bratseth <bratseth@verizonmedia.com> | 2020-01-23 13:13:02 +0100 |
commit | 1ccc915c58196a5dff01157781ace1aac417ba66 (patch) | |
tree | 2fc3a86c7d61bf6b3dde6f32d5c1a2ae7d9ce819 | |
parent | b492c6d6b5f46bc484d249ef5aa3768d7dd91c71 (diff) |
Propagate reservedTo
6 files changed, 42 insertions, 9 deletions
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/Node.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/Node.java index d0e4aa2d7d1..b436a4810d2 100644 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/Node.java +++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/Node.java @@ -6,6 +6,7 @@ import com.yahoo.config.provision.ApplicationId; import com.yahoo.config.provision.HostName; import com.yahoo.config.provision.NodeResources; import com.yahoo.config.provision.NodeType; +import com.yahoo.config.provision.TenantName; import java.util.Objects; import java.util.Optional; @@ -39,11 +40,13 @@ public class Node { private final ClusterType clusterType; private final boolean wantToRetire; private final boolean wantToDeprovision; + private final Optional<TenantName> reservedTo; public Node(HostName hostname, Optional<HostName> parentHostname, State state, NodeType type, NodeResources resources, Optional<ApplicationId> owner, Version currentVersion, Version wantedVersion, Version currentOsVersion, Version wantedOsVersion, ServiceState serviceState, long restartGeneration, long wantedRestartGeneration, long rebootGeneration, long wantedRebootGeneration, - int cost, String flavor, String clusterId, ClusterType clusterType, boolean wantToRetire, boolean wantToDeprovision) { + int cost, String flavor, String clusterId, ClusterType clusterType, boolean wantToRetire, boolean wantToDeprovision, + Optional<TenantName> reservedTo) { this.hostname = hostname; this.parentHostname = parentHostname; this.state = state; @@ -65,6 +68,7 @@ public class Node { this.clusterType = clusterType; this.wantToRetire = wantToRetire; this.wantToDeprovision = wantToDeprovision; + this.reservedTo = reservedTo; } public HostName hostname() { @@ -149,6 +153,8 @@ public class Node { return wantToDeprovision; } + public Optional<TenantName> reservedTo() { return reservedTo; } + @Override public boolean equals(Object o) { if (this == o) return true; @@ -213,7 +219,8 @@ public class Node { private ClusterType clusterType; private boolean wantToRetire; private boolean wantToDeprovision; - + private Optional<TenantName> reservedTo; + public Builder() { } public Builder(Node node) { @@ -238,6 +245,7 @@ public class Node { this.clusterType = node.clusterType; this.wantToRetire = node.wantToRetire; this.wantToDeprovision = node.wantToDeprovision; + this.reservedTo = node.reservedTo; } public Builder hostname(HostName hostname) { @@ -345,10 +353,16 @@ public class Node { return this; } + public Builder reservedTo(TenantName tenant) { + this.reservedTo = Optional.of(tenant); + return this; + } + public Node build() { return new Node(hostname, parentHostname, state, type, resources, owner, currentVersion, wantedVersion, currentOsVersion, wantedOsVersion, serviceState, restartGeneration, wantedRestartGeneration, rebootGeneration, wantedRebootGeneration, - cost, flavor, clusterId, clusterType, wantToRetire, wantToDeprovision); + cost, flavor, clusterId, clusterType, wantToRetire, wantToDeprovision, reservedTo); } + } } diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/NodeRepository.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/NodeRepository.java index 6d18c75b952..f45f33befaa 100644 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/NodeRepository.java +++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/NodeRepository.java @@ -6,6 +6,7 @@ import com.yahoo.config.provision.ApplicationId; import com.yahoo.config.provision.HostName; import com.yahoo.config.provision.NodeResources; import com.yahoo.config.provision.NodeType; +import com.yahoo.config.provision.TenantName; import com.yahoo.config.provision.zone.ZoneId; import com.yahoo.vespa.hosted.controller.api.integration.noderepository.NodeList; import com.yahoo.vespa.hosted.controller.api.integration.noderepository.NodeMembership; @@ -107,7 +108,8 @@ public interface NodeRepository { clusterIdOf(node.getMembership()), clusterTypeOf(node.getMembership()), node.getWantToRetire(), - node.getWantToDeprovision()); + node.getWantToDeprovision(), + Optional.ofNullable(node.getReservedTo()).map(name -> TenantName.from(name))); } private static String clusterIdOf(NodeMembership nodeMembership) { diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/noderepository/NodeRepositoryNode.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/noderepository/NodeRepositoryNode.java index 78a64b98e2b..d9957d77ff3 100644 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/noderepository/NodeRepositoryNode.java +++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/noderepository/NodeRepositoryNode.java @@ -80,6 +80,8 @@ public class NodeRepositoryNode { private Map<String, JsonNode> reports; @JsonProperty("modelName") private String modelName; + @JsonProperty("reservedTo") + private String reservedTo; public String getUrl() { return url; @@ -339,6 +341,10 @@ public class NodeRepositoryNode { this.modelName = modelName; } + public String getReservedTo() { return reservedTo; } + + public void setReservedTo(String reservedTo) { this.reservedTo = reservedTo; } + @Override public String toString() { return "NodeRepositoryNode{" + @@ -375,6 +381,7 @@ public class NodeRepositoryNode { ", allowedToBeDown=" + allowedToBeDown + ", reports=" + reports + ", modelName=" + modelName + + ", reservedTo=" + reservedTo + '}'; } } diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java index 81d9f08925f..b81760e2c66 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java @@ -600,6 +600,7 @@ public class ApplicationApiHandler extends LoggingRequestHandler { Cursor nodeObject = nodesArray.addObject(); nodeObject.setString("hostname", node.hostname().value()); nodeObject.setString("state", valueOf(node.state())); + node.reservedTo().ifPresent(tenant -> nodeObject.setString("reservedTo", tenant.value())); nodeObject.setString("orchestration", valueOf(node.serviceState())); nodeObject.setString("version", node.currentVersion().toString()); nodeObject.setString("flavor", node.flavor()); diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/AddNode.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/AddNode.java index 233fe8318ae..c1642c71e64 100644 --- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/AddNode.java +++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/AddNode.java @@ -3,6 +3,7 @@ package com.yahoo.vespa.hosted.node.admin.configserver.noderepository; import com.yahoo.config.provision.NodeResources; import com.yahoo.config.provision.NodeType; +import com.yahoo.config.provision.TenantName; import com.yahoo.config.provision.host.FlavorOverrides; import java.util.Objects; @@ -19,26 +20,30 @@ public class AddNode { public final Optional<String> nodeFlavor; public final Optional<FlavorOverrides> flavorOverrides; public final Optional<NodeResources> nodeResources; + public final Optional<TenantName> reservedTo; public final NodeType nodeType; public final Set<String> ipAddresses; public final Set<String> additionalIpAddresses; - public static AddNode forHost(String hostname, String nodeFlavor, Optional<FlavorOverrides> flavorOverrides, NodeType nodeType, Set<String> ipAddresses, Set<String> additionalIpAddresses) { - return new AddNode(hostname, Optional.empty(), Optional.of(nodeFlavor), flavorOverrides, Optional.empty(), nodeType, ipAddresses, additionalIpAddresses); + public static AddNode forHost(String hostname, String nodeFlavor, Optional<FlavorOverrides> flavorOverrides, Optional<TenantName> reservedTo, NodeType nodeType, Set<String> ipAddresses, Set<String> additionalIpAddresses) { + return new AddNode(hostname, Optional.empty(), Optional.of(nodeFlavor), flavorOverrides, Optional.empty(), reservedTo, nodeType, ipAddresses, additionalIpAddresses); } public static AddNode forNode(String hostname, String parentHostname, NodeResources nodeResources, NodeType nodeType, Set<String> ipAddresses) { - return new AddNode(hostname, Optional.of(parentHostname), Optional.empty(), Optional.empty(), Optional.of(nodeResources), nodeType, ipAddresses, Set.of()); + return new AddNode(hostname, Optional.of(parentHostname), Optional.empty(), Optional.empty(), Optional.of(nodeResources), Optional.empty(), nodeType, ipAddresses, Set.of()); } private AddNode(String hostname, Optional<String> parentHostname, - Optional<String> nodeFlavor, Optional<FlavorOverrides> flavorOverrides, Optional<NodeResources> nodeResources, + Optional<String> nodeFlavor, Optional<FlavorOverrides> flavorOverrides, + Optional<NodeResources> nodeResources, + Optional<TenantName> reservedTo, NodeType nodeType, Set<String> ipAddresses, Set<String> additionalIpAddresses) { this.hostname = hostname; this.parentHostname = parentHostname; this.nodeFlavor = nodeFlavor; this.flavorOverrides = flavorOverrides; this.nodeResources = nodeResources; + this.reservedTo = reservedTo; this.nodeType = nodeType; this.ipAddresses = ipAddresses; this.additionalIpAddresses = additionalIpAddresses; @@ -52,6 +57,7 @@ public class AddNode { return Objects.equals(hostname, addNode.hostname) && Objects.equals(parentHostname, addNode.parentHostname) && Objects.equals(nodeFlavor, addNode.nodeFlavor) && + Objects.equals(reservedTo, addNode.reservedTo) && nodeType == addNode.nodeType && Objects.equals(ipAddresses, addNode.ipAddresses) && Objects.equals(additionalIpAddresses, addNode.additionalIpAddresses); @@ -59,7 +65,7 @@ public class AddNode { @Override public int hashCode() { - return Objects.hash(hostname, parentHostname, nodeFlavor, nodeType, ipAddresses, additionalIpAddresses); + return Objects.hash(hostname, parentHostname, nodeFlavor, reservedTo, nodeType, ipAddresses, additionalIpAddresses); } @Override @@ -68,9 +74,11 @@ public class AddNode { "hostname='" + hostname + '\'' + ", parentHostname=" + parentHostname + ", nodeFlavor='" + nodeFlavor + '\'' + + (reservedTo.isPresent() ? ", reservedTo='" + reservedTo.get().value() + "'" : "") + ", nodeType=" + nodeType + ", ipAddresses=" + ipAddresses + ", additionalIpAddresses=" + additionalIpAddresses + '}'; } + } diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/RealNodeRepositoryTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/RealNodeRepositoryTest.java index 4e0fd95384c..eadcd997ae8 100644 --- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/RealNodeRepositoryTest.java +++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/RealNodeRepositoryTest.java @@ -164,6 +164,7 @@ public class RealNodeRepositoryTest { AddNode host = AddNode.forHost("host123.domain.tld", "default", Optional.of(FlavorOverrides.ofDisk(123)), + Optional.empty(), NodeType.confighost, Set.of("::1"), Set.of("::2", "::3")); |