summaryrefslogtreecommitdiffstats
path: root/node-repository
diff options
context:
space:
mode:
authorJon Marius Venstad <jvenstad@yahoo-inc.com>2019-03-08 11:56:39 +0100
committerJon Marius Venstad <jvenstad@yahoo-inc.com>2019-03-08 11:56:39 +0100
commit4fae6a128bd55facaa9a79bb448a3e7165567432 (patch)
tree4929e35ac684a5d434cc363b3d2b3f3d592d4f7b /node-repository
parent511cdf2bea96cb39c7aee78b720fb9f05ba0a780 (diff)
Tester nodes are expired whenever inactive
Diffstat (limited to 'node-repository')
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/Expirer.java6
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/InactiveExpirer.java8
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/InactiveAndFailedExpirerTest.java27
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());
+
+ }
+
}