summaryrefslogtreecommitdiffstats
path: root/node-repository
diff options
context:
space:
mode:
authorJon Marius Venstad <venstad@gmail.com>2021-02-18 13:03:50 +0100
committerJon Marius Venstad <venstad@gmail.com>2021-02-19 17:40:10 +0100
commit844b11c9fafcfd31f8e259126979c1d483d7e611 (patch)
treebb16f5cc800bb870bc06082f53a9bb69dd7d64ed /node-repository
parent65cc474709ba5064995bd2553c5abc1cec435c14 (diff)
Obtain quiescence status from Orchestrator
Diffstat (limited to 'node-repository')
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/DedicatedClusterControllerClusterMigrator.java17
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/NodeRepositoryMaintenance.java2
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/PeriodicApplicationMaintainerTest.java6
3 files changed, 18 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();
}
}