summaryrefslogtreecommitdiffstats
path: root/node-repository
diff options
context:
space:
mode:
authorMartin Polden <martin.polden@gmail.com>2017-04-04 12:41:32 +0200
committerMartin Polden <martin.polden@gmail.com>2017-04-04 13:02:47 +0200
commit2132e0bf56e09016f6e2ae020ab42352e56072cc (patch)
tree811225d2d1eaa67f81b6aced43ea6d54846e9372 /node-repository
parent9b43f1a3707664da3ab78e4fb4692ce6e924e2cf (diff)
Stop persisting current Docker image
Diffstat (limited to 'node-repository')
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/Status.java38
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/NodeSerializer.java2
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockNodeRepository.java4
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/persistence/SerializationTest.java15
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/RestApiTest.java3
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node10.json1
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node4-after-changes.json4
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node4.json3
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node5.json2
9 files changed, 47 insertions, 25 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/Status.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/Status.java
index 37c80c574d8..1d8a1356836 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/Status.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/Status.java
@@ -2,6 +2,7 @@
package com.yahoo.vespa.hosted.provision.node;
import com.yahoo.component.Version;
+import com.yahoo.config.provision.DockerImage;
import javax.annotation.concurrent.Immutable;
import java.util.Optional;
@@ -16,9 +17,8 @@ public class Status {
private final Generation reboot;
private final Optional<Version> vespaVersion;
- private final Optional<Version> hostedVersion;
- private final Optional<String> stateVersion;
- private final Optional<String> dockerImage;
+ private final Optional<Version> hostedVersion; // TODO: Remove when all nodes have started using vespaVersion
+ private final Optional<String> stateVersion; // TODO: Remove when all nodes have started using vespaVersion
private final int failCount;
private final Optional<HardwareFailureType> hardwareFailure;
private final boolean wantToRetire;
@@ -41,7 +41,6 @@ public class Status {
Optional<Version> vespaVersion,
Optional<Version> hostedVersion,
Optional<String> stateVersion,
- Optional<String> dockerImage,
int failCount,
Optional<HardwareFailureType> hardwareFailure,
boolean wantToRetire) {
@@ -49,32 +48,31 @@ public class Status {
this.vespaVersion = vespaVersion;
this.hostedVersion = hostedVersion;
this.stateVersion = stateVersion;
- this.dockerImage = dockerImage;
this.failCount = failCount;
this.hardwareFailure = hardwareFailure;
this.wantToRetire = wantToRetire;
}
/** Returns a copy of this with the reboot generation changed */
- public Status withReboot(Generation reboot) { return new Status(reboot, vespaVersion, hostedVersion, stateVersion, dockerImage, failCount, hardwareFailure, wantToRetire); }
+ public Status withReboot(Generation reboot) { return new Status(reboot, vespaVersion, hostedVersion, stateVersion, failCount, hardwareFailure, wantToRetire); }
/** Returns the reboot generation of this node */
public Generation reboot() { return reboot; }
/** Returns a copy of this with the vespa version changed */
- public Status withVespaVersion(Version version) { return new Status(reboot, Optional.of(version), hostedVersion, stateVersion, dockerImage, failCount, hardwareFailure, wantToRetire); }
+ public Status withVespaVersion(Version version) { return new Status(reboot, Optional.of(version), hostedVersion, stateVersion, failCount, hardwareFailure, wantToRetire); }
/** Returns the Vespa version installed on the node, if known */
public Optional<Version> vespaVersion() { return vespaVersion; }
/** Returns a copy of this with the hosted version changed */
- public Status withHostedVersion(Version version) { return new Status(reboot, vespaVersion, Optional.of(version), stateVersion, dockerImage, failCount, hardwareFailure, wantToRetire); }
+ public Status withHostedVersion(Version version) { return new Status(reboot, vespaVersion, Optional.of(version), stateVersion, failCount, hardwareFailure, wantToRetire); }
/** Returns the hosted version installed on the node, if known */
public Optional<Version> hostedVersion() { return hostedVersion; }
/** Returns a copy of this with the state version changed */
- public Status withStateVersion(String version) { return new Status(reboot, vespaVersion, hostedVersion, Optional.of(version), dockerImage, failCount, hardwareFailure, wantToRetire); }
+ public Status withStateVersion(String version) { return new Status(reboot, vespaVersion, hostedVersion, Optional.of(version), failCount, hardwareFailure, wantToRetire); }
/**
* Returns the state version the node last successfully converged with.
@@ -85,28 +83,34 @@ public class Status {
public Optional<String> stateVersion() { return stateVersion; }
/** Returns a copy of this with the docker image changed */
- public Status withDockerImage(String dockerImage) { return new Status(reboot, vespaVersion, hostedVersion, stateVersion, Optional.of(dockerImage), failCount, hardwareFailure, wantToRetire); }
+ public Status withDockerImage(String dockerImage) {
+ Optional<Version> vespaVersion = Optional.of(dockerImage)
+ .filter(image -> !image.isEmpty())
+ .map(DockerImage::new)
+ .map(DockerImage::tagAsVersion);
+ return new Status(reboot, vespaVersion, hostedVersion, stateVersion, failCount, hardwareFailure, wantToRetire);
+ }
/** Returns the current docker image the node is running, if known. */
- public Optional<String> dockerImage() { return dockerImage; }
+ public Optional<String> dockerImage() { return vespaVersion.map(DockerImage.defaultImage::withTag).map(DockerImage::toString); }
- public Status withIncreasedFailCount() { return new Status(reboot, vespaVersion, hostedVersion, stateVersion, dockerImage, failCount + 1, hardwareFailure, wantToRetire); }
+ public Status withIncreasedFailCount() { return new Status(reboot, vespaVersion, hostedVersion, stateVersion, failCount + 1, hardwareFailure, wantToRetire); }
- public Status withDecreasedFailCount() { return new Status(reboot, vespaVersion, hostedVersion, stateVersion, dockerImage, failCount - 1, hardwareFailure, wantToRetire); }
+ public Status withDecreasedFailCount() { return new Status(reboot, vespaVersion, hostedVersion, stateVersion, failCount - 1, hardwareFailure, wantToRetire); }
- public Status setFailCount(Integer value) { return new Status(reboot, vespaVersion, hostedVersion, stateVersion, dockerImage, value, hardwareFailure, wantToRetire); }
+ public Status setFailCount(Integer value) { return new Status(reboot, vespaVersion, hostedVersion, stateVersion, value, hardwareFailure, wantToRetire); }
/** Returns how many times this node has been moved to the failed state. */
public int failCount() { return failCount; }
- public Status withHardwareFailure(Optional<HardwareFailureType> hardwareFailure) { return new Status(reboot, vespaVersion, hostedVersion, stateVersion, dockerImage, failCount, hardwareFailure, wantToRetire); }
+ public Status withHardwareFailure(Optional<HardwareFailureType> hardwareFailure) { return new Status(reboot, vespaVersion, hostedVersion, stateVersion, failCount, hardwareFailure, wantToRetire); }
/** Returns the type of the last hardware failure detected on this node, or empty if none */
public Optional<HardwareFailureType> hardwareFailure() { return hardwareFailure; }
/** Returns a copy of this with the want to retire flag changed */
public Status withWantToRetire(boolean wantToRetire) {
- return new Status(reboot, vespaVersion, hostedVersion, stateVersion, dockerImage, failCount, hardwareFailure, wantToRetire);
+ return new Status(reboot, vespaVersion, hostedVersion, stateVersion, failCount, hardwareFailure, wantToRetire);
}
/**
@@ -118,6 +122,6 @@ public class Status {
}
/** Returns the initial status of a newly provisioned node */
- public static Status initial() { return new Status(Generation.inital(), Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), 0, Optional.empty(), false); }
+ public static Status initial() { return new Status(Generation.inital(), Optional.empty(), Optional.empty(), Optional.empty(), 0, Optional.empty(), false); }
}
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 090c4e6bfef..5e9d1ddd6a1 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
@@ -109,7 +109,6 @@ public class NodeSerializer {
node.status().vespaVersion().ifPresent(version -> object.setString(vespaVersionKey, version.toString()));
node.status().hostedVersion().ifPresent(version -> object.setString(hostedVersionKey, version.toString()));
node.status().stateVersion().ifPresent(version -> object.setString(stateVersionKey, version));
- node.status().dockerImage().ifPresent(image -> object.setString(dockerImageKey, image));
object.setLong(failCountKey, node.status().failCount());
node.status().hardwareFailure().ifPresent(failure -> object.setString(hardwareFailureKey, toString(failure)));
object.setBool(wantToRetireKey, node.status().wantToRetire());
@@ -169,7 +168,6 @@ public class NodeSerializer {
softwareVersionFromSlime(object.field(vespaVersionKey)),
softwareVersionFromSlime(object.field(hostedVersionKey)),
optionalString(object.field(stateVersionKey)),
- optionalString(object.field(dockerImageKey)),
(int)object.field(failCountKey).asLong(),
hardwareFailureFromSlime(object.field(hardwareFailureKey)),
object.field(wantToRetireKey).asBool());
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockNodeRepository.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockNodeRepository.java
index ef9639ed460..2b5d8cb1708 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockNodeRepository.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockNodeRepository.java
@@ -71,11 +71,11 @@ public class MockNodeRepository extends NodeRepository {
// TODO: Use docker flavor
Node node4 = createNode("node4", "host4.yahoo.com", ipAddresses, Optional.of("dockerhost4"), flavors.getFlavorOrThrow("default"), NodeType.tenant);
- node4 = node4.with(node4.status().withDockerImage("image-12"));
+ node4 = node4.with(node4.status().withDockerImage("image-12:6.41.0"));
nodes.add(node4);
Node node5 = createNode("node5", "host5.yahoo.com", ipAddresses, Optional.of("parent1.yahoo.com"), flavors.getFlavorOrThrow("default"), NodeType.tenant);
- nodes.add(node5.with(node5.status().withDockerImage("image-123").withVespaVersion(new Version("1.2.3"))));
+ nodes.add(node5.with(node5.status().withDockerImage("image-123:1.2.3").withVespaVersion(new Version("1.2.3"))));
nodes.add(createNode("node6", "host6.yahoo.com", ipAddresses, Optional.empty(), flavors.getFlavorOrThrow("default"), NodeType.tenant));
nodes.add(createNode("node7", "host7.yahoo.com", ipAddresses, Optional.empty(), flavors.getFlavorOrThrow("default"), NodeType.tenant));
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 940715db8b4..97610e17b45 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
@@ -299,6 +299,21 @@ public class SerializationTest {
assertEquals("docker-registry.ops.yahoo.com:4443/vespa/ci:6.42.2", node.allocation().get().membership().cluster().dockerImage().get());
}
+ @Test
+ public void docker_image_is_derived_from_vespa_version() throws Exception {
+ String nodeData =
+ "{\n" +
+ " \"type\" : \"tenant\",\n" +
+ " \"flavor\" : \"large\",\n" +
+ " \"openStackId\" : \"myId\",\n" +
+ " \"hostname\" : \"myHostname\",\n" +
+ " \"ipAddresses\" : [\"127.0.0.1\"],\n" +
+ " \"vespaVersion\": \"6.42.1\"\n" +
+ "}";
+ Node node = nodeSerializer.fromJson(State.active, Utf8.toBytes(nodeData));
+ assertEquals("docker-registry.ops.yahoo.com:4443/vespa/ci:6.42.1", node.status().dockerImage().get());
+ }
+
private byte[] createNodeJson(String hostname, String... ipAddress) {
String ipAddressJsonPart = "";
if (ipAddress.length > 0) {
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/RestApiTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/RestApiTest.java
index 1ef453eaecf..fbc0ea96fb6 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/RestApiTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/RestApiTest.java
@@ -170,6 +170,9 @@ public class RestApiTest {
assertResponse(new Request("http://localhost:8080/nodes/v2/node/host4.yahoo.com",
Utf8.toBytes("{\"wantToRetire\": true}"), Request.Method.PATCH),
"{\"message\":\"Updated host4.yahoo.com\"}");
+ assertResponse(new Request("http://localhost:8080/nodes/v2/node/host4.yahoo.com",
+ Utf8.toBytes("{\"currentDockerImage\": \"ignored-image-name:4443/vespa/ci:6.43.0\"}"), Request.Method.PATCH),
+ "{\"message\":\"Updated host4.yahoo.com\"}");
assertFile(new Request("http://localhost:8080/nodes/v2/node/host4.yahoo.com"), "node4-after-changes.json");
}
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node10.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node10.json
index bfa88681879..9d37e94e623 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node10.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node10.json
@@ -33,6 +33,7 @@
"currentRebootGeneration": 0,
"vespaVersion": "5.104.142",
"hostedVersion": "2.1.2408",
+ "currentDockerImage": "docker-registry.ops.yahoo.com:4443/vespa/ci:5.104.142",
"convergedStateVersion": "5.104.142-2.1.2408",
"failCount": 0,
"hardwareFailure" : false,
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node4-after-changes.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node4-after-changes.json
index 281a87ea372..6e0ac0c9e2b 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node4-after-changes.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node4-after-changes.json
@@ -31,9 +31,9 @@
"wantedVespaVersion": "6.42.0",
"rebootGeneration": 2,
"currentRebootGeneration": 1,
- "vespaVersion": "5.104.142",
+ "vespaVersion": "6.43.0",
"hostedVersion": "2.1.2408",
- "currentDockerImage": "image-12",
+ "currentDockerImage": "docker-registry.ops.yahoo.com:4443/vespa/ci:6.43.0",
"convergedStateVersion": "5.104.142-2.1.2408",
"failCount": 0,
"hardwareFailure": true,
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node4.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node4.json
index 04db01226da..5278f0dd6bf 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node4.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node4.json
@@ -31,7 +31,8 @@
"wantedVespaVersion": "6.42.0",
"rebootGeneration": 1,
"currentRebootGeneration": 0,
- "currentDockerImage":"image-12",
+ "vespaVersion": "6.41.0",
+ "currentDockerImage": "docker-registry.ops.yahoo.com:4443/vespa/ci:6.41.0",
"failCount": 0,
"hardwareFailure" : false,
"wantToRetire" : false,
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node5.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node5.json
index 082c79f8a6d..6ec3a7562ac 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node5.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node5.json
@@ -16,7 +16,7 @@
"rebootGeneration": 1,
"currentRebootGeneration": 0,
"vespaVersion": "1.2.3",
- "currentDockerImage":"image-123",
+ "currentDockerImage": "docker-registry.ops.yahoo.com:4443/vespa/ci:1.2.3",
"failCount": 1,
"hardwareFailure" : false,
"wantToRetire" : false,