summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@verizonmedia.com>2020-01-23 13:13:02 +0100
committerJon Bratseth <bratseth@verizonmedia.com>2020-01-23 13:13:02 +0100
commit1ccc915c58196a5dff01157781ace1aac417ba66 (patch)
tree2fc3a86c7d61bf6b3dde6f32d5c1a2ae7d9ce819
parentb492c6d6b5f46bc484d249ef5aa3768d7dd91c71 (diff)
Propagate reservedTo
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/Node.java20
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/NodeRepository.java4
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/noderepository/NodeRepositoryNode.java7
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java1
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/AddNode.java18
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/RealNodeRepositoryTest.java1
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"));