aboutsummaryrefslogtreecommitdiffstats
path: root/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/HostFlavorUpgrader.java
diff options
context:
space:
mode:
authorValerij Fredriksen <valerijf@vespa.ai>2023-11-01 17:19:42 +0100
committerValerij Fredriksen <valerijf@vespa.ai>2023-11-02 11:31:39 +0100
commit2d8d4b19a6bc48dd93403deb2a1a1732943d4249 (patch)
tree15c98c644901ed22dd9b412c225860c1d2af42e3 /node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/HostFlavorUpgrader.java
parentebb157dc5353e6f7e16001165bf13b738ea35142 (diff)
HostFlavorUpgrader: Reprocess hosts with non-retiring nodes
Diffstat (limited to 'node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/HostFlavorUpgrader.java')
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/HostFlavorUpgrader.java7
1 files changed, 6 insertions, 1 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/HostFlavorUpgrader.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/HostFlavorUpgrader.java
index 01da75f90b6..b6897d5b1c9 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/HostFlavorUpgrader.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/HostFlavorUpgrader.java
@@ -14,9 +14,11 @@ import com.yahoo.vespa.hosted.provision.node.Allocation;
import com.yahoo.vespa.hosted.provision.provisioning.HostProvisioner;
import java.time.Duration;
+import java.util.HashSet;
import java.util.Objects;
import java.util.Optional;
import java.util.Random;
+import java.util.Set;
import java.util.function.Predicate;
import java.util.logging.Level;
@@ -63,13 +65,15 @@ public class HostFlavorUpgrader extends NodeRepositoryMaintainer {
NodeList activeNodes = allNodes.nodeType(NodeType.tenant)
.state(Node.State.active)
.shuffle(random); // Shuffle to avoid getting stuck trying to upgrade the same host
+ Set<String> exhaustedFlavors = new HashSet<>();
for (var node : activeNodes) {
Optional<Node> parent = allNodes.parentOf(node);
if (parent.isEmpty()) continue;
+ if (exhaustedFlavors.contains(parent.get().flavor().name())) continue;
Allocation allocation = node.allocation().get();
Predicate<NodeResources> realHostResourcesWithinLimits = resources -> nodeRepository().nodeResourceLimits().isWithinRealLimits(resources, allocation.owner(), allocation.membership().cluster());
if (!hostProvisioner.canUpgradeFlavor(parent.get(), node, realHostResourcesWithinLimits)) continue;
- if (parent.get().status().wantToUpgradeFlavor()) continue; // Already upgrading
+ if (parent.get().status().wantToUpgradeFlavor() && allocation.membership().retired()) continue; // Already upgrading
boolean redeployed = false;
boolean deploymentValid = false;
@@ -85,6 +89,7 @@ public class HostFlavorUpgrader extends NodeRepositoryMaintainer {
return 1.0;
} catch (NodeAllocationException e) {
// Fine, no capacity for upgrade
+ exhaustedFlavors.add(parent.get().flavor().name());
} finally {
if (deploymentValid && !redeployed) { // Cancel upgrade if redeploy failed
upgradeFlavor(parent.get(), false);