diff options
author | Jon Marius Venstad <venstad@gmail.com> | 2021-02-18 13:03:50 +0100 |
---|---|---|
committer | Jon Marius Venstad <venstad@gmail.com> | 2021-02-19 17:40:10 +0100 |
commit | 844b11c9fafcfd31f8e259126979c1d483d7e611 (patch) | |
tree | bb16f5cc800bb870bc06082f53a9bb69dd7d64ed | |
parent | 65cc474709ba5064995bd2553c5abc1cec435c14 (diff) |
Obtain quiescence status from Orchestrator
4 files changed, 20 insertions, 7 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/DedicatedClusterControllerClusterMigrator.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/DedicatedClusterControllerClusterMigrator.java index 0bfd4e027ad..a96a307b424 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/DedicatedClusterControllerClusterMigrator.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/DedicatedClusterControllerClusterMigrator.java @@ -9,6 +9,7 @@ import com.yahoo.vespa.flags.FetchVector; import com.yahoo.vespa.flags.FlagSource; import com.yahoo.vespa.flags.Flags; import com.yahoo.vespa.hosted.provision.NodeRepository; +import com.yahoo.vespa.orchestrator.Orchestrator; import java.time.DayOfWeek; import java.time.Duration; @@ -28,28 +29,38 @@ import static java.util.stream.Collectors.toUnmodifiableSet; public class DedicatedClusterControllerClusterMigrator extends ApplicationMaintainer { private final BooleanFlag flag; + private final Orchestrator orchestrator; protected DedicatedClusterControllerClusterMigrator(Deployer deployer, Metric metric, NodeRepository nodeRepository, - Duration interval, FlagSource flags) { + Duration interval, FlagSource flags, Orchestrator orchestrator) { super(deployer, metric, nodeRepository, interval); this.flag = Flags.DEDICATED_CLUSTER_CONTROLLER_CLUSTER.bindTo(flags); + this.orchestrator = orchestrator; } @Override protected Set<ApplicationId> applicationsNeedingMaintenance() { + if (deployer().bootstrapping()) return Set.of(); + ZonedDateTime date = ZonedDateTime.ofInstant(clock().instant(), java.time.ZoneId.of("Europe/Oslo")); if (List.of(SATURDAY, SUNDAY).contains(date.getDayOfWeek()) || date.getHour() < 8 || 12 < date.getHour()) return Set.of(); return nodeRepository().applications().ids().stream() + .sorted() .filter(this::isEligible) .filter(this::hasNotSwitched) .filter(this::isQuiescent) .limit(1) - .peek(this::migrate) .collect(toUnmodifiableSet()); } + @Override + protected void deploy(ApplicationId id) { + migrate(id); + super.deploy(id); + } + private boolean isEligible(ApplicationId id) { return flag.with(FetchVector.Dimension.APPLICATION_ID, id.serializedForm()).value(); } @@ -59,7 +70,7 @@ public class DedicatedClusterControllerClusterMigrator extends ApplicationMainta } private boolean isQuiescent(ApplicationId id) { - return false; // Check all content nodes are UP, have wanted state UP, and can be moved to MAINTENANCE. + return orchestrator.isQuiescent(id); // Check all content nodes are UP, have wanted state UP, and can be moved to MAINTENANCE. } private void migrate(ApplicationId id) { diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/NodeRepositoryMaintenance.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/NodeRepositoryMaintenance.java index 4d3f0fd4039..ff1598d588e 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/NodeRepositoryMaintenance.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/NodeRepositoryMaintenance.java @@ -64,7 +64,7 @@ public class NodeRepositoryMaintenance extends AbstractComponent { maintainers.add(new AutoscalingMaintainer(nodeRepository, metricsDb, deployer, metric, defaults.autoscalingInterval)); maintainers.add(new ScalingSuggestionsMaintainer(nodeRepository, metricsDb, defaults.scalingSuggestionsInterval, metric)); maintainers.add(new SwitchRebalancer(nodeRepository, defaults.switchRebalancerInterval, metric, deployer)); - maintainers.add(new DedicatedClusterControllerClusterMigrator(deployer, metric, nodeRepository, defaults.dedicatedClusterControllerMigratorInterval, flagSource)); + maintainers.add(new DedicatedClusterControllerClusterMigrator(deployer, metric, nodeRepository, defaults.dedicatedClusterControllerMigratorInterval, flagSource, orchestrator)); provisionServiceProvider.getLoadBalancerService(nodeRepository) .map(lbService -> new LoadBalancerExpirer(nodeRepository, defaults.loadBalancerExpirerInterval, lbService, metric)) diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/PeriodicApplicationMaintainerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/PeriodicApplicationMaintainerTest.java index e280a0211e4..07a29d899a3 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/PeriodicApplicationMaintainerTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/PeriodicApplicationMaintainerTest.java @@ -258,7 +258,7 @@ public class PeriodicApplicationMaintainerTest { } } - + private static class TestablePeriodicApplicationMaintainer extends PeriodicApplicationMaintainer { private NodeList overriddenNodesNeedingMaintenance; @@ -275,8 +275,8 @@ public class PeriodicApplicationMaintainerTest { @Override protected NodeList nodesNeedingMaintenance() { return overriddenNodesNeedingMaintenance != null - ? overriddenNodesNeedingMaintenance - : super.nodesNeedingMaintenance(); + ? overriddenNodesNeedingMaintenance + : super.nodesNeedingMaintenance(); } } diff --git a/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/Orchestrator.java b/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/Orchestrator.java index 9d2d72277e5..baea38ed4d8 100644 --- a/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/Orchestrator.java +++ b/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/Orchestrator.java @@ -127,4 +127,6 @@ public interface Orchestrator { */ void suspend(ApplicationId appId) throws ApplicationStateChangeDeniedException, ApplicationIdNotFoundException; + default boolean isQuiescent(ApplicationId id) { return false; } + } |