From 3efa2694068b6e63d9c4d383a9c8d281c6ade2a6 Mon Sep 17 00:00:00 2001 From: jonmv Date: Fri, 30 Jun 2023 10:57:45 +0200 Subject: Delay using released versions as compile version for three hours --- .../vespa/hosted/controller/ApplicationController.java | 9 +++++---- .../vespa/hosted/controller/versions/VersionStatus.java | 2 +- ...ntroller.maven.repository.config.maven-repository.def | 2 +- .../yahoo/vespa/hosted/controller/ControllerTest.java | 7 +++++++ .../yahoo/vespa/hosted/controller/ControllerTester.java | 16 ++++++---------- .../hosted/controller/versions/VersionStatusTest.java | 7 ++++++- 6 files changed, 26 insertions(+), 17 deletions(-) (limited to 'controller-server') diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java index c3e1ff1dbf2..adadcab3270 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java @@ -81,6 +81,7 @@ import com.yahoo.vespa.hosted.controller.versions.VersionStatus; import com.yahoo.vespa.hosted.controller.versions.VespaVersion; import com.yahoo.vespa.hosted.controller.versions.VespaVersion.Confidence; import com.yahoo.yolean.Exceptions; + import java.io.ByteArrayInputStream; import java.security.Principal; import java.security.cert.X509Certificate; @@ -421,10 +422,10 @@ public class ApplicationController { // Fall back to the newest, system-compatible version with unknown confidence. For public systems, this implies high confidence. Set knownVersions = versionStatus.versions().stream().map(VespaVersion::versionNumber).collect(toSet()); - Optional unknown = controller.mavenRepository().metadata().versions().stream() - .filter(version -> ! knownVersions.contains(version)) - .filter(systemCompatible) - .max(naturalOrder()); + Optional unknown = controller.mavenRepository().metadata().versions(clock.instant()).stream() + .filter(version -> ! knownVersions.contains(version)) + .filter(systemCompatible) + .max(naturalOrder()); if (nonBroken.isPresent()) { if (controller.system().isPublic() && unknown.isPresent() && unknown.get().isAfter(nonBroken.get())) 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 732327e25f6..9fb87735b42 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 @@ -148,7 +148,7 @@ public record VersionStatus(List versions, int currentMajor) { .withProjectId() .withJobs())); List versions = new ArrayList<>(); - List releasedVersions = controller.mavenRepository().metadata().versions(); + List releasedVersions = controller.mavenRepository().metadata().versions(controller.clock().instant()); for (DeploymentStatistics statistics : deploymentStatistics) { if (statistics.version().isEmpty()) continue; diff --git a/controller-server/src/main/resources/configdefinitions/vespa.hosted.controller.maven.repository.config.maven-repository.def b/controller-server/src/main/resources/configdefinitions/vespa.hosted.controller.maven.repository.config.maven-repository.def index 2f32c0375ea..53b1e79900f 100644 --- a/controller-server/src/main/resources/configdefinitions/vespa.hosted.controller.maven.repository.config.maven-repository.def +++ b/controller-server/src/main/resources/configdefinitions/vespa.hosted.controller.maven.repository.config.maven-repository.def @@ -4,7 +4,7 @@ namespace=vespa.hosted.controller.maven.repository.config # URL to the Maven repository API that holds artifacts for tenants in the controller's system # -apiUrl string default=https://repo.maven.apache.org/maven2/ +apiUrl string default=https://repo1.maven.org/maven2/ # Group ID of the artifact to list versions for # diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTest.java index 43c532548d6..3a1cb322daf 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTest.java @@ -1340,6 +1340,11 @@ public class ControllerTest { tester.controllerTester().upgradeSystem(version0); tester.upgrader().overrideConfidence(version0, Confidence.normal); tester.controllerTester().computeVersionStatus(); + Version version00 = Version.fromString("6.2"); + assertEquals(version00, tester.applications().compileVersion(application, OptionalInt.of(7))); + assertEquals(version00, tester.applications().compileVersion(application, OptionalInt.empty())); + tester.clock().advance(Duration.ofSeconds(10801)); + tester.controllerTester().computeVersionStatus(); assertEquals(version0, tester.applications().compileVersion(application, OptionalInt.of(7))); assertEquals(version0, tester.applications().compileVersion(application, OptionalInt.empty())); assertEquals("this system has no available versions on specified major: 8", @@ -1351,6 +1356,7 @@ public class ControllerTest { // System is upgraded Version version1 = Version.fromString("7.2"); tester.controllerTester().upgradeSystem(version1); + tester.clock().advance(Duration.ofSeconds(10801)); tester.upgrader().overrideConfidence(version1, Confidence.normal); tester.controllerTester().computeVersionStatus(); assertEquals(version0, tester.applications().compileVersion(application, OptionalInt.empty())); @@ -1367,6 +1373,7 @@ public class ControllerTest { Version version2 = Version.fromString("8.0"); tester.controllerTester().upgradeSystem(version2); tester.upgrader().overrideConfidence(version2, Confidence.low); + tester.clock().advance(Duration.ofSeconds(10801)); tester.controllerTester().computeVersionStatus(); assertEquals(version1, tester.applications().compileVersion(application, OptionalInt.empty())); assertEquals("this system has no available versions on specified major: 8", diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTester.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTester.java index 43a85aa6aca..eabbdd76d5a 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTester.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTester.java @@ -72,7 +72,6 @@ import java.util.concurrent.atomic.AtomicLong; import java.util.function.Consumer; import java.util.logging.Handler; import java.util.logging.Logger; -import java.util.stream.Collectors; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -290,14 +289,11 @@ public final class ControllerTester { } public ZoneId toZone(Environment environment) { - switch (environment) { - case dev: case test: - return ZoneId.from(environment, RegionName.from("us-east-1")); - case staging: - return ZoneId.from(environment, RegionName.from("us-east-3")); - default: - return ZoneId.from(environment, RegionName.from("us-west-1")); - } + return switch (environment) { + case dev, test -> ZoneId.from(environment, RegionName.from("us-east-1")); + case staging -> ZoneId.from(environment, RegionName.from("us-east-3")); + default -> ZoneId.from(environment, RegionName.from("us-west-1")); + }; } public AthenzDomain createDomainWithAdmin(String domainName, AthenzUser user) { @@ -395,7 +391,7 @@ public final class ControllerTester { new CloudAccessControl(new MockUserManagement(), flagSource, serviceRegistry) : new AthenzFacade(new AthenzClientFactoryMock(athensDb)), flagSource, - new MockMavenRepository(), + new MockMavenRepository(serviceRegistry.clock()), serviceRegistry, new MetricsMock(), new SecretStoreMock(), new ControllerConfig.Builder().build(), 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 66a918a6f25..abce1c309ae 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 @@ -386,7 +386,12 @@ public class VersionStatusTest { // Check release status is correct (static data in MockMavenRepository, and upgradeSystem "releases" a version). assertTrue(versions.get(0).isReleased()); - assertFalse(versions.get(1).isReleased()); // tesst quirk: maven repo lost during controller recreation; useful to test status though + assertFalse(versions.get(1).isReleased()); // test quirk: maven repo lost during controller recreation; useful to test status though + assertFalse(versions.get(2).isReleased()); + + tester.clock().advance(Duration.ofSeconds(10801)); + tester.controllerTester().computeVersionStatus(); + versions = tester.controller().readVersionStatus().versions(); assertTrue(versions.get(2).isReleased()); // A new major version is released and all canaries upgrade -- cgit v1.2.3