diff options
Diffstat (limited to 'node-repository')
4 files changed, 21 insertions, 8 deletions
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 21746c96411..fc68deba957 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 @@ -39,8 +39,7 @@ public class InactiveExpirer extends Expirer { @Override protected void expire(List<Node> expired) { expired.forEach(node -> { - if (node.status().wantToRetire() && - node.history().event(History.Event.Type.wantToRetire).get().agent() == Agent.operator) { + if (retiredByOperator(node)) { nodeRepository.park(node.hostname(), false, Agent.InactiveExpirer, "Expired by InactiveExpirer"); } else { nodeRepository.setDirty(node, Agent.InactiveExpirer, "Expired by InactiveExpirer"); @@ -54,4 +53,11 @@ public class InactiveExpirer extends Expirer { || node.allocation().get().owner().instance().isTester(); } + private static boolean retiredByOperator(Node node) { + return node.status().wantToRetire() && node.history().event(History.Event.Type.wantToRetire) + .map(History.Event::agent) + .map(agent -> agent == Agent.operator) + .orElse(false); + } + } diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/Agent.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/Agent.java index 18a8fe7be6a..31b7181a58a 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/Agent.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/Agent.java @@ -7,9 +7,11 @@ package com.yahoo.vespa.hosted.provision.node; * @author bratseth */ public enum Agent { + operator, // A hosted Vespa operator. Some logic recognizes these events. application, // An application package change deployment system, // An unspecified system agent + // Specific system agents: NodeFailer, Rebalancer, @@ -18,5 +20,7 @@ public enum Agent { InactiveExpirer, ProvisionedExpirer, ReservationExpirer, - DynamicProvisioningMaintainer + DynamicProvisioningMaintainer, + RetiringUpgrader; + } diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/os/RetiringUpgrader.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/os/RetiringUpgrader.java index 8b11c10e3dd..6bd2545b153 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/os/RetiringUpgrader.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/os/RetiringUpgrader.java @@ -6,6 +6,7 @@ import com.yahoo.config.provision.NodeType; import com.yahoo.vespa.hosted.provision.Node; import com.yahoo.vespa.hosted.provision.NodeList; import com.yahoo.vespa.hosted.provision.NodeRepository; +import com.yahoo.vespa.hosted.provision.node.Agent; import java.time.Duration; import java.time.Instant; @@ -66,15 +67,15 @@ public class RetiringUpgrader implements Upgrader { host = currentNode.get(); NodeType nodeType = host.type(); List<Node> nodesToRetire = nodeRepository.list().childrenOf(host).stream() - .map(child -> child.with(child.status().withWantToRetire(true))) + .map(child -> child.withWantToRetire(true, Agent.RetiringUpgrader, now)) .collect(Collectors.toList()); LOG.info("Retiring and deprovisioning " + host + ": On stale OS version " + host.status().osVersion().current().map(Version::toFullString).orElse("<unset>") + ", want " + target); nodesToRetire.add(host.with(host.status() - .withWantToRetire(true) .withWantToDeprovision(true) - .withOsVersion(host.status().osVersion().withWanted(Optional.of(target))))); + .withOsVersion(host.status().osVersion().withWanted(Optional.of(target)))) + .withWantToRetire(true, Agent.RetiringUpgrader, now)); nodeRepository.write(nodesToRetire, lock); nodeRepository.osVersions().writeChange((change) -> change.withRetirementAt(now, nodeType)); } diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/NodeSerializer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/NodeSerializer.java index 81fc542afcc..15be7796187 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/NodeSerializer.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/NodeSerializer.java @@ -19,17 +19,17 @@ import com.yahoo.slime.ArrayTraverser; import com.yahoo.slime.Cursor; import com.yahoo.slime.Inspector; import com.yahoo.slime.Slime; -import com.yahoo.slime.Type; import com.yahoo.slime.SlimeUtils; +import com.yahoo.slime.Type; import com.yahoo.vespa.hosted.provision.Node; import com.yahoo.vespa.hosted.provision.node.Agent; import com.yahoo.vespa.hosted.provision.node.Allocation; import com.yahoo.vespa.hosted.provision.node.Generation; import com.yahoo.vespa.hosted.provision.node.History; import com.yahoo.vespa.hosted.provision.node.IP; +import com.yahoo.vespa.hosted.provision.node.OsVersion; import com.yahoo.vespa.hosted.provision.node.Reports; import com.yahoo.vespa.hosted.provision.node.Status; -import com.yahoo.vespa.hosted.provision.node.OsVersion; import java.io.IOException; import java.time.Instant; @@ -394,6 +394,7 @@ public class NodeSerializer { case "ProvisionedExpirer" : return Agent.ProvisionedExpirer; case "ReservationExpirer" : return Agent.ReservationExpirer; case "DynamicProvisioningMaintainer" : return Agent.DynamicProvisioningMaintainer; + case "RetiringUpgrader" : return Agent.RetiringUpgrader; } throw new IllegalArgumentException("Unknown node event agent '" + eventAgentField.asString() + "'"); } @@ -410,6 +411,7 @@ public class NodeSerializer { case ProvisionedExpirer : return "ProvisionedExpirer"; case ReservationExpirer : return "ReservationExpirer"; case DynamicProvisioningMaintainer : return "DynamicProvisioningMaintainer"; + case RetiringUpgrader: return "RetiringUpgrader"; } throw new IllegalArgumentException("Serialized form of '" + agent + "' not defined"); } |