summaryrefslogtreecommitdiffstats
path: root/node-repository
diff options
context:
space:
mode:
authorHarald Musum <musum@oath.com>2018-07-19 08:28:43 +0200
committerHarald Musum <musum@oath.com>2018-07-19 08:28:43 +0200
commit631c3ddd4c8f82567a6eb34049e21199da83df88 (patch)
tree8588e38a636b3423532ef49b79d157cffa30f744 /node-repository
parentb29f033fa96a53b08c76e8abcd630c1e210fda3c (diff)
Add initial wait in periodic application maintainer
If it starts early it will try deploying while config server is bootstrapping, which is at a point where there are many deployments going on
Diffstat (limited to 'node-repository')
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/PeriodicApplicationMaintainer.java9
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/PeriodicApplicationMaintainerTest.java4
2 files changed, 13 insertions, 0 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/PeriodicApplicationMaintainer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/PeriodicApplicationMaintainer.java
index d28b8c5e5c6..dba50bc760b 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/PeriodicApplicationMaintainer.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/PeriodicApplicationMaintainer.java
@@ -25,11 +25,13 @@ import java.util.Set;
*/
public class PeriodicApplicationMaintainer extends ApplicationMaintainer {
private final Duration minTimeBetweenRedeployments;
+ private final Instant start;
public PeriodicApplicationMaintainer(Deployer deployer, NodeRepository nodeRepository,
Duration interval, Duration minTimeBetweenRedeployments, JobControl jobControl) {
super(deployer, nodeRepository, interval, jobControl);
this.minTimeBetweenRedeployments = minTimeBetweenRedeployments;
+ this.start = Instant.now();
}
@Override
@@ -41,6 +43,8 @@ public class PeriodicApplicationMaintainer extends ApplicationMaintainer {
// Returns the app that was deployed the longest time ago
@Override
protected Set<ApplicationId> applicationsNeedingMaintenance() {
+ if (waitInitially()) return new HashSet<>();
+
Optional<ApplicationId> app = (nodesNeedingMaintenance().stream()
.map(node -> node.allocation().get().owner())
.filter(this::shouldBeDeployedOnThisServer)
@@ -60,6 +64,11 @@ public class PeriodicApplicationMaintainer extends ApplicationMaintainer {
return deployer().lastDeployTime(application).isPresent();
}
+ // TODO: Do not start deploying until some time has gone (ideally only until bootstrap of config server is finished)
+ protected boolean waitInitially() {
+ return Instant.now().isBefore(start.plus(minTimeBetweenRedeployments));
+ }
+
@Override
protected List<Node> nodesNeedingMaintenance() {
return nodeRepository().getNodes(Node.State.active);
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 77f1594c386..2ddb2e0d004 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
@@ -266,6 +266,10 @@ public class PeriodicApplicationMaintainerTest {
return true;
}
+ protected boolean waitInitially() {
+ return false;
+ }
+
}
}