diff options
author | Valerij Fredriksen <valerijf@oath.com> | 2018-07-26 11:58:51 +0200 |
---|---|---|
committer | Valerij Fredriksen <valerijf@oath.com> | 2018-07-26 11:58:51 +0200 |
commit | 08f5a0577a04e3983f94aef733f819c3cd5f4f84 (patch) | |
tree | 344e2a2dbfb46eb31d822e523bc39d32adf03147 /node-repository | |
parent | 5602d9cc9eeb85f2997db079f8d9a4f27098ec13 (diff) |
Check if redeployment is still needed after acquiring the lock
Diffstat (limited to 'node-repository')
3 files changed, 6 insertions, 4 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 afc6a69796d..3b7c4857f48 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 @@ -41,8 +41,7 @@ public abstract class ApplicationMaintainer extends Maintainer { protected final void maintain() { Set<ApplicationId> applications = applicationsNeedingMaintenance(); for (ApplicationId application : applications) { - if (canDeployNow(application)) - deploy(application); + deploy(application); } } @@ -83,6 +82,7 @@ public abstract class ApplicationMaintainer extends Maintainer { // Lock is acquired with a low timeout to reduce the chance of colliding with an external deployment. try (Mutex lock = nodeRepository().lock(application, Duration.ofSeconds(1))) { if ( ! isActive(application)) return; // became inactive since deployment was requested + if ( ! canDeployNow(application)) return; // redeployment is no longer needed Optional<Deployment> deployment = deployer.deployFromLocalActive(application); if ( ! deployment.isPresent()) return; // this will be done at another config server log.log(LogLevel.DEBUG, this.getClass().getSimpleName() + " deploying " + application); 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 6d024a421a2..ee5d6a04ddc 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 @@ -46,8 +46,10 @@ public class PeriodicApplicationMaintainer extends ApplicationMaintainer { Optional<ApplicationId> app = (nodesNeedingMaintenance().stream() .map(node -> node.allocation().get().owner()) + .distinct() .filter(this::shouldBeDeployedOnThisServer) - .min(Comparator.comparing(this::getLastDeployTime))); + .min(Comparator.comparing(this::getLastDeployTime))) + .filter(this::canDeployNow); app.ifPresent(applicationId -> log.log(LogLevel.INFO, applicationId + " will be deployed, last deploy time " + getLastDeployTime(applicationId))); return app.map(Collections::singleton).orElseGet(Collections::emptySet); diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/OperatorChangeApplicationMaintainerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/OperatorChangeApplicationMaintainerTest.java index 976831d129d..961e9991d71 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/OperatorChangeApplicationMaintainerTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/OperatorChangeApplicationMaintainerTest.java @@ -50,7 +50,7 @@ public class OperatorChangeApplicationMaintainerTest { private Fixture fixture; @Test - public void test_application_maintenance() throws InterruptedException { + public void test_application_maintenance() { ManualClock clock = new ManualClock(); Curator curator = new MockCurator(); Zone zone = new Zone(Environment.prod, RegionName.from("us-east")); |