From f691ef4ecf139fb5901b0b01f09c65abed46534f Mon Sep 17 00:00:00 2001 From: Martin Polden Date: Mon, 18 May 2020 15:02:31 +0200 Subject: Retire on behalf of a specific system agent --- .../src/main/java/com/yahoo/vespa/hosted/provision/node/Agent.java | 6 +++++- .../java/com/yahoo/vespa/hosted/provision/os/RetiringUpgrader.java | 7 ++++--- .../yahoo/vespa/hosted/provision/persistence/NodeSerializer.java | 6 ++++-- 3 files changed, 13 insertions(+), 6 deletions(-) (limited to 'node-repository') 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 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("") + ", 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"); } -- cgit v1.2.3