summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/HostResource.java8
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/HostSystem.java3
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/VespaModelFactoryTest.java13
-rw-r--r--config-provisioning/src/main/java/com/yahoo/config/provision/HostSpec.java17
-rw-r--r--config-provisioning/src/main/java/com/yahoo/config/provision/ProvisionInfo.java2
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeRepositoryProvisioner.java8
6 files changed, 36 insertions, 15 deletions
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 f04e52e86e9..3cad2b7c2ef 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
@@ -29,6 +29,9 @@ public class HostResource implements Comparable<HostResource> {
private int allocatedPorts = 0;
+ // Empty for self-hosted Vespa.
+ private Optional<String> flavor = Optional.empty();
+
/**
* Create a new {@link HostResource} bound to a specific {@link com.yahoo.vespa.model.Host}.
*
@@ -224,6 +227,11 @@ public class HostResource implements Comparable<HostResource> {
.collect(Collectors.toSet()));
}
+ public void setFlavor(Optional<String> flavor) { this.flavor = flavor; }
+
+ /** Returns the flavor of this resource. Empty for self-hosted Vespa. */
+ public Optional<String> getFlavor() { return flavor; }
+
@Override
public String toString() {
return "host '" + host.getHostName() + "'";
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/HostSystem.java b/config-model/src/main/java/com/yahoo/vespa/model/HostSystem.java
index 2d825e3332d..c1822df2861 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/HostSystem.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/HostSystem.java
@@ -154,7 +154,7 @@ public class HostSystem extends AbstractConfigProducer<Host> {
public Map<HostResource, ClusterMembership> allocateHosts(ClusterSpec cluster, Capacity capacity, int groups, DeployLogger logger) {
List<HostSpec> allocatedHosts = provisioner.prepare(cluster, capacity, groups, new ProvisionDeployLogger(logger));
- // TODO: Let hostresource own a membership rather than using a map?
+ // TODO: Let hostresource own a membership rather than using a map
Map<HostResource, ClusterMembership> retAllocatedHosts = new LinkedHashMap<>();
for (HostSpec host : allocatedHosts) {
// This is needed for single node host provisioner to work in unit tests for hosted vespa applications.
@@ -164,6 +164,7 @@ public class HostSystem extends AbstractConfigProducer<Host> {
} else {
retAllocatedHosts.put(addNewHost(host), host.membership().orElse(null));
}
+ getExistingHost(host).get().setFlavor(host.flavor());
}
return retAllocatedHosts;
}
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 671690030b6..8671f44ad6a 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
@@ -95,16 +95,19 @@ public class VespaModelFactoryTest {
HostProvisioner provisionerToOverride = new HostProvisioner() {
@Override
public HostSpec allocateHost(String alias) {
- return new HostSpec(hostName, ClusterMembership.from(ClusterSpec.from(ClusterSpec.Type.admin,
- new ClusterSpec.Id(routingClusterName),
- ClusterSpec.Group.from(0),
- Optional.empty()),
- 0));
+ return new HostSpec(hostName,
+ Collections.emptyList(),
+ ClusterMembership.from(ClusterSpec.from(ClusterSpec.Type.admin,
+ new ClusterSpec.Id(routingClusterName),
+ ClusterSpec.Group.from(0),
+ Optional.empty()),
+ 0));
}
@Override
public List<HostSpec> prepare(ClusterSpec cluster, Capacity capacity, int groups, ProvisionLogger logger) {
return Collections.singletonList(new HostSpec(hostName,
+ Collections.emptyList(),
ClusterMembership.from(ClusterSpec.from(ClusterSpec.Type.container,
new ClusterSpec.Id(routingClusterName),
ClusterSpec.Group.from(0),
diff --git a/config-provisioning/src/main/java/com/yahoo/config/provision/HostSpec.java b/config-provisioning/src/main/java/com/yahoo/config/provision/HostSpec.java
index b68139f3578..174a8ce4d97 100644
--- a/config-provisioning/src/main/java/com/yahoo/config/provision/HostSpec.java
+++ b/config-provisioning/src/main/java/com/yahoo/config/provision/HostSpec.java
@@ -24,26 +24,29 @@ public class HostSpec implements Comparable<HostSpec> {
/** The current membership role of this host in the cluster it belongs to */
private final Optional<ClusterMembership> membership;
+ private final Optional<String> flavor;
+
public HostSpec(String hostname, Optional<ClusterMembership> membership) {
- this(hostname, new ArrayList<>(), membership);
+ this(hostname, new ArrayList<>(), Optional.empty(), membership);
}
- public HostSpec(String hostname, ClusterMembership membership) {
- this(hostname, new ArrayList<>(), Optional.of(membership));
+ public HostSpec(String hostname, ClusterMembership membership, String flavor) {
+ this(hostname, new ArrayList<>(), Optional.of(flavor), Optional.of(membership));
}
public HostSpec(String hostname, List<String> aliases) {
- this(hostname, aliases, Optional.empty());
+ this(hostname, aliases, Optional.empty(), Optional.empty());
}
public HostSpec(String hostname, List<String> aliases, ClusterMembership membership) {
- this(hostname, aliases, Optional.of(membership));
+ this(hostname, aliases, Optional.empty(), Optional.of(membership));
}
- public HostSpec(String hostname, List<String> aliases, Optional<ClusterMembership> membership) {
+ public HostSpec(String hostname, List<String> aliases, Optional<String> flavor, Optional<ClusterMembership> membership) {
if (hostname == null || hostname.isEmpty()) throw new IllegalArgumentException("Hostname must be specified");
this.hostname = hostname;
this.aliases = ImmutableList.copyOf(aliases);
+ this.flavor = flavor;
this.membership = membership;
}
@@ -53,6 +56,8 @@ public class HostSpec implements Comparable<HostSpec> {
/** Returns the aliases of this host as an immutable list. This may be empty but never null. */
public List<String> aliases() { return aliases; }
+ public Optional<String> flavor() { return flavor; }
+
/** Returns the membership of this host, or an empty value if not present */
public Optional<ClusterMembership> membership() { return membership; }
diff --git a/config-provisioning/src/main/java/com/yahoo/config/provision/ProvisionInfo.java b/config-provisioning/src/main/java/com/yahoo/config/provision/ProvisionInfo.java
index 988819aae2d..e903332bd6f 100644
--- a/config-provisioning/src/main/java/com/yahoo/config/provision/ProvisionInfo.java
+++ b/config-provisioning/src/main/java/com/yahoo/config/provision/ProvisionInfo.java
@@ -71,7 +71,7 @@ public class ProvisionInfo {
private static HostSpec createHostSpec(Inspector object) {
Optional<ClusterMembership> membership =
object.field(hostSpecMembership).valid() ? Optional.of(readMembership(object)) : Optional.empty();
- HostSpec h = new HostSpec(object.field(hostSpecHostName).asString(), Collections.<String>emptyList(), membership);
+ HostSpec h = new HostSpec(object.field(hostSpecHostName).asString(), Collections.emptyList(), Optional.empty(), membership);
return h;
}
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeRepositoryProvisioner.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeRepositoryProvisioner.java
index 2d731d3a90a..67886aa9b2c 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeRepositoryProvisioner.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeRepositoryProvisioner.java
@@ -22,9 +22,11 @@ import com.yahoo.vespa.hosted.provision.node.filter.NodeHostFilter;
import java.time.Clock;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collection;
import java.util.Comparator;
import java.util.List;
+import java.util.Optional;
import java.util.logging.Level;
import java.util.logging.Logger;
@@ -109,9 +111,11 @@ public class NodeRepositoryProvisioner implements Provisioner {
private List<HostSpec> asSortedHosts(List<Node> nodes) {
nodes.sort(Comparator.comparingInt((Node node) -> node.allocation().get().membership().index()));
List<HostSpec> hosts = new ArrayList<>(nodes.size());
- for (Node node : nodes)
+ for (Node node : nodes) {
hosts.add(new HostSpec(node.hostname(),
- node.allocation().orElseThrow(IllegalStateException::new).membership()));
+ node.allocation().orElseThrow(IllegalStateException::new).membership(),
+ node.flavor().canonicalName()));
+ }
return hosts;
}