summaryrefslogtreecommitdiffstats
path: root/config-model
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@gmail.com>2020-05-22 14:08:22 +0200
committerJon Bratseth <bratseth@gmail.com>2020-05-22 14:08:22 +0200
commit2a7af074f571fb557f3bdc756be131a15288bff6 (patch)
tree653b610a73a357e81375b4bb4f612775bbf48a29 /config-model
parentf1b06c72b6e6d1dbe8c6596b0fe8ec8c6f13a9f2 (diff)
Clean up HostSpec constructors
Diffstat (limited to 'config-model')
-rw-r--r--config-model/src/main/java/com/yahoo/config/model/provision/InMemoryProvisioner.java22
-rw-r--r--config-model/src/main/java/com/yahoo/config/model/provision/SingleNodeProvisioner.java14
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/HostResource.java9
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/ResourcesReductionValidator.java4
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/NodesSpecification.java10
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java2
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/HostResourceTest.java7
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/VespaModelFactoryTest.java14
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilderTest.java4
9 files changed, 48 insertions, 38 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 1a1ed000478..6e21d0688ad 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
@@ -118,8 +118,7 @@ public class InMemoryProvisioner implements HostProvisioner {
List<Host> defaultHosts = freeNodes.get(defaultResources);
if (defaultHosts.isEmpty()) throw new IllegalArgumentException("No more hosts with default resources available");
Host newHost = freeNodes.removeValue(defaultResources, 0);
- // Note: Always returns HostSpec with empty dockerImageRepo, which is OK since this method is never used when docker image repo is set
- return new HostSpec(newHost.hostname(), newHost.aliases(), newHost.flavor(), Optional.empty(), newHost.version(), Optional.empty());
+ return new HostSpec(newHost.hostname(), List.of(alias));
}
@Override
@@ -173,12 +172,12 @@ public class InMemoryProvisioner implements HostProvisioner {
private HostSpec retire(HostSpec host) {
return new HostSpec(host.hostname(),
- host.aliases(),
- host.flavor(),
- Optional.of(host.membership().get().retire()),
+ host.realResources(),
+ host.advertisedResources(),
+ host.requestedResources().orElse(NodeResources.unspecified()),
+ host.membership().get().retire(),
host.version(),
Optional.empty(),
- Optional.empty(),
host.dockerImageRepo());
}
@@ -190,7 +189,7 @@ 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 == NodeResources.unspecified) continue;
+ if (currentResources.isEmpty() || requestedResources.isUnspecified()) 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
@@ -202,7 +201,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 == NodeResources.unspecified || resources.satisfies(requestedResources))
+ .filter(resources -> requestedResources.isUnspecified() || resources.satisfies(requestedResources))
.findFirst();
if (hostResources.isEmpty()) {
if (canFail)
@@ -214,10 +213,11 @@ public class InMemoryProvisioner implements HostProvisioner {
Host newHost = freeNodes.removeValue(hostResources.get(), 0);
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),
+ allocation.add(new HostSpec(newHost.hostname(),
+ hostResources.get(), hostResources.get(), requestedResources,
+ membership,
newHost.version(), Optional.empty(),
- requestedResources == NodeResources.unspecified ? Optional.empty() : Optional.of(requestedResources)));
+ Optional.empty()));
}
nextIndexInCluster.put(new Pair<>(clusterGroup.type(), clusterGroup.id()), nextIndex);
diff --git a/config-model/src/main/java/com/yahoo/config/model/provision/SingleNodeProvisioner.java b/config-model/src/main/java/com/yahoo/config/model/provision/SingleNodeProvisioner.java
index 1f0e0755667..212ad9e5a96 100644
--- a/config-model/src/main/java/com/yahoo/config/model/provision/SingleNodeProvisioner.java
+++ b/config-model/src/main/java/com/yahoo/config/model/provision/SingleNodeProvisioner.java
@@ -7,11 +7,14 @@ import com.yahoo.config.provision.ClusterMembership;
import com.yahoo.config.provision.ClusterSpec;
import com.yahoo.config.provision.Flavor;
import com.yahoo.config.provision.HostSpec;
+import com.yahoo.config.provision.NodeResources;
import com.yahoo.config.provision.ProvisionLogger;
import com.yahoo.net.HostName;
+import com.yahoo.vespa.model.builder.xml.dom.NodesSpecification;
import java.util.ArrayList;
import java.util.List;
+import java.util.Optional;
/**
* A host provisioner used when there is no hosts.xml file (using localhost as the only host)
@@ -33,7 +36,10 @@ public class SingleNodeProvisioner implements HostProvisioner {
public SingleNodeProvisioner(Flavor flavor) {
host = new Host(HostName.getLocalhost());
- this.hostSpec = new HostSpec(host.hostname(), host.aliases(), flavor);
+ this.hostSpec = new HostSpec(host.hostname(),
+ List.of(),
+ flavor.resources(), flavor.resources(),
+ Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty());
}
@Override
@@ -45,7 +51,11 @@ public class SingleNodeProvisioner implements HostProvisioner {
public List<HostSpec> prepare(ClusterSpec cluster, Capacity capacity, ProvisionLogger logger) {
// TODO: This should fail if capacity requested is more than 1
List<HostSpec> hosts = new ArrayList<>();
- hosts.add(new HostSpec(host.hostname(), host.aliases(), ClusterMembership.from(cluster, counter++)));
+ hosts.add(new HostSpec(host.hostname(),
+ List.of(),
+ NodeResources.unspecified(), NodeResources.unspecified(),
+ Optional.of(ClusterMembership.from(cluster, counter++)),
+ Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty()));
return hosts;
}
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/HostResource.java b/config-model/src/main/java/com/yahoo/vespa/model/HostResource.java
index 9dba6fde9d4..2390ad68aa2 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/HostResource.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/HostResource.java
@@ -1,23 +1,16 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.model;
-import com.yahoo.component.Version;
import com.yahoo.config.application.api.DeployLogger;
import com.yahoo.config.model.api.HostInfo;
-import com.yahoo.config.provision.ClusterMembership;
import com.yahoo.config.provision.Flavor;
import com.yahoo.config.provision.HostSpec;
-import com.yahoo.config.provision.NodeResources;
import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
import java.util.LinkedHashMap;
-import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Optional;
-import java.util.Set;
import java.util.stream.Collectors;
/**
@@ -44,7 +37,7 @@ public class HostResource implements Comparable<HostResource> {
* @param host {@link com.yahoo.vespa.model.Host} object to bind to.
*/
public HostResource(Host host) {
- this(host, new HostSpec(host.getHostname(), Optional.empty()));
+ this(host, new HostSpec(host.getHostname(), List.of()));
}
public HostResource(Host host, HostSpec spec) {
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/ResourcesReductionValidator.java b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/ResourcesReductionValidator.java
index 5343a322382..24b7b0949f6 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/ResourcesReductionValidator.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/ResourcesReductionValidator.java
@@ -44,8 +44,8 @@ public class ResourcesReductionValidator implements ChangeValidator {
ClusterSpec.Id clusterId,
ValidationOverrides overrides,
Instant now) {
- if (current.minResources().nodeResources() == NodeResources.unspecified) return;
- if (next.minResources().nodeResources() == NodeResources.unspecified) return;
+ if (current.minResources().nodeResources().isUnspecified()) return;
+ if (next.minResources().nodeResources().isUnspecified()) return;
List<String> illegalChanges = Stream.of(
validateResource("vCPU",
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 ea47e490b12..8f737f02dca 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
@@ -159,8 +159,8 @@ public class NodesSpecification {
* Returns a requirement from <code>count</code> non-dedicated nodes in one group
*/
public static NodesSpecification nonDedicated(int count, ConfigModelContext context) {
- return new NodesSpecification(new ClusterResources(count, 1, NodeResources.unspecified),
- new ClusterResources(count, 1, NodeResources.unspecified),
+ return new NodesSpecification(new ClusterResources(count, 1, NodeResources.unspecified()),
+ new ClusterResources(count, 1, NodeResources.unspecified()),
false,
context.getDeployState().getWantedNodeVespaVersion(),
false,
@@ -172,8 +172,8 @@ public class NodesSpecification {
/** Returns a requirement from <code>count</code> dedicated nodes in one group */
public static NodesSpecification dedicated(int count, ConfigModelContext context) {
- return new NodesSpecification(new ClusterResources(count, 1, NodeResources.unspecified),
- new ClusterResources(count, 1, NodeResources.unspecified),
+ return new NodesSpecification(new ClusterResources(count, 1, NodeResources.unspecified()),
+ new ClusterResources(count, 1, NodeResources.unspecified()),
true,
context.getDeployState().getWantedNodeVespaVersion(),
false,
@@ -224,7 +224,7 @@ public class NodesSpecification {
return new Pair<>(flavorResources, flavorResources);
}
else {
- return new Pair<>(NodeResources.unspecified, NodeResources.unspecified);
+ return new Pair<>(NodeResources.unspecified(), NodeResources.unspecified());
}
}
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 741e5ebffd1..559a4b8b668 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
@@ -664,7 +664,7 @@ public class ContainerModelBuilder extends ConfigModelBuilder<ContainerModel> {
.dockerImageRepository(deployState.getWantedDockerImageRepo())
.build();
int nodeCount = deployState.zone().environment().isProduction() ? 2 : 1;
- Capacity capacity = Capacity.from(new ClusterResources(nodeCount, 1, NodeResources.unspecified),
+ Capacity capacity = Capacity.from(new ClusterResources(nodeCount, 1, NodeResources.unspecified()),
false,
!deployState.getProperties().isBootstrap());
var hosts = hostSystem.allocateHosts(clusterSpec, capacity, log);
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/HostResourceTest.java b/config-model/src/test/java/com/yahoo/vespa/model/HostResourceTest.java
index 6aea0593f8a..dff1d338ffe 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/HostResourceTest.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/HostResourceTest.java
@@ -6,8 +6,10 @@ import com.yahoo.config.model.test.MockRoot;
import com.yahoo.config.provision.ClusterMembership;
import com.yahoo.config.provision.ClusterSpec;
import com.yahoo.config.provision.HostSpec;
+import com.yahoo.config.provision.NodeResources;
import org.junit.Test;
+import java.util.List;
import java.util.Optional;
import static com.yahoo.config.provision.ClusterSpec.Type.container;
@@ -53,7 +55,10 @@ public class HostResourceTest {
private static HostResource hostResourceWithMemberships(ClusterMembership membership) {
return new HostResource(Host.createHost(null, "hostname"),
- new HostSpec("hostname", Optional.of(membership)));
+ new HostSpec("hostname",
+ NodeResources.unspecified(), NodeResources.unspecified(), NodeResources.unspecified(),
+ membership,
+ Optional.empty(), Optional.empty(), Optional.empty()));
}
private static int counter = 0;
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/VespaModelFactoryTest.java b/config-model/src/test/java/com/yahoo/vespa/model/VespaModelFactoryTest.java
index ac77b821d4a..a9bf8bdcc49 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/VespaModelFactoryTest.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/VespaModelFactoryTest.java
@@ -17,7 +17,9 @@ import com.yahoo.config.provision.Capacity;
import com.yahoo.config.provision.ClusterMembership;
import com.yahoo.config.provision.ClusterSpec;
import com.yahoo.config.provision.HostSpec;
+import com.yahoo.config.provision.NodeResources;
import com.yahoo.config.provision.ProvisionLogger;
+import com.yahoo.vespa.model.builder.xml.dom.NodesSpecification;
import org.junit.Before;
import org.junit.Test;
@@ -103,17 +105,17 @@ public class VespaModelFactoryTest {
@Override
public HostSpec allocateHost(String alias) {
return new HostSpec(hostName,
- List.of(),
- ClusterMembership.from(ClusterSpec.request(ClusterSpec.Type.admin, new ClusterSpec.Id(routingClusterName)).vespaVersion("6.42").build(),
- 0));
+ NodeResources.unspecified(), NodeResources.unspecified(), NodeResources.unspecified(),
+ ClusterMembership.from(ClusterSpec.request(ClusterSpec.Type.admin, new ClusterSpec.Id(routingClusterName)).vespaVersion("6.42").build(), 0),
+ Optional.empty(), Optional.empty(), Optional.empty());
}
@Override
public List<HostSpec> prepare(ClusterSpec cluster, Capacity capacity, ProvisionLogger logger) {
return List.of(new HostSpec(hostName,
- List.of(),
- ClusterMembership.from(ClusterSpec.request(ClusterSpec.Type.container, new ClusterSpec.Id(routingClusterName)).vespaVersion("6.42").build(),
- 0)));
+ NodeResources.unspecified(), NodeResources.unspecified(), NodeResources.unspecified(),
+ ClusterMembership.from(ClusterSpec.request(ClusterSpec.Type.container, new ClusterSpec.Id(routingClusterName)).vespaVersion("6.42").build(), 0),
+ Optional.empty(), Optional.empty(), Optional.empty()));
}
};
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilderTest.java b/config-model/src/test/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilderTest.java
index ca3198637f3..fdd7ae57f0f 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilderTest.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilderTest.java
@@ -766,7 +766,7 @@ public class ContainerModelBuilderTest extends ContainerModelBuilderTestBase {
assertEquals("KMP_SETTING=1 KMP_AFFINITY=granularity=fine,verbose,compact,1,0 ", qrStartConfig.qrs().env());
}
- private void verifyAvailableprocessors(boolean isHosted, Flavor flavor, int expectProcessors) throws IOException, SAXException {
+ private void verifyAvailableprocessors(boolean isHosted, Flavor flavor, int expectProcessors) {
DeployState deployState = new DeployState.Builder()
.modelHostProvisioner(flavor != null ? new SingleNodeProvisioner(flavor) : new SingleNodeProvisioner())
.properties(new TestProperties()
@@ -790,7 +790,7 @@ public class ContainerModelBuilderTest extends ContainerModelBuilderTestBase {
}
@Test
- public void requireThatAvailableProcessorsFollowFlavor() throws IOException, SAXException {
+ public void requireThatAvailableProcessorsFollowFlavor() {
verifyAvailableprocessors(false, null,0);
verifyAvailableprocessors(true, null,0);
verifyAvailableprocessors(true, new Flavor(new FlavorsConfig.Flavor.Builder().name("test-flavor").minCpuCores(9).build()), 9);