diff options
author | jonmv <venstad@gmail.com> | 2023-06-30 10:57:45 +0200 |
---|---|---|
committer | jonmv <venstad@gmail.com> | 2023-06-30 10:57:45 +0200 |
commit | 3efa2694068b6e63d9c4d383a9c8d281c6ade2a6 (patch) | |
tree | e25c4a3835ef6c01a3a5e124faaaf5ace535a548 /controller-api | |
parent | 8ff5c45ca2429ed8fb5cdb252043af97e6e89d99 (diff) |
Delay using released versions as compile version for three hours
Diffstat (limited to 'controller-api')
3 files changed, 42 insertions, 8 deletions
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/maven/Metadata.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/maven/Metadata.java index dd80a2b3a9a..a0d3614ffc5 100644 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/maven/Metadata.java +++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/maven/Metadata.java @@ -5,9 +5,11 @@ import com.yahoo.component.Version; import com.yahoo.text.XML; import org.w3c.dom.Element; +import java.time.Instant; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.List; -import java.util.stream.Collectors; import static java.util.Objects.requireNonNull; @@ -19,10 +21,12 @@ import static java.util.Objects.requireNonNull; public class Metadata { private final ArtifactId id; + private final Instant lastUpdated; private final List<Version> versions; - public Metadata(ArtifactId id, List<Version> versions) { + public Metadata(ArtifactId id, Instant lastUpdated, List<Version> versions) { this.id = requireNonNull(id); + this.lastUpdated = requireNonNull(lastUpdated); this.versions = versions.stream().sorted().toList(); } @@ -31,17 +35,25 @@ public class Metadata { Element metadata = XML.getDocument(xml).getDocumentElement(); ArtifactId id = new ArtifactId(XML.getValue(XML.getChild(metadata, "groupId")), XML.getValue(XML.getChild(metadata, "artifactId"))); + String lastUpdatedTimestamp = XML.getValue(XML.getChild(XML.getChild(metadata, "versioning"), "lastUpdated")); + Instant lastUpdated = Instant.from(DateTimeFormatter.ofPattern("yyyyMMddHHmmss").withZone(ZoneId.of("UTC")) + .parse(lastUpdatedTimestamp)); List<Version> versions = new ArrayList<>(); for (Element version : XML.getChildren(XML.getChild(XML.getChild(metadata, "versioning"), "versions"))) versions.add(Version.fromString(XML.getValue(version))); - return new Metadata(id, versions); + return new Metadata(id, lastUpdated, versions); } /** Id of the metadata this concerns. */ public ArtifactId id() { return id; } + /** When the list of versions was last updated. */ + Instant lastUpdated() { return lastUpdated; } + /** List of available versions of this, sorted by ascending version order. */ - public List<Version> versions() { return versions; } + public List<Version> versions(Instant availableAt) { + return versions.size() == 1 || availableAt.isAfter(lastUpdated.plusSeconds(10800)) ? versions : versions.subList(0, versions.size() - 1); + } } diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/stubs/MockMavenRepository.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/stubs/MockMavenRepository.java index aad6b306662..f43ec795f92 100644 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/stubs/MockMavenRepository.java +++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/stubs/MockMavenRepository.java @@ -2,12 +2,17 @@ package com.yahoo.vespa.hosted.controller.api.integration.stubs; import com.yahoo.component.Version; +import com.yahoo.component.annotation.Inject; import com.yahoo.vespa.hosted.controller.api.integration.maven.ArtifactId; -import com.yahoo.vespa.hosted.controller.api.integration.maven.Metadata; import com.yahoo.vespa.hosted.controller.api.integration.maven.MavenRepository; +import com.yahoo.vespa.hosted.controller.api.integration.maven.Metadata; +import java.time.Clock; +import java.time.Instant; +import java.time.ZoneId; import java.util.ArrayList; import java.util.List; +import java.util.concurrent.atomic.AtomicReference; /** * Mock repository for maven artifacts, that returns a static metadata. @@ -18,21 +23,31 @@ public class MockMavenRepository implements MavenRepository { public static final ArtifactId id = new ArtifactId("ai.vespa", "search"); + private final Clock clock; + private AtomicReference<Instant> lastUpdated; private final List<Version> versions = new ArrayList<>(); + @Inject public MockMavenRepository() { + this(Clock.fixed(Instant.EPOCH, ZoneId.of("UTC"))); + } + + public MockMavenRepository(Clock clock) { + this.clock = clock; + this.lastUpdated = new AtomicReference<>(clock.instant().minusSeconds(10801)); versions.addAll(List.of(Version.fromString("6.0"), Version.fromString("6.1"), Version.fromString("6.2"))); } public void addVersion(Version version) { + lastUpdated.set(clock.instant()); versions.add(version); } @Override public Metadata metadata() { - return new Metadata(id, versions); + return new Metadata(id, lastUpdated.get(), versions); } @Override diff --git a/controller-api/src/test/java/com/yahoo/vespa/hosted/controller/api/integration/maven/MetadataTest.java b/controller-api/src/test/java/com/yahoo/vespa/hosted/controller/api/integration/maven/MetadataTest.java index 4cec90eb48d..a6f7a5ee069 100644 --- a/controller-api/src/test/java/com/yahoo/vespa/hosted/controller/api/integration/maven/MetadataTest.java +++ b/controller-api/src/test/java/com/yahoo/vespa/hosted/controller/api/integration/maven/MetadataTest.java @@ -1,9 +1,12 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.controller.api.integration.maven; +import com.yahoo.collections.Iterables; import com.yahoo.component.Version; import org.junit.jupiter.api.Test; +import java.time.Instant; + import static org.junit.jupiter.api.Assertions.assertEquals; public class MetadataTest { @@ -13,8 +16,12 @@ public class MetadataTest { Metadata metadata = Metadata.fromXml(metadataXml); assertEquals("com.yahoo.vespa", metadata.id().groupId()); assertEquals("tenant-base", metadata.id().artifactId()); - assertEquals(Version.fromString("6.297.80"), metadata.versions().get(0)); - assertEquals(Version.fromString("7.61.10"), metadata.versions().get(metadata.versions().size() - 1)); + assertEquals(Instant.parse("2019-06-19T05:42:45.00Z"), metadata.lastUpdated()); + assertEquals(Version.fromString("6.297.80"), metadata.versions(metadata.lastUpdated()).get(0)); + assertEquals(Version.fromString("7.61.10"), Iterables.reversed(metadata.versions(metadata.lastUpdated().plusSeconds(10801))) + .iterator().next()); + assertEquals(Version.fromString("7.60.51"), Iterables.reversed(metadata.versions(metadata.lastUpdated().plusSeconds(10800))) + .iterator().next()); } private static final String metadataXml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + |