diff options
author | Martin Polden <mpolden@mpolden.no> | 2020-05-06 12:08:08 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-05-06 12:08:08 +0200 |
commit | d64df30cfbc15c6ca1d24827d39a8d2267a21c91 (patch) | |
tree | b424351521124ab71e6e1296cad3d79eaa0ac26f | |
parent | 0386e863ae5743760ac462c68a3fbb8846b1495c (diff) | |
parent | 7de538df1f9f4058279380a85f952c6f64b40fe4 (diff) |
Merge pull request #13164 from vespa-engine/mpolden/current-os-version
Set current OS version for provisioned host
4 files changed, 28 insertions, 20 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/OsVersion.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/OsVersion.java index 0622862f5ab..1216c060181 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/OsVersion.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/OsVersion.java @@ -19,8 +19,8 @@ public class OsVersion { private final Optional<Version> wanted; public OsVersion(Optional<Version> current, Optional<Version> wanted) { - this.current = requireNonEmpty(current); - this.wanted = requireNonEmpty(wanted); + this.current = current; + this.wanted = requireNonZero(wanted); } /** The version this node is currently running, if any */ @@ -78,10 +78,10 @@ public class OsVersion { wanted.map(Version::toFullString).orElse("<unset>") + "]"; } - private static Optional<Version> requireNonEmpty(Optional<Version> version) { + private static Optional<Version> requireNonZero(Optional<Version> version) { Objects.requireNonNull(version, "version must be non-null"); if (version.isEmpty()) return version; - if (version.get().isEmpty()) throw new IllegalArgumentException("version must be non-empty"); + if (version.get().isEmpty()) throw new IllegalArgumentException("version must be non-zero"); return version; } diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisionedHost.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisionedHost.java index b979ccda740..151fcb4233f 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisionedHost.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisionedHost.java @@ -1,11 +1,13 @@ // Copyright 2019 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.provision.provisioning; +import com.yahoo.component.Version; import com.yahoo.config.provision.Flavor; import com.yahoo.config.provision.NodeResources; import com.yahoo.config.provision.NodeType; import com.yahoo.vespa.hosted.provision.Node; import com.yahoo.vespa.hosted.provision.node.IP; +import com.yahoo.vespa.hosted.provision.node.OsVersion; import java.util.Objects; import java.util.Optional; @@ -23,18 +25,21 @@ public class ProvisionedHost { private final Flavor hostFlavor; private final String nodeHostname; private final NodeResources nodeResources; + private final Version osVersion; - public ProvisionedHost(String id, String hostHostname, Flavor hostFlavor, String nodeHostname, NodeResources nodeResources) { + public ProvisionedHost(String id, String hostHostname, Flavor hostFlavor, String nodeHostname, NodeResources nodeResources, Version osVersion) { this.id = Objects.requireNonNull(id, "Host id must be set"); this.hostHostname = Objects.requireNonNull(hostHostname, "Host hostname must be set"); this.hostFlavor = Objects.requireNonNull(hostFlavor, "Host flavor must be set"); this.nodeHostname = Objects.requireNonNull(nodeHostname, "Node hostname must be set"); this.nodeResources = Objects.requireNonNull(nodeResources, "Node resources must be set"); + this.osVersion = Objects.requireNonNull(osVersion, "OS version must be set"); } /** Generate {@link Node} instance representing the provisioned physical host */ public Node generateHost() { - return Node.create(id, IP.Config.EMPTY, hostHostname, Optional.empty(), Optional.empty(), hostFlavor, Optional.empty(), NodeType.host); + var node = Node.create(id, IP.Config.EMPTY, hostHostname, Optional.empty(), Optional.empty(), hostFlavor, Optional.empty(), NodeType.host); + return node.with(node.status().withOsVersion(OsVersion.EMPTY.withCurrent(Optional.of(osVersion)))); } /** Generate {@link Node} instance representing the node running on this physical host */ @@ -66,26 +71,28 @@ public class ProvisionedHost { if (o == null || getClass() != o.getClass()) return false; ProvisionedHost that = (ProvisionedHost) o; return id.equals(that.id) && - hostHostname.equals(that.hostHostname) && - hostFlavor.equals(that.hostFlavor) && - nodeHostname.equals(that.nodeHostname) && - nodeResources.equals(that.nodeResources); + hostHostname.equals(that.hostHostname) && + hostFlavor.equals(that.hostFlavor) && + nodeHostname.equals(that.nodeHostname) && + nodeResources.equals(that.nodeResources) && + osVersion.equals(that.osVersion); } @Override public int hashCode() { - return Objects.hash(id, hostHostname, hostFlavor, nodeHostname, nodeResources); + return Objects.hash(id, hostHostname, hostFlavor, nodeHostname, nodeResources, osVersion); } @Override public String toString() { return "ProvisionedHost{" + - "id='" + id + '\'' + - ", hostHostname='" + hostHostname + '\'' + - ", hostFlavor=" + hostFlavor + - ", nodeHostname='" + nodeHostname + '\'' + - ", nodeResources=" + nodeResources + - '}'; + "id='" + id + '\'' + + ", hostHostname='" + hostHostname + '\'' + + ", hostFlavor=" + hostFlavor + + ", nodeHostname='" + nodeHostname + '\'' + + ", nodeResources=" + nodeResources + + ", osVersion=" + osVersion + + '}'; } } diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTester.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTester.java index 8da47d442d2..5233181bfbf 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTester.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTester.java @@ -241,7 +241,8 @@ class AutoscalingTester { "hostname" + index, hostFlavor, "nodename" + index, - resources)); + resources, + osVersion)); } return hosts; } diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DynamicDockerProvisionTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DynamicDockerProvisionTest.java index a586a7d19df..a32baf5beda 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DynamicDockerProvisionTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DynamicDockerProvisionTest.java @@ -294,7 +294,7 @@ public class DynamicDockerProvisionTest { List<Integer> provisionIndexes = (List<Integer>) invocation.getArguments()[0]; NodeResources nodeResources = (NodeResources) invocation.getArguments()[1]; return provisionIndexes.stream() - .map(i -> new ProvisionedHost("id-" + i, "host-" + i, hostFlavor, "host-" + i + "-1", nodeResources)) + .map(i -> new ProvisionedHost("id-" + i, "host-" + i, hostFlavor, "host-" + i + "-1", nodeResources, Version.emptyVersion)) .collect(Collectors.toList()); }).when(hostProvisioner).provisionHosts(any(), any(), any(), any()); } @@ -337,7 +337,7 @@ public class DynamicDockerProvisionTest { if (hostFlavor.isEmpty()) throw new OutOfCapacityException("No host flavor matches " + resources); return provisionIndexes.stream() - .map(i -> new ProvisionedHost("id-" + i, "host-" + i, hostFlavor.get(), "host-" + i + "-1", resources)) + .map(i -> new ProvisionedHost("id-" + i, "host-" + i, hostFlavor.get(), "host-" + i + "-1", resources, osVersion)) .collect(Collectors.toList()); } |