diff options
5 files changed, 9 insertions, 51 deletions
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/OsUpgradeScheduler.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/OsUpgradeScheduler.java index d3b05922d26..9f2318be4b3 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/OsUpgradeScheduler.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/OsUpgradeScheduler.java @@ -11,7 +11,6 @@ import com.yahoo.vespa.hosted.controller.versions.OsVersionTarget; import java.time.Duration; import java.time.Instant; -import java.time.LocalDate; import java.time.ZoneOffset; import java.time.format.DateTimeFormatter; import java.util.Objects; @@ -141,18 +140,6 @@ public class OsUpgradeScheduler extends ControllerMaintainer { @Override public Version version(OsVersionTarget currentTarget, Instant now) { Instant scheduledAt = currentTarget.scheduledAt(); - if (currentTarget.scheduledAt().equals(Instant.EPOCH)) { - // TODO(mpolden): Remove this block after 2021-09-01. If we haven't written scheduledAt at least once, - // we need to deduce the scheduled instant from the version. - Version version = currentTarget.osVersion().version(); - String qualifier = version.getQualifier(); - if (!qualifier.matches("^\\d{8,}")) throw new IllegalArgumentException("Could not parse instant from version " + version); - - String dateString = qualifier.substring(0, 8); - scheduledAt = LocalDate.parse(dateString, CALENDAR_VERSION_PATTERN) - .atStartOfDay(ZoneOffset.UTC) - .toInstant(); - } Version currentVersion = currentTarget.osVersion().version(); if (scheduledAt.isBefore(now.minus(SCHEDULING_INTERVAL))) { String calendarVersion = now.minus(AVAILABILITY_INTERVAL) diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/OsUpgrader.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/OsUpgrader.java index 8aeede95878..e3bf2d401d3 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/OsUpgrader.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/OsUpgrader.java @@ -89,15 +89,15 @@ public class OsUpgrader extends InfrastructureUpgrader<OsVersionTarget> { /** Returns the available upgrade budget for given zone */ private Duration zoneBudgetOf(Duration totalBudget, ZoneApi zone) { - if (!spendBudget(zone)) return Duration.ZERO; + if (!spendBudgetOn(zone)) return Duration.ZERO; long consecutiveZones = upgradePolicy.asList().stream() - .filter(parallelZones -> parallelZones.stream().anyMatch(this::spendBudget)) + .filter(parallelZones -> parallelZones.stream().anyMatch(this::spendBudgetOn)) .count(); return totalBudget.dividedBy(consecutiveZones); } /** Returns whether to spend upgrade budget on given zone */ - private boolean spendBudget(ZoneApi zone) { + private boolean spendBudgetOn(ZoneApi zone) { if (!zone.getEnvironment().isProduction()) return false; if (controller().zoneRegistry().systemZone().getVirtualId().equals(zone.getVirtualId())) return false; // Controller zone return true; diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/OsVersionTargetSerializer.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/OsVersionTargetSerializer.java index 4eac5a64b0c..e12c1c36dbd 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/OsVersionTargetSerializer.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/OsVersionTargetSerializer.java @@ -45,10 +45,8 @@ public class OsVersionTargetSerializer { Set<OsVersionTarget> osVersionTargets = new TreeSet<>(); array.traverse((ArrayTraverser) (i, inspector) -> { OsVersion osVersion = osVersionSerializer.fromSlime(inspector); - Duration upgradeBudget = Duration.ofMillis(inspector.field(upgradeBudgetField).asLong()); - // TODO(mpolden): Require after 2021-09-01 - Instant scheduledAt = SlimeUtils.optionalInstant(inspector.field(scheduledAtField)) - .orElse(Instant.EPOCH); + Duration upgradeBudget = SlimeUtils.duration(inspector.field(upgradeBudgetField)); + Instant scheduledAt = SlimeUtils.instant(inspector.field(scheduledAtField)); osVersionTargets.add(new OsVersionTarget(osVersion, upgradeBudget, scheduledAt)); }); return Collections.unmodifiableSet(osVersionTargets); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/OsUpgradeSchedulerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/OsUpgradeSchedulerTest.java index 770d0a898fe..6e5e58ddf76 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/OsUpgradeSchedulerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/OsUpgradeSchedulerTest.java @@ -7,14 +7,12 @@ import com.yahoo.config.provision.zone.ZoneApi; import com.yahoo.vespa.hosted.controller.ControllerTester; import com.yahoo.vespa.hosted.controller.api.integration.deployment.StableOsVersion; import com.yahoo.vespa.hosted.controller.integration.ZoneApiMock; -import com.yahoo.vespa.hosted.controller.versions.OsVersion; import com.yahoo.vespa.hosted.controller.versions.OsVersionTarget; import org.junit.Test; import java.time.Duration; import java.time.Instant; import java.util.List; -import java.util.Set; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; @@ -67,35 +65,6 @@ public class OsUpgradeSchedulerTest { assertEquals(version1, tester.controller().osVersionTarget(cloud).get().osVersion().version()); } - @Test // TODO(mpolden): Remove this after 2021-09-01 - public void schedule_calendar_versioned_without_scheduled_time() { - ControllerTester tester = new ControllerTester(); - OsUpgradeScheduler scheduler = new OsUpgradeScheduler(tester.controller(), Duration.ofDays(1)); - Instant t0 = Instant.parse("2021-01-23T07:00:00.00Z"); // Inside trigger period - tester.clock().setInstant(t0); - - CloudName cloud = CloudName.from("cloud"); - ZoneApi zone = zone("prod.us-west-1", cloud); - tester.zoneRegistry().setZones(zone).reprovisionToUpgradeOsIn(zone); - - // Initial run does nothing as the cloud does not have a target - scheduler.maintain(); - assertTrue("No target set", tester.controller().osVersionTarget(cloud).isEmpty()); - - // Target is set - Version version0 = Version.fromString("7.0.0.20210123190005"); - // Simulate setting target without scheduledAt, to force parsing scheduled time from version number - tester.curator().writeOsVersionTargets(Set.of(new OsVersionTarget(new OsVersion(version0, cloud), - Duration.ofDays(1), Instant.EPOCH))); - - // Just over 45 days pass, and a new target replaces the expired one - Version version1 = Version.fromString("7.0.0.20210302"); - tester.clock().advance(Duration.ofDays(45).plus(Duration.ofSeconds(1))); - scheduler.maintain(); - assertEquals("New target set", version1, - tester.controller().osVersionTarget(cloud).get().osVersion().version()); - } - @Test public void schedule_stable_release() { ControllerTester tester = new ControllerTester(); diff --git a/vespajlib/src/main/java/com/yahoo/slime/SlimeUtils.java b/vespajlib/src/main/java/com/yahoo/slime/SlimeUtils.java index 4a53d70ff38..98020f39424 100644 --- a/vespajlib/src/main/java/com/yahoo/slime/SlimeUtils.java +++ b/vespajlib/src/main/java/com/yahoo/slime/SlimeUtils.java @@ -133,6 +133,10 @@ public class SlimeUtils { return Instant.ofEpochMilli(field.asLong()); } + public static Duration duration(Inspector field) { + return Duration.ofMillis(field.asLong()); + } + public static Optional<String> optionalString(Inspector inspector) { return Optional.of(inspector.asString()).filter(s -> !s.isEmpty()); } |