aboutsummaryrefslogtreecommitdiffstats
path: root/node-repository/src/main/java/com/yahoo/vespa
diff options
context:
space:
mode:
authorHåkon Hallingstad <hakon@yahooinc.com>2024-02-28 16:00:52 +0100
committerHåkon Hallingstad <hakon@yahooinc.com>2024-02-28 16:00:52 +0100
commit9b516b5c0d8d0a679c321f1c061afadf6566e9d4 (patch)
treeac16325a21028b64456f5df4f50de0c841163c54 /node-repository/src/main/java/com/yahoo/vespa
parent0414b12d53264aa0f9f84ea947fc32acdc506947 (diff)
Avoid expiring failed host with children to dirty
Diffstat (limited to 'node-repository/src/main/java/com/yahoo/vespa')
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/FailedExpirer.java17
1 files changed, 16 insertions, 1 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 c3fea72fab9..ced1776bb62 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
@@ -108,7 +108,22 @@ public class FailedExpirer extends NodeRepositoryMaintainer {
return Optional.empty();
}
} else {
- return Optional.of(nodeRepository.nodes().deallocate(node, Agent.FailedExpirer, "Expired by FailedExpirer"));
+ List<String> childrenBlockingDirtying = children
+ .stream()
+ // Examples: a failed child node may have an index we want to preserve. A dirty child node has
+ // log we want to sync. A parked child w/o wTD may have been parked by an operator for inspection.
+ .filter(child -> child.state() != Node.State.parked || !child.status().wantToDeprovision())
+ .map(Node::hostname)
+ .toList();
+
+ if (childrenBlockingDirtying.isEmpty()) {
+ return Optional.of(nodeRepository.nodes().deallocate(node, Agent.FailedExpirer, "Expired by FailedExpirer"));
+ } else {
+ log.info(String.format("Expired failed host %s was not dirtied because it has children: %s",
+ node.hostname(), String.join(", ", childrenBlockingDirtying)));
+ return Optional.empty();
+ }
+
}
}