summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJon Marius Venstad <jvenstad@yahoo-inc.com>2019-06-20 13:19:23 +0200
committerJon Marius Venstad <jvenstad@yahoo-inc.com>2019-06-20 13:19:23 +0200
commit28144ea890d73be82f3c7a2c9a9ee7dbb491a061 (patch)
treef6840ef610d57d397b362b3254dd004dbb5dc370
parente841033df8a4aac9d875d4161981980b878c8c61 (diff)
Store whether versions have been released to customer-available repo for builds
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/VersionStatusSerializer.java3
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/versions/VersionStatus.java12
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/versions/VespaVersion.java7
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/VersionStatusSerializerTest.java5
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/deployment/DeploymentApiTest.java1
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/versions/VersionStatusTest.java7
6 files changed, 27 insertions, 8 deletions
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/VersionStatusSerializer.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/VersionStatusSerializer.java
index 405a2e452d0..a4b339a69bc 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/VersionStatusSerializer.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/VersionStatusSerializer.java
@@ -42,6 +42,7 @@ public class VersionStatusSerializer {
private static final String committedAtField = "releasedAt";
private static final String isControllerVersionField = "isCurrentControllerVersion";
private static final String isSystemVersionField = "isCurrentSystemVersion";
+ private static final String isReleasedField = "isReleased";
private static final String deploymentStatisticsField = "deploymentStatistics";
private static final String confidenceField = "confidence";
private static final String configServersField = "configServerHostnames";
@@ -73,6 +74,7 @@ public class VersionStatusSerializer {
object.setLong(committedAtField, version.committedAt().toEpochMilli());
object.setBool(isControllerVersionField, version.isControllerVersion());
object.setBool(isSystemVersionField, version.isSystemVersion());
+ object.setBool(isReleasedField, version.isReleased());
deploymentStatisticsToSlime(version.statistics(), object.setObject(deploymentStatisticsField));
object.setString(confidenceField, version.confidence().name());
configServersToSlime(version.systemApplicationHostnames(), object.setArray(configServersField));
@@ -105,6 +107,7 @@ public class VersionStatusSerializer {
Instant.ofEpochMilli(object.field(committedAtField).asLong()),
object.field(isControllerVersionField).asBool(),
object.field(isSystemVersionField).asBool(),
+ object.field(isReleasedField).asBool(),
configServersFromSlime(object.field(configServersField)),
VespaVersion.Confidence.valueOf(object.field(confidenceField).asString())
);
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/versions/VersionStatus.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/versions/VersionStatus.java
index 54eee4296dd..6ff14730285 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/versions/VersionStatus.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/versions/VersionStatus.java
@@ -12,6 +12,7 @@ import com.yahoo.vespa.hosted.controller.Application;
import com.yahoo.vespa.hosted.controller.Controller;
import com.yahoo.vespa.hosted.controller.api.integration.configserver.Node;
import com.yahoo.vespa.hosted.controller.api.integration.github.GitSha;
+import com.yahoo.vespa.hosted.controller.api.integration.maven.ArtifactId;
import com.yahoo.vespa.hosted.controller.application.ApplicationList;
import com.yahoo.vespa.hosted.controller.application.Deployment;
import com.yahoo.vespa.hosted.controller.application.JobList;
@@ -129,14 +130,17 @@ public class VersionStatus {
Collection<DeploymentStatistics> deploymentStatistics = computeDeploymentStatistics(infrastructureVersions,
controller.applications().asList());
List<VespaVersion> versions = new ArrayList<>();
+ List<Version> releasedVersions = controller.mavenRepository().getMetadata().versions();
for (DeploymentStatistics statistics : deploymentStatistics) {
if (statistics.version().isEmpty()) continue;
try {
+ boolean isReleased = Collections.binarySearch(releasedVersions, statistics.version()) >= 0;
VespaVersion vespaVersion = createVersion(statistics,
statistics.version().equals(controllerVersion),
statistics.version().equals(systemVersion),
+ isReleased,
systemApplicationVersions.getList(statistics.version()),
controller);
versions.add(vespaVersion);
@@ -146,8 +150,6 @@ public class VersionStatus {
}
}
-
-
Collections.sort(versions);
return new VersionStatus(versions);
@@ -241,10 +243,11 @@ public class VersionStatus {
}
return versionMap.values();
}
-
+
private static VespaVersion createVersion(DeploymentStatistics statistics,
boolean isControllerVersion,
- boolean isSystemVersion,
+ boolean isSystemVersion,
+ boolean isReleased,
Collection<HostName> configServerHostnames,
Controller controller) {
GitSha gitSha = controller.gitHub().getCommit(VESPA_REPO_OWNER, VESPA_REPO, statistics.version().toFullString());
@@ -263,6 +266,7 @@ public class VersionStatus {
gitSha.sha, committedAt,
isControllerVersion,
isSystemVersion,
+ isReleased,
configServerHostnames,
confidence
);
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/versions/VespaVersion.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/versions/VespaVersion.java
index ffbf24be12a..117ce80adaa 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/versions/VespaVersion.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/versions/VespaVersion.java
@@ -27,12 +27,13 @@ public class VespaVersion implements Comparable<VespaVersion> {
private final Instant committedAt;
private final boolean isControllerVersion;
private final boolean isSystemVersion;
+ private final boolean isReleased;
private final DeploymentStatistics statistics;
private final ImmutableSet<HostName> systemApplicationHostnames;
private final Confidence confidence;
public VespaVersion(DeploymentStatistics statistics, String releaseCommit, Instant committedAt,
- boolean isControllerVersion, boolean isSystemVersion,
+ boolean isControllerVersion, boolean isSystemVersion, boolean isReleased,
Collection<HostName> systemApplicationHostnames,
Confidence confidence) {
this.statistics = statistics;
@@ -40,6 +41,7 @@ public class VespaVersion implements Comparable<VespaVersion> {
this.committedAt = committedAt;
this.isControllerVersion = isControllerVersion;
this.isSystemVersion = isSystemVersion;
+ this.isReleased = isReleased;
this.systemApplicationHostnames = ImmutableSet.copyOf(systemApplicationHostnames);
this.confidence = confidence;
}
@@ -102,6 +104,9 @@ public class VespaVersion implements Comparable<VespaVersion> {
*/
public boolean isSystemVersion() { return isSystemVersion; }
+ /** Returns whether the artifacts of this release are available in the configured maven repository. */
+ public boolean isReleased() { return isReleased; }
+
/** Returns the hosts allocated to system applications (across all zones) which are currently of this version */
public Set<HostName> systemApplicationHostnames() { return systemApplicationHostnames; }
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/VersionStatusSerializerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/VersionStatusSerializerTest.java
index 5e6f9811376..a1e22b4fc64 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/VersionStatusSerializerTest.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/VersionStatusSerializerTest.java
@@ -36,9 +36,9 @@ public class VersionStatusSerializerTest {
ApplicationId.from("tenant2", "success2", "default"))
);
vespaVersions.add(new VespaVersion(statistics, "dead", Instant.now(), false, false,
- asHostnames("cfg1", "cfg2", "cfg3"), VespaVersion.Confidence.normal));
+ true, asHostnames("cfg1", "cfg2", "cfg3"), VespaVersion.Confidence.normal));
vespaVersions.add(new VespaVersion(statistics, "cafe", Instant.now(), true, true,
- asHostnames("cfg1", "cfg2", "cfg3"), VespaVersion.Confidence.normal));
+ false, asHostnames("cfg1", "cfg2", "cfg3"), VespaVersion.Confidence.normal));
VersionStatus status = new VersionStatus(vespaVersions);
VersionStatusSerializer serializer = new VersionStatusSerializer();
VersionStatus deserialized = serializer.fromSlime(serializer.toSlime(status));
@@ -51,6 +51,7 @@ public class VersionStatusSerializerTest {
assertEquals(a.committedAt().truncatedTo(MILLIS), b.committedAt());
assertEquals(a.isControllerVersion(), b.isControllerVersion());
assertEquals(a.isSystemVersion(), b.isSystemVersion());
+ assertEquals(a.isReleased(), b.isReleased());
assertEquals(a.statistics(), b.statistics());
assertEquals(a.systemApplicationHostnames(), b.systemApplicationHostnames());
assertEquals(a.confidence(), b.confidence());
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/deployment/DeploymentApiTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/deployment/DeploymentApiTest.java
index fa3848a6ba5..d6620733efe 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/deployment/DeploymentApiTest.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/deployment/DeploymentApiTest.java
@@ -74,6 +74,7 @@ public class DeploymentApiTest extends ControllerContainerTest {
version.committedAt(),
version.isControllerVersion(),
version.isSystemVersion(),
+ version.isReleased(),
ImmutableSet.of("config1.test", "config2.test").stream()
.map(HostName::from)
.collect(Collectors.toSet()),
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/versions/VersionStatusTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/versions/VersionStatusTest.java
index a365285b752..8e3dc24193f 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/versions/VersionStatusTest.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/versions/VersionStatusTest.java
@@ -254,7 +254,7 @@ public class VersionStatusTest {
assertTrue("Status for version without applications is removed",
tester.controller().versionStatus().versions().stream()
.noneMatch(vespaVersion -> vespaVersion.versionNumber().equals(version1)));
-
+
// Another default application upgrades, raising confidence to high
tester.completeUpgrade(default8, version2, "default");
tester.completeUpgrade(default9, version2, "default");
@@ -294,6 +294,11 @@ public class VersionStatusTest {
assertEquals("6.2", versions.get(0).versionNumber().toString());
assertEquals("6.4", versions.get(1).versionNumber().toString());
assertEquals("6.5", versions.get(2).versionNumber().toString());
+
+ // Check release status is correct (static data in MockMavenRepository).
+ assertTrue(versions.get(0).isReleased());
+ assertFalse(versions.get(1).isReleased());
+ assertFalse(versions.get(2).isReleased());
}
@Test