diff options
author | Harald Musum <musum@oath.com> | 2018-07-19 08:28:43 +0200 |
---|---|---|
committer | Harald Musum <musum@oath.com> | 2018-07-19 08:28:43 +0200 |
commit | 631c3ddd4c8f82567a6eb34049e21199da83df88 (patch) | |
tree | 8588e38a636b3423532ef49b79d157cffa30f744 /node-repository | |
parent | b29f033fa96a53b08c76e8abcd630c1e210fda3c (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')
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; + } + } } |