diff options
author | valerijf <valerijf@oath.com> | 2017-08-30 11:15:42 +0200 |
---|---|---|
committer | valerijf <valerijf@oath.com> | 2017-08-30 11:15:42 +0200 |
commit | 6367c030c2637d0e1ac2d4d27aa276ddbe1054b1 (patch) | |
tree | 4d8435ecd7613d4e89e63aae34936f956b2a7952 /node-repository/src | |
parent | c1a93692a89586ea6ed51e682cf18f9eafe7d89b (diff) |
Add provisioned expirer
Diffstat (limited to 'node-repository/src')
3 files changed, 40 insertions, 1 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/DirtyExpirer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/DirtyExpirer.java index d057cf492ba..520ceaf323b 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/DirtyExpirer.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/DirtyExpirer.java @@ -33,7 +33,7 @@ public class DirtyExpirer extends Expirer { @Override protected void expire(List<Node> expired) { - for (Node expiredNode : expired.stream().collect(Collectors.toList())) + for (Node expiredNode : expired) nodeRepository.fail(expiredNode.hostname(), Agent.system, "Node is stuck in dirty"); } diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/NodeRepositoryMaintenance.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/NodeRepositoryMaintenance.java index c7ef7f35ce0..2057fd7e36f 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/NodeRepositoryMaintenance.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/NodeRepositoryMaintenance.java @@ -44,6 +44,7 @@ public class NodeRepositoryMaintenance extends AbstractComponent { private final RetiredEarlyExpirer retiredEarlyExpirer; private final FailedExpirer failedExpirer; private final DirtyExpirer dirtyExpirer; + private final ProvisionedExpirer provisionedExpirer; private final NodeRebooter nodeRebooter; private final NodeRetirer nodeRetirer; private final MetricsReporter metricsReporter; @@ -73,6 +74,7 @@ public class NodeRepositoryMaintenance extends AbstractComponent { inactiveExpirer = new InactiveExpirer(nodeRepository, clock, durationFromEnv("inactive_expiry").orElse(defaults.inactiveExpiry), jobControl); failedExpirer = new FailedExpirer(nodeRepository, zone, clock, durationFromEnv("failed_expiry").orElse(defaults.failedExpiry), jobControl); dirtyExpirer = new DirtyExpirer(nodeRepository, clock, durationFromEnv("dirty_expiry").orElse(defaults.dirtyExpiry), jobControl); + provisionedExpirer = new ProvisionedExpirer(nodeRepository, clock, durationFromEnv("provisioned_expiry").orElse(defaults.provisionedExpiry), jobControl); nodeRebooter = new NodeRebooter(nodeRepository, clock, durationFromEnv("reboot_interval").orElse(defaults.rebootInterval), jobControl); metricsReporter = new MetricsReporter(nodeRepository, metric, durationFromEnv("metrics_interval").orElse(defaults.metricsInterval), jobControl); @@ -96,6 +98,7 @@ public class NodeRepositoryMaintenance extends AbstractComponent { dirtyExpirer.deconstruct(); nodeRebooter.deconstruct(); nodeRetirer.deconstruct(); + provisionedExpirer.deconstruct(); metricsReporter.deconstruct(); } @@ -133,6 +136,7 @@ public class NodeRepositoryMaintenance extends AbstractComponent { private final Duration retiredExpiry; private final Duration failedExpiry; private final Duration dirtyExpiry; + private final Duration provisionedExpiry; private final Duration rebootInterval; private final Duration nodeRetirerInterval; private final Duration metricsInterval; @@ -154,6 +158,7 @@ public class NodeRepositoryMaintenance extends AbstractComponent { retiredEarlyInterval = Duration.ofMinutes(29); failedExpiry = Duration.ofDays(4); // enough time to recover data even if it happens friday night dirtyExpiry = Duration.ofHours(2); // enough time to clean the node + provisionedExpiry = Duration.ofHours(4); rebootInterval = Duration.ofDays(30); nodeRetirerInterval = Duration.ofMinutes(30); metricsInterval = Duration.ofMinutes(1); @@ -171,6 +176,7 @@ public class NodeRepositoryMaintenance extends AbstractComponent { retiredEarlyInterval = Duration.ofMinutes(5); failedExpiry = Duration.ofMinutes(10); dirtyExpiry = Duration.ofMinutes(30); + provisionedExpiry = Duration.ofHours(4); rebootInterval = Duration.ofDays(30); nodeRetirerInterval = Duration.ofMinutes(30); metricsInterval = Duration.ofMinutes(1); diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/ProvisionedExpirer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/ProvisionedExpirer.java new file mode 100644 index 00000000000..b41eedd4694 --- /dev/null +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/ProvisionedExpirer.java @@ -0,0 +1,33 @@ +// 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.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.History; + +import java.time.Clock; +import java.time.Duration; +import java.util.List; + +/** + * This moves nodes from provisioned to parked if they have been in provisioned too long. + * + * @author freva + */ +public class ProvisionedExpirer extends Expirer { + + private final NodeRepository nodeRepository; + + public ProvisionedExpirer(NodeRepository nodeRepository, Clock clock, Duration dirtyTimeout, JobControl jobControl) { + super(Node.State.provisioned, History.Event.Type.provisioned, nodeRepository, clock, dirtyTimeout, jobControl); + this.nodeRepository = nodeRepository; + } + + @Override + protected void expire(List<Node> expired) { + for (Node expiredNode : expired) + nodeRepository.parkRecursively(expiredNode.hostname(), Agent.system, "Node is stuck in provisioned"); + } + +} |