aboutsummaryrefslogtreecommitdiffstats
path: root/node-repository/src
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@oath.com>2018-06-28 21:30:11 +0200
committerJon Bratseth <bratseth@oath.com>2018-06-28 21:30:11 +0200
commit14e13623fe3dbaaefdae61daacd34a974efbb14f (patch)
tree43432841b12de4b8dc0f5983cacbc7f06d02764e /node-repository/src
parentd9be160582d3488c944907f6958e09b9ab1555b8 (diff)
Application deployments inhibits periodic redeploys for a while
Why? 1) Too many redeploys are unecessary and have a cost 2) If restartOnDeploy is turned on, we may end up not able to respect it to make sure config is actually deployed if a periodic redeploy follows right after an application deploy.
Diffstat (limited to 'node-repository/src')
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/ApplicationMaintainer.java4
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/PeriodicApplicationMaintainer.java13
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockDeployer.java6
3 files changed, 22 insertions, 1 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/ApplicationMaintainer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/ApplicationMaintainer.java
index 1d894f80eca..fff768b1e40 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/ApplicationMaintainer.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/ApplicationMaintainer.java
@@ -10,6 +10,7 @@ import com.yahoo.vespa.hosted.provision.Node;
import com.yahoo.vespa.hosted.provision.NodeRepository;
import java.time.Duration;
+import java.time.Instant;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Optional;
@@ -53,6 +54,8 @@ public abstract class ApplicationMaintainer extends Maintainer {
deploymentExecutor.execute(() -> deployWithLock(application));
}
+ protected Deployer deployer() { return deployer; }
+
/** Block in this method until the next application should be maintained */
protected abstract void throttle(int applicationCount);
@@ -78,7 +81,6 @@ public abstract class ApplicationMaintainer extends Maintainer {
if ( ! isActive(application)) return; // became inactive since deployment was requested
Optional<Deployment> deployment = deployer.deployFromLocalActive(application);
if ( ! deployment.isPresent()) return; // this will be done at another config server
-
deployment.get().activate();
} catch (RuntimeException e) {
log.log(Level.WARNING, "Exception on maintenance redeploy", e);
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 cdc5ecf77ec..4729ff1a39a 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
@@ -1,12 +1,15 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.hosted.provision.maintenance;
+import com.yahoo.config.provision.ApplicationId;
import com.yahoo.config.provision.Deployer;
import com.yahoo.vespa.hosted.provision.Node;
import com.yahoo.vespa.hosted.provision.NodeRepository;
import java.time.Duration;
+import java.time.Instant;
import java.util.List;
+import java.util.Optional;
/**
* The application maintainer regularly redeploys all applications to make sure the node repo and application
@@ -29,6 +32,16 @@ public class PeriodicApplicationMaintainer extends ApplicationMaintainer {
}
@Override
+ protected void deploy(ApplicationId application) {
+ Optional<Instant> lastDeploy = deployer().lastDeployTime(application);
+ if (lastDeploy.isPresent() &&
+ lastDeploy.get().isAfter(nodeRepository().clock().instant().minus(interval())))
+ return; // Don't deploy if a regular deploy just happened
+
+ super.deploy(application);
+ }
+
+ @Override
protected List<Node> nodesNeedingMaintenance() {
return nodeRepository().getNodes(Node.State.active);
}
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockDeployer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockDeployer.java
index c880c66abc7..c622f6ffb8b 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockDeployer.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockDeployer.java
@@ -13,6 +13,7 @@ import com.yahoo.transaction.NestedTransaction;
import com.yahoo.vespa.hosted.provision.provisioning.NodeRepositoryProvisioner;
import java.time.Duration;
+import java.time.Instant;
import java.util.Collections;
import java.util.List;
import java.util.Map;
@@ -55,6 +56,11 @@ public class MockDeployer implements Deployer {
return Optional.of(new MockDeployment(provisioner, applications.get(id)));
}
+ @Override
+ public Optional<Instant> lastDeployTime(ApplicationId application) {
+ return Optional.empty(); // not implemented
+ }
+
public class MockDeployment implements Deployment {
private final NodeRepositoryProvisioner provisioner;