summaryrefslogtreecommitdiffstats
path: root/config-model
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@verizonmedia.com>2020-03-25 21:59:55 +0100
committerJon Bratseth <bratseth@verizonmedia.com>2020-03-25 21:59:55 +0100
commit06325e02c3754946945f62d3cb69ff93fd93517b (patch)
tree0f2c588a6e80bda997a4e9ab3e0add11be2fd578 /config-model
parent1df9ad9d901df540fcb5c0fe463b3e3df5228482 (diff)
Collect resource fields into ClusterResources
Diffstat (limited to 'config-model')
-rw-r--r--config-model/src/main/java/com/yahoo/config/model/provision/InMemoryProvisioner.java25
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/NodesSpecification.java5
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java18
3 files changed, 25 insertions, 23 deletions
diff --git a/config-model/src/main/java/com/yahoo/config/model/provision/InMemoryProvisioner.java b/config-model/src/main/java/com/yahoo/config/model/provision/InMemoryProvisioner.java
index 9b19c8590e5..87ed91f98ef 100644
--- a/config-model/src/main/java/com/yahoo/config/model/provision/InMemoryProvisioner.java
+++ b/config-model/src/main/java/com/yahoo/config/model/provision/InMemoryProvisioner.java
@@ -120,18 +120,18 @@ public class InMemoryProvisioner implements HostProvisioner {
@Override
public List<HostSpec> prepare(ClusterSpec cluster, Capacity requestedCapacity, ProvisionLogger logger) {
- if (cluster.group().isPresent() && requestedCapacity.groups() > 1)
+ if (cluster.group().isPresent() && requestedCapacity.resources().groups() > 1)
throw new IllegalArgumentException("Cannot both be specifying a group and ask for groups to be created");
int capacity = failOnOutOfCapacity || requestedCapacity.isRequired()
- ? requestedCapacity.nodes()
- : Math.min(requestedCapacity.nodes(), freeNodes.get(defaultResources).size() + totalAllocatedTo(cluster));
- int groups = requestedCapacity.groups() > capacity ? capacity : requestedCapacity.groups();
+ ? requestedCapacity.resources().nodes()
+ : Math.min(requestedCapacity.resources().nodes(), freeNodes.get(defaultResources).size() + totalAllocatedTo(cluster));
+ int groups = requestedCapacity.resources().groups() > capacity ? capacity : requestedCapacity.resources().groups();
List<HostSpec> allocation = new ArrayList<>();
if (groups == 1) {
allocation.addAll(allocateHostGroup(cluster.with(Optional.of(ClusterSpec.Group.from(0))),
- requestedCapacity.nodeResources(),
+ requestedCapacity.resources().nodeResources(),
capacity,
startIndexForClusters,
requestedCapacity.canFail()));
@@ -139,7 +139,7 @@ public class InMemoryProvisioner implements HostProvisioner {
else {
for (int i = 0; i < groups; i++) {
allocation.addAll(allocateHostGroup(cluster.with(Optional.of(ClusterSpec.Group.from(i))),
- requestedCapacity.nodeResources(),
+ requestedCapacity.resources().nodeResources(),
capacity / groups,
allocation.size(),
requestedCapacity.canFail()));
@@ -164,7 +164,7 @@ public class InMemoryProvisioner implements HostProvisioner {
host.dockerImageRepo());
}
- private List<HostSpec> allocateHostGroup(ClusterSpec clusterGroup, Optional<NodeResources> requestedResources,
+ private List<HostSpec> allocateHostGroup(ClusterSpec clusterGroup, NodeResources requestedResources,
int nodesInGroup, int startIndex, boolean canFail) {
List<HostSpec> allocation = allocations.getOrDefault(clusterGroup, new ArrayList<>());
allocations.put(clusterGroup, allocation);
@@ -172,8 +172,8 @@ public class InMemoryProvisioner implements HostProvisioner {
// Check if the current allocations are compatible with the new request
for (int i = allocation.size() - 1; i >= 0; i--) {
Optional<NodeResources> currentResources = allocation.get(0).flavor().map(Flavor::resources);
- if (currentResources.isEmpty() || requestedResources.isEmpty()) continue;
- if (!currentResources.get().compatibleWith(requestedResources.get())) {
+ if (currentResources.isEmpty() || requestedResources == NodeResources.unspecified) continue;
+ if (!currentResources.get().compatibleWith(requestedResources)) {
HostSpec removed = allocation.remove(i);
freeNodes.put(currentResources.get(), new Host(removed.hostname())); // Return the node back to free pool
}
@@ -184,7 +184,7 @@ public class InMemoryProvisioner implements HostProvisioner {
// Find the smallest host that can fit the requested requested
Optional<NodeResources> hostResources = freeNodes.keySet().stream()
.sorted(new MemoryDiskCpu())
- .filter(resources -> requestedResources.isEmpty() || resources.satisfies(requestedResources.get()))
+ .filter(resources -> requestedResources == NodeResources.unspecified || resources.satisfies(requestedResources))
.findFirst();
if (hostResources.isEmpty()) {
if (canFail)
@@ -197,8 +197,9 @@ public class InMemoryProvisioner implements HostProvisioner {
if (freeNodes.get(hostResources.get()).isEmpty()) freeNodes.removeAll(hostResources.get());
ClusterMembership membership = ClusterMembership.from(clusterGroup, nextIndex++);
allocation.add(new HostSpec(newHost.hostname(), newHost.aliases(),
- hostResources.map(Flavor::new), Optional.of(membership),
- newHost.version(), Optional.empty(), requestedResources));
+ hostResources.map(Flavor::new), Optional.of(membership),
+ newHost.version(), Optional.empty(),
+ requestedResources == NodeResources.unspecified ? Optional.empty() : Optional.of(requestedResources)));
}
nextIndexInCluster.put(new Pair<>(clusterGroup.type(), clusterGroup.id()), nextIndex);
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/NodesSpecification.java b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/NodesSpecification.java
index f3f53538ddc..20d101b07d9 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/NodesSpecification.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/NodesSpecification.java
@@ -6,6 +6,7 @@ import com.yahoo.config.application.api.DeployLogger;
import com.yahoo.config.model.ConfigModelContext;
import com.yahoo.config.provision.Capacity;
import com.yahoo.config.provision.ClusterMembership;
+import com.yahoo.config.provision.ClusterResources;
import com.yahoo.config.provision.ClusterSpec;
import com.yahoo.config.provision.NodeResources;
import com.yahoo.text.XML;
@@ -201,7 +202,9 @@ public class NodesSpecification {
.combinedId(combinedId.map(ClusterSpec.Id::from))
.dockerImageRepo(dockerImageRepo)
.build();
- return hostSystem.allocateHosts(cluster, Capacity.fromCount(count, groups, resources, required, canFail), logger);
+ return hostSystem.allocateHosts(cluster, Capacity.from(new ClusterResources(count, groups, resources.orElse(NodeResources.unspecified)),
+ required, canFail),
+ logger);
}
private static Optional<NodeResources> getResources(ModelElement nodesElement) {
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java b/config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java
index 1670cc46fef..9c7185ff2cf 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java
@@ -23,9 +23,11 @@ import com.yahoo.config.provision.AthenzDomain;
import com.yahoo.config.provision.AthenzService;
import com.yahoo.config.provision.Capacity;
import com.yahoo.config.provision.ClusterMembership;
+import com.yahoo.config.provision.ClusterResources;
import com.yahoo.config.provision.ClusterSpec;
import com.yahoo.config.provision.Environment;
import com.yahoo.config.provision.HostName;
+import com.yahoo.config.provision.NodeResources;
import com.yahoo.config.provision.NodeType;
import com.yahoo.config.provision.SystemName;
import com.yahoo.config.provision.Zone;
@@ -672,11 +674,9 @@ public class ContainerModelBuilder extends ConfigModelBuilder<ContainerModel> {
.vespaVersion(deployState.getWantedNodeVespaVersion())
.dockerImageRepo(deployState.getWantedDockerImageRepo())
.build();
- Capacity capacity = Capacity.fromCount(1,
- 1,
- Optional.empty(),
- false,
- ! deployState.getProperties().isBootstrap());
+ Capacity capacity = Capacity.from(new ClusterResources(1, 1, NodeResources.unspecified),
+ false,
+ ! deployState.getProperties().isBootstrap());
HostResource host = hostSystem.allocateHosts(clusterSpec, capacity, log).keySet().iterator().next();
return singleHostContainerCluster(cluster, host, context);
}
@@ -688,11 +688,9 @@ public class ContainerModelBuilder extends ConfigModelBuilder<ContainerModel> {
.dockerImageRepo(deployState.getWantedDockerImageRepo())
.build();
int nodeCount = deployState.zone().environment().isProduction() ? 2 : 1;
- Capacity capacity = Capacity.fromCount(nodeCount,
- 1,
- Optional.empty(),
- false,
- !deployState.getProperties().isBootstrap());
+ Capacity capacity = Capacity.from(new ClusterResources(nodeCount, 1, NodeResources.unspecified),
+ false,
+ !deployState.getProperties().isBootstrap());
var hosts = hostSystem.allocateHosts(clusterSpec, capacity, log);
return createNodesFromHosts(log, hosts, cluster);
}