diff options
author | Jon Marius Venstad <jvenstad@yahoo-inc.com> | 2019-03-08 11:56:39 +0100 |
---|---|---|
committer | Jon Marius Venstad <jvenstad@yahoo-inc.com> | 2019-03-08 11:56:39 +0100 |
commit | 4fae6a128bd55facaa9a79bb448a3e7165567432 (patch) | |
tree | 4929e35ac684a5d434cc363b3d2b3f3d592d4f7b /node-repository | |
parent | 511cdf2bea96cb39c7aee78b720fb9f05ba0a780 (diff) |
Tester nodes are expired whenever inactive
Diffstat (limited to 'node-repository')
3 files changed, 40 insertions, 1 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/Expirer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/Expirer.java index 3ca2ee32313..19d32cfb05c 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/Expirer.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/Expirer.java @@ -44,7 +44,7 @@ public abstract class Expirer extends Maintainer { protected void maintain() { List<Node> expired = new ArrayList<>(); for (Node node : nodeRepository().getNodes(fromState)) { - if (node.history().hasEventBefore(eventType, clock.instant().minus(expiryTime))) + if (isExpired(node)) expired.add(node); } if ( ! expired.isEmpty()) @@ -52,6 +52,10 @@ public abstract class Expirer extends Maintainer { expire(expired); } + protected boolean isExpired(Node node) { + return node.history().hasEventBefore(eventType, clock.instant().minus(expiryTime)); + } + /** Implement this callback to take action to expire these nodes */ protected abstract void expire(List<Node> node); diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/InactiveExpirer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/InactiveExpirer.java index 1c0e788250e..0146238f1db 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/InactiveExpirer.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/InactiveExpirer.java @@ -1,9 +1,11 @@ // 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.vespa.hosted.provision.Node; import com.yahoo.vespa.hosted.provision.NodeRepository; import com.yahoo.vespa.hosted.provision.node.Agent; +import com.yahoo.vespa.hosted.provision.node.Allocation; import com.yahoo.vespa.hosted.provision.node.History; import java.time.Clock; @@ -47,4 +49,10 @@ public class InactiveExpirer extends Expirer { }); } + @Override + protected boolean isExpired(Node node) { + return super.isExpired(node) + || node.allocation().get().owner().instance().isTester(); + } + } diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/InactiveAndFailedExpirerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/InactiveAndFailedExpirerTest.java index bb396026a43..35225f8abac 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/InactiveAndFailedExpirerTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/InactiveAndFailedExpirerTest.java @@ -163,4 +163,31 @@ public class InactiveAndFailedExpirerTest { new InactiveExpirer(tester.nodeRepository(), tester.clock(), Duration.ofMinutes(10), new JobControl(tester.nodeRepository().database())).run(); assertEquals(1, tester.nodeRepository().getNodes(Node.State.parked).size()); } + + @Test + public void testersExpireImmediately() { + ApplicationId testerId = ApplicationId.from(applicationId.tenant().value(), + applicationId.application().value(), + applicationId.instance().value() + "-t"); + + // Allocate then deallocate a node + ProvisioningTester tester = new ProvisioningTester.Builder().zone(new Zone(Environment.prod, RegionName.from("us-east"))).build(); + tester.makeReadyNodes(1, "default"); + ClusterSpec cluster = ClusterSpec.request(ClusterSpec.Type.content, ClusterSpec.Id.from("test"), Version.fromString("6.42"), false, Collections.emptySet()); + List<HostSpec> preparedNodes = tester.prepare(testerId, cluster, Capacity.fromNodeCount(2), 1); + tester.activate(testerId, new HashSet<>(preparedNodes)); + assertEquals(1, tester.getNodes(testerId, Node.State.active).size()); + tester.deactivate(testerId); + List<Node> inactiveNodes = tester.getNodes(testerId, Node.State.inactive).asList(); + assertEquals(1, inactiveNodes.size()); + + // See that nodes are moved to dirty immediately. + new InactiveExpirer(tester.nodeRepository(), tester.clock(), Duration.ofMinutes(10), new JobControl(tester.nodeRepository().database())).run(); + assertEquals(0, tester.nodeRepository().getNodes(Node.State.inactive).size()); + List<Node> dirty = tester.nodeRepository().getNodes(Node.State.dirty); + assertEquals(1, dirty.size()); + assertFalse(dirty.get(0).allocation().isPresent()); + + } + } |