summaryrefslogtreecommitdiffstats
path: root/node-repository
diff options
context:
space:
mode:
authorvalerijf <valerijf@oath.com>2017-08-21 09:27:55 +0200
committervalerijf <valerijf@oath.com>2017-08-21 09:27:55 +0200
commit868459925a76e9b1105831629841da8c50985a8b (patch)
tree5f32fc4a3f8880f01e5fcda2be361f8fe5560a10 /node-repository
parente0ac6fb3d6e32dec0e986d79f789e45f62465dcd (diff)
Add log message
Diffstat (limited to 'node-repository')
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/FailedExpirer.java18
1 files changed, 14 insertions, 4 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/FailedExpirer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/FailedExpirer.java
index 77b1dc712df..a86ba955a9a 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/FailedExpirer.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/FailedExpirer.java
@@ -14,7 +14,10 @@ import com.yahoo.vespa.hosted.provision.node.History;
import java.time.Clock;
import java.time.Duration;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
+import java.util.logging.Logger;
+import java.util.stream.Collectors;
/**
* This moves expired failed nodes:
@@ -40,6 +43,7 @@ import java.util.List;
*/
public class FailedExpirer extends Expirer {
+ private static final Logger log = Logger.getLogger(NodeRetirer.class.getName());
private final NodeRepository nodeRepository;
private final Zone zone;
@@ -55,12 +59,18 @@ public class FailedExpirer extends Expirer {
List<Node> nodesToRecycle = new ArrayList<>();
for (Node recycleCandidate : expired) {
if (recycleCandidate.status().hardwareFailureDescription().isPresent()) {
- boolean shouldBeParked = recycleCandidate.type() != NodeType.host ||
+ List<String> nonParkedChildren = recycleCandidate.type() != NodeType.host ? Collections.emptyList() :
nodeRepository.getChildNodes(recycleCandidate.hostname()).stream()
- .allMatch(node -> node.state() == Node.State.parked);
+ .filter(node -> node.state() != Node.State.parked)
+ .map(Node::hostname)
+ .collect(Collectors.toList());
- if (shouldBeParked) nodeRepository.park(
- recycleCandidate.hostname(), Agent.system, "Parked by FailedExpirer due to HW failure on node");
+ if (nonParkedChildren.isEmpty()) {
+ nodeRepository.park(recycleCandidate.hostname(), Agent.system, "Parked by FailedExpirer due to HW failure on node");
+ } else {
+ log.info(String.format("Expired failed node %s with HW fail is not parked because some of its children" +
+ " (%s) are not yet parked", recycleCandidate.hostname(), String.join(", ", nonParkedChildren)));
+ }
} else if (! failCountIndicatesHwFail(zone, recycleCandidate) || recycleCandidate.status().failCount() < 5) {
nodesToRecycle.add(recycleCandidate);
}