diff options
author | Håkon Hallingstad <hakon@yahooinc.com> | 2024-02-28 16:00:52 +0100 |
---|---|---|
committer | Håkon Hallingstad <hakon@yahooinc.com> | 2024-02-28 16:00:52 +0100 |
commit | 9b516b5c0d8d0a679c321f1c061afadf6566e9d4 (patch) | |
tree | ac16325a21028b64456f5df4f50de0c841163c54 /node-repository/src/main/java/com/yahoo/vespa | |
parent | 0414b12d53264aa0f9f84ea947fc32acdc506947 (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.java | 17 |
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(); + } + } } |