summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/NodesSpecification.java31
-rw-r--r--config-provisioning/src/main/java/com/yahoo/config/provision/ClusterSpec.java27
-rw-r--r--config-provisioning/src/main/java/com/yahoo/config/provision/ProvisionInfo.java4
-rw-r--r--config-provisioning/src/test/java/com/yahoo/config/provision/ProvisionInfoTest.java2
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/deploy/HostedDeployTest.java2
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/NodeSerializer.java3
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/v2/NodesResponse.java4
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/persistence/SerializationTest.java10
8 files changed, 51 insertions, 32 deletions
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 8eab3b0082d..c29990b02e6 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
@@ -1,6 +1,7 @@
// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.model.builder.xml.dom;
+import com.yahoo.component.Version;
import com.yahoo.config.provision.Capacity;
import com.yahoo.config.provision.ClusterMembership;
import com.yahoo.config.provision.ClusterSpec;
@@ -25,31 +26,37 @@ public class NodesSpecification {
private final int groups;
+ /** The Vespa version we want the nodes to run */
+ private Version version;
+
/**
* Whether the capacity amount specified is required or can it be relaxed
* at the discretion of the component fulfilling it
*/
private final boolean required;
-
+
+ /** The flavor the nodes should have, or empty to use the default */
private final Optional<String> flavor;
/** The identifier of the custom docker image layer to use (not supported yet) */
private final Optional<String> dockerImage;
- private NodesSpecification(boolean dedicated, int count, int groups, boolean required,
+ private NodesSpecification(boolean dedicated, int count, int groups, Version version, boolean required,
Optional<String> flavor, Optional<String> dockerImage) {
this.dedicated = dedicated;
this.count = count;
this.groups = groups;
+ this.version = version;
this.required = required;
this.flavor = flavor;
this.dockerImage = dockerImage;
}
- private NodesSpecification(boolean dedicated, ModelElement nodesElement) {
+ private NodesSpecification(boolean dedicated, Version version, ModelElement nodesElement) {
this(dedicated,
nodesElement.requiredIntegerAttribute("count"),
nodesElement.getIntegerAttribute("groups", 1),
+ version,
nodesElement.getBooleanAttribute("required", false),
Optional.ofNullable(nodesElement.getStringAttribute("flavor")),
Optional.ofNullable(nodesElement.getStringAttribute("docker-image")));
@@ -58,8 +65,8 @@ public class NodesSpecification {
/**
* Returns a requirement for dedicated nodes taken from the given <code>nodes</code> element
*/
- public static NodesSpecification from(ModelElement nodesElement) {
- return new NodesSpecification(true, nodesElement);
+ public static NodesSpecification from(ModelElement nodesElement, Version version) {
+ return new NodesSpecification(true, version, nodesElement);
}
/**
@@ -67,11 +74,11 @@ public class NodesSpecification {
* contained in the given parent element, or empty if the parent element is null, or the nodes elements
* is not present.
*/
- public static Optional<NodesSpecification> fromParent(ModelElement parentElement) {
+ public static Optional<NodesSpecification> fromParent(ModelElement parentElement, Version version) {
if (parentElement == null) return Optional.empty();
ModelElement nodesElement = parentElement.getChild("nodes");
if (nodesElement == null) return Optional.empty();
- return Optional.of(from(nodesElement));
+ return Optional.of(from(nodesElement, version));
}
/**
@@ -79,16 +86,16 @@ public class NodesSpecification {
* contained in the given parent element, or empty if the parent element is null, or the nodes elements
* is not present.
*/
- public static Optional<NodesSpecification> optionalDedicatedFromParent(ModelElement parentElement) {
+ public static Optional<NodesSpecification> optionalDedicatedFromParent(ModelElement parentElement, Version version) {
if (parentElement == null) return Optional.empty();
ModelElement nodesElement = parentElement.getChild("nodes");
if (nodesElement == null) return Optional.empty();
- return Optional.of(new NodesSpecification(nodesElement.getBooleanAttribute("dedicated", false), nodesElement));
+ return Optional.of(new NodesSpecification(nodesElement.getBooleanAttribute("dedicated", false), version, nodesElement));
}
/** Returns a requirement from <code>count</code> nondedicated nodes in one group */
- public static NodesSpecification nonDedicated(int count) {
- return new NodesSpecification(false, count, 1, false, Optional.empty(), Optional.empty());
+ public static NodesSpecification nonDedicated(int count, Version version) {
+ return new NodesSpecification(false, count, 1, version, false, Optional.empty(), Optional.empty());
}
/**
@@ -104,7 +111,7 @@ public class NodesSpecification {
public int groups() { return groups; }
public Map<HostResource, ClusterMembership> provision(HostSystem hostSystem, ClusterSpec.Type clusterType, ClusterSpec.Id clusterId, DeployLogger logger) {
- ClusterSpec cluster = ClusterSpec.request(clusterType, clusterId, dockerImage);
+ ClusterSpec cluster = ClusterSpec.request(clusterType, clusterId, version, dockerImage);
return hostSystem.allocateHosts(cluster, Capacity.fromNodeCount(count, flavor, required), groups, logger);
}
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 07b120bed73..ec655f0eee2 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
@@ -19,9 +19,9 @@ public final class ClusterSpec {
/** The group id of these hosts, or empty if this is represents a request for hosts */
private final Optional<Group> groupId;
- private final Optional<Version> vespaVersion;
+ private final Version vespaVersion;
- private ClusterSpec(Type type, Id id, Optional<Group> groupId, Optional<Version> vespaVersion) {
+ private ClusterSpec(Type type, Id id, Optional<Group> groupId, Version vespaVersion) {
this.type = type;
this.id = id;
this.groupId = groupId;
@@ -34,10 +34,10 @@ public final class ClusterSpec {
/** Returns the cluster id */
public Id id() { return id; }
- public Optional<Version> vespaVersion() { return vespaVersion; }
+ public Version vespaVersion() { return vespaVersion; }
- public Optional<String> dockerImage() {
- return vespaVersion.map(DockerImage.defaultImage::withTag).map(DockerImage::toString);
+ public String dockerImage() {
+ return DockerImage.defaultImage.withTag(vespaVersion).toString();
}
/** Returns the group within the cluster this specifies, or empty to specify the whole cluster */
@@ -53,20 +53,35 @@ public final class ClusterSpec {
}
/** Create a specification <b>requesting</b> a cluster with these attributes */
+ // TODO: April 2017 - Remove this when no version older than 6.97 is used anywhere
public static ClusterSpec requestVersion(Type type, Id id, Optional<Version> vespaVersion) {
+ return new ClusterSpec(type, id, Optional.empty(), vespaVersion.get());
+ }
+
+ public static ClusterSpec request(Type type, Id id, Version vespaVersion) {
return new ClusterSpec(type, id, Optional.empty(), vespaVersion);
}
/** Create a specification <b>specifying</b> an existing cluster group having these attributes */
+ // TODO: April 2017 - Remove this when no version older than 6.97 is used anywhere
public static ClusterSpec from(Type type, Id id, Group groupId, Optional<Version> vespaVersion) {
+ return new ClusterSpec(type, id, Optional.of(groupId), vespaVersion.get());
+ }
+
+ /** Create a specification <b>specifying</b> an existing cluster group having these attributes */
+ // TODO: April 2017 - Remove this when no version older than 6.97 is used anywhere
+ public static ClusterSpec from(Type type, Id id, Group groupId, Version vespaVersion) {
return new ClusterSpec(type, id, Optional.of(groupId), vespaVersion);
}
+ neste: - sørg for at ingen bruker deprecateds over
+ - gå tilbake til NodeSpecification og sørg for at version sendes inn der fra ModelContext
+
@Override
public String toString() {
return String.join(" ", type.toString(), id.toString(),
groupId.map(Group::toString).orElse(""),
- vespaVersion.orElse(Version.emptyVersion).toString());
+ vespaVersion.toString());
}
@Override
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 c5ccb7d2f58..cc7d871d23f 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
@@ -9,7 +9,6 @@ import com.yahoo.vespa.config.SlimeUtils;
import java.io.IOException;
import java.util.*;
-import java.util.logging.Logger;
/**
* Information about provisioned hosts, and (de)serialization (from)to JSON.
@@ -48,8 +47,7 @@ public class ProvisionInfo {
cursor.setString(hostSpecHostName, host.hostname());
if (host.membership().isPresent()) {
cursor.setString(hostSpecMembership, host.membership().get().stringValue());
- if (host.membership().get().cluster().dockerImage().isPresent())
- cursor.setString(dockerImage, host.membership().get().cluster().dockerImage().get());
+ cursor.setString(dockerImage, host.membership().get().cluster().dockerImage());
}
if (host.flavor().isPresent())
cursor.setString(hostSpecFlavor, host.flavor().get().name());
diff --git a/config-provisioning/src/test/java/com/yahoo/config/provision/ProvisionInfoTest.java b/config-provisioning/src/test/java/com/yahoo/config/provision/ProvisionInfoTest.java
index a6ccdb8536f..2538d687c1d 100644
--- a/config-provisioning/src/test/java/com/yahoo/config/provision/ProvisionInfoTest.java
+++ b/config-provisioning/src/test/java/com/yahoo/config/provision/ProvisionInfoTest.java
@@ -57,7 +57,7 @@ public class ProvisionInfoTest {
assertTrue(serializedInfo.getHosts().contains(h4));
assertTrue(!getHost(h1.hostname(), serializedInfo.getHosts()).membership().isPresent());
assertEquals("container/test/0", getHost(h3.hostname(), serializedInfo.getHosts()).membership().get().stringValue());
- assertEquals("docker-registry.ops.yahoo.com:4443/vespa/ci:6.42.1", getHost(h4.hostname(), serializedInfo.getHosts()).membership().get().cluster().dockerImage().get());
+ assertEquals("docker-registry.ops.yahoo.com:4443/vespa/ci:6.42.1", getHost(h4.hostname(), serializedInfo.getHosts()).membership().get().cluster().dockerImage());
}
private HostSpec getHost(String hostname, Set<HostSpec> hosts) {
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/deploy/HostedDeployTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/deploy/HostedDeployTest.java
index a6ad3aff6a2..22db3a6e1c2 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/deploy/HostedDeployTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/deploy/HostedDeployTest.java
@@ -97,7 +97,7 @@ public class HostedDeployTest {
private void assertProvisionInfo(String vespaVersion, DeployTester tester, ApplicationId applicationId) {
tester.getProvisionInfoFromDeployedApp(applicationId).getHosts().stream()
.forEach(h -> assertEquals(dockerRegistry + dockerVespaBaseImage + ":" + vespaVersion,
- h.membership().get().cluster().dockerImage().get()));
+ h.membership().get().cluster().dockerImage()));
}
private static ConfigserverConfig createConfigserverConfig() {
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/NodeSerializer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/NodeSerializer.java
index 7f13ff1a13c..c91548f9ca7 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/NodeSerializer.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/NodeSerializer.java
@@ -125,8 +125,7 @@ public class NodeSerializer {
object.setLong(restartGenerationKey, allocation.restartGeneration().wanted());
object.setLong(currentRestartGenerationKey, allocation.restartGeneration().current());
object.setBool(removableKey, allocation.isRemovable());
- allocation.membership().cluster().vespaVersion()
- .ifPresent(version -> object.setString(wantedVespaVersionKey, version.toString()));
+ object.setString(wantedVespaVersionKey, allocation.membership().cluster().vespaVersion().toString());
}
private void toSlime(History history, Cursor array) {
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/v2/NodesResponse.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/v2/NodesResponse.java
index 2766a219931..0ac82f1dbd8 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/v2/NodesResponse.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/v2/NodesResponse.java
@@ -156,8 +156,8 @@ class NodesResponse extends HttpResponse {
toSlime(node.allocation().get().membership(), object.setObject("membership"));
object.setLong("restartGeneration", node.allocation().get().restartGeneration().wanted());
object.setLong("currentRestartGeneration", node.allocation().get().restartGeneration().current());
- node.allocation().get().membership().cluster().dockerImage().ifPresent(image -> object.setString("wantedDockerImage", image));
- node.allocation().get().membership().cluster().vespaVersion().ifPresent(version -> object.setString("wantedVespaVersion", version.toFullString()));
+ object.setString("wantedDockerImage", node.allocation().get().membership().cluster().dockerImage());
+ object.setString("wantedVespaVersion", node.allocation().get().membership().cluster().vespaVersion().toFullString());
}
object.setLong("rebootGeneration", node.status().reboot().wanted());
object.setLong("currentRebootGeneration", node.status().reboot().current());
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/persistence/SerializationTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/persistence/SerializationTest.java
index 97610e17b45..3d38adca4d3 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/persistence/SerializationTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/persistence/SerializationTest.java
@@ -230,7 +230,7 @@ public class SerializationTest {
false));
Node deserializedNode = nodeSerializer.fromJson(State.provisioned, nodeSerializer.toJson(nodeWithAllocation));
- assertEquals("docker-registry.ops.yahoo.com:4443/vespa/ci:6.42.0", deserializedNode.allocation().get().membership().cluster().dockerImage().get());
+ assertEquals("docker-registry.ops.yahoo.com:4443/vespa/ci:6.42.0", deserializedNode.allocation().get().membership().cluster().dockerImage());
}
@Test
@@ -279,8 +279,8 @@ public class SerializationTest {
" }\n" +
"}";
Node node = nodeSerializer.fromJson(State.active, Utf8.toBytes(nodeWithDockerImage));
- assertEquals("6.42.1", node.allocation().get().membership().cluster().vespaVersion().get().toString());
- assertEquals("docker-registry.ops.yahoo.com:4443/vespa/ci:6.42.1", node.allocation().get().membership().cluster().dockerImage().get());
+ assertEquals("6.42.1", node.allocation().get().membership().cluster().vespaVersion().toString());
+ assertEquals("docker-registry.ops.yahoo.com:4443/vespa/ci:6.42.1", node.allocation().get().membership().cluster().dockerImage());
String nodeWithWantedVespaVersion =
"{\n" +
@@ -295,8 +295,8 @@ public class SerializationTest {
" }\n" +
"}";
node = nodeSerializer.fromJson(State.active, Utf8.toBytes(nodeWithWantedVespaVersion));
- assertEquals("6.42.2", node.allocation().get().membership().cluster().vespaVersion().get().toString());
- assertEquals("docker-registry.ops.yahoo.com:4443/vespa/ci:6.42.2", node.allocation().get().membership().cluster().dockerImage().get());
+ assertEquals("6.42.2", node.allocation().get().membership().cluster().vespaVersion().toString());
+ assertEquals("docker-registry.ops.yahoo.com:4443/vespa/ci:6.42.2", node.allocation().get().membership().cluster().dockerImage());
}
@Test