diff options
author | Jon Bratseth <bratseth@oath.com> | 2018-04-19 15:31:52 +0200 |
---|---|---|
committer | Jon Bratseth <bratseth@oath.com> | 2018-04-19 15:31:52 +0200 |
commit | 7ac8f3b0f6cd3ff3e6556e69cc5aa97aa9ae76b9 (patch) | |
tree | 1e35300d77b8c6cc0d73b0fc6fa6ccf616f7ec90 /config-provisioning | |
parent | 1e0a2f24d4159edf46b5b457f07b33121d7e5bbf (diff) |
Load the minimal set of models needed in dev
Diffstat (limited to 'config-provisioning')
4 files changed, 40 insertions, 10 deletions
diff --git a/config-provisioning/src/main/java/com/yahoo/config/provision/AllocatedHosts.java b/config-provisioning/src/main/java/com/yahoo/config/provision/AllocatedHosts.java index 13efc2b3337..cc343821e0b 100644 --- a/config-provisioning/src/main/java/com/yahoo/config/provision/AllocatedHosts.java +++ b/config-provisioning/src/main/java/com/yahoo/config/provision/AllocatedHosts.java @@ -29,8 +29,13 @@ public class AllocatedHosts { private static final String hostSpecHostName = "hostName"; private static final String hostSpecMembership = "membership"; private static final String hostSpecFlavor = "flavor"; + + /** Wanted version */ private static final String hostSpecVespaVersion = "vespaVersion"; + /** Current version */ + private static final String hostSpecCurrentVespaVersion = "currentVespaVersion"; + private final ImmutableSet<HostSpec> hosts; AllocatedHosts(Set<HostSpec> hosts) { @@ -49,12 +54,12 @@ public class AllocatedHosts { private void toSlime(HostSpec host, Cursor cursor) { cursor.setString(hostSpecHostName, host.hostname()); - if (host.membership().isPresent()) { - cursor.setString(hostSpecMembership, host.membership().get().stringValue()); - cursor.setString(hostSpecVespaVersion, host.membership().get().cluster().vespaVersion().toString()); - } - if (host.flavor().isPresent()) - cursor.setString(hostSpecFlavor, host.flavor().get().name()); + host.membership().ifPresent(membership -> { + cursor.setString(hostSpecMembership, membership.stringValue()); + cursor.setString(hostSpecVespaVersion, membership.cluster().vespaVersion().toString()); + }); + host.flavor().ifPresent(flavor -> cursor.setString(hostSpecFlavor, flavor.name())); + host.version().ifPresent(version -> cursor.setString(hostSpecCurrentVespaVersion, version.toString())); } /** Returns the hosts of this allocation */ @@ -66,19 +71,21 @@ public class AllocatedHosts { array.traverse(new ArrayTraverser() { @Override public void entry(int i, Inspector inspector) { - hosts.add(hostsFromSlime(inspector.field(hostSpecKey), nodeFlavors)); + hosts.add(hostFromSlime(inspector.field(hostSpecKey), nodeFlavors)); } }); return new AllocatedHosts(hosts); } - static HostSpec hostsFromSlime(Inspector object, Optional<NodeFlavors> nodeFlavors) { + static HostSpec hostFromSlime(Inspector object, Optional<NodeFlavors> nodeFlavors) { Optional<ClusterMembership> membership = object.field(hostSpecMembership).valid() ? Optional.of(membershipFromSlime(object)) : Optional.empty(); Optional<Flavor> flavor = object.field(hostSpecFlavor).valid() ? flavorFromSlime(object, nodeFlavors) : Optional.empty(); + Optional<com.yahoo.component.Version> version = + optionalString(object.field(hostSpecCurrentVespaVersion)).map(com.yahoo.component.Version::new); - return new HostSpec(object.field(hostSpecHostName).asString(),Collections.emptyList(), flavor, membership); + return new HostSpec(object.field(hostSpecHostName).asString(), Collections.emptyList(), flavor, membership, version); } private static ClusterMembership membershipFromSlime(Inspector object) { @@ -91,6 +98,11 @@ public class AllocatedHosts { .orElse(Optional.empty()); } + private static Optional<String> optionalString(Inspector inspector) { + if ( ! inspector.valid()) return Optional.empty(); + return Optional.of(inspector.asString()); + } + public byte[] toJson() throws IOException { Slime slime = new Slime(); toSlime(slime.setObject()); diff --git a/config-provisioning/src/main/java/com/yahoo/config/provision/ClusterSpec.java b/config-provisioning/src/main/java/com/yahoo/config/provision/ClusterSpec.java index a0df2547631..837e062e356 100644 --- a/config-provisioning/src/main/java/com/yahoo/config/provision/ClusterSpec.java +++ b/config-provisioning/src/main/java/com/yahoo/config/provision/ClusterSpec.java @@ -38,6 +38,7 @@ public final class ClusterSpec { /** Returns the cluster id */ public Id id() { return id; } + /** Returns the version of Vespa that we want this cluster to run */ public Version vespaVersion() { return vespaVersion; } /** Returns the group within the cluster this specifies, or empty to specify the whole cluster */ 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 dd8bc311939..a6607092d8e 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 @@ -27,14 +27,21 @@ public class HostSpec implements Comparable<HostSpec> { private final Optional<Flavor> flavor; + private final Optional<com.yahoo.component.Version> version; + public HostSpec(String hostname, Optional<ClusterMembership> membership) { this(hostname, new ArrayList<>(), Optional.empty(), membership); } + // TODO: Remove after May 2018 public HostSpec(String hostname, ClusterMembership membership, Flavor flavor) { this(hostname, new ArrayList<>(), Optional.of(flavor), Optional.of(membership)); } + public HostSpec(String hostname, ClusterMembership membership, Flavor flavor, Optional<com.yahoo.component.Version> version) { + this(hostname, new ArrayList<>(), Optional.of(flavor), Optional.of(membership), version); + } + public HostSpec(String hostname, List<String> aliases) { this(hostname, aliases, Optional.empty(), Optional.empty()); } @@ -44,11 +51,18 @@ public class HostSpec implements Comparable<HostSpec> { } public HostSpec(String hostname, List<String> aliases, Optional<Flavor> flavor, Optional<ClusterMembership> membership) { + this(hostname, aliases, flavor, membership, Optional.empty()); + } + + public HostSpec(String hostname, List<String> aliases, Optional<Flavor> flavor, + Optional<ClusterMembership> membership, Optional<com.yahoo.component.Version> version) { if (hostname == null || hostname.isEmpty()) throw new IllegalArgumentException("Hostname must be specified"); + Objects.requireNonNull(version, "Version cannot be null but can be empty"); this.hostname = hostname; this.aliases = ImmutableList.copyOf(aliases); this.flavor = flavor; this.membership = membership; + this.version = version; } /** Returns the name identifying this host */ @@ -59,6 +73,9 @@ public class HostSpec implements Comparable<HostSpec> { public Optional<Flavor> flavor() { return flavor; } + /** Returns the current version of Vespa running on this node, or empty if not known */ + public Optional<com.yahoo.component.Version> version() { return version; } + /** 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 8444f2e10fc..ca8d531634b 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 @@ -39,7 +39,7 @@ public class ProvisionInfo extends AllocatedHosts { array.traverse(new ArrayTraverser() { @Override public void entry(int i, Inspector inspector) { - hosts.add(hostsFromSlime(inspector.field(hostSpecKey), nodeFlavors)); + hosts.add(hostFromSlime(inspector.field(hostSpecKey), nodeFlavors)); } }); return new ProvisionInfo(hosts); |