diff options
author | jonmv <venstad@gmail.com> | 2023-08-24 13:18:17 +0200 |
---|---|---|
committer | jonmv <venstad@gmail.com> | 2023-08-24 13:18:17 +0200 |
commit | f7be7552d0184ad34341dc66ffda53be1e7e1563 (patch) | |
tree | a2244ffb55d61fd760bd5caf0fbf9556999b000b /node-repository | |
parent | 39420e6f2331825568605cfeb2975844de99de3a (diff) |
Avoid writing new hosts twice when retrying in GCP
Diffstat (limited to 'node-repository')
-rw-r--r-- | node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/Preparer.java | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/Preparer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/Preparer.java index 349be9e4b47..48e209cd41d 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/Preparer.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/Preparer.java @@ -16,15 +16,18 @@ import com.yahoo.vespa.hosted.provision.NodeRepository; import com.yahoo.vespa.hosted.provision.node.Agent; import com.yahoo.vespa.hosted.provision.provisioning.HostProvisioner.HostSharing; -import java.util.ArrayList; +import java.util.LinkedHashSet; import java.util.List; import java.util.Optional; +import java.util.Set; import java.util.function.Consumer; import java.util.function.Predicate; import java.util.function.Supplier; import java.util.logging.Level; import java.util.logging.Logger; +import static java.util.function.Predicate.not; + /** * Performs preparation of node activation changes for a cluster of an application. * @@ -91,10 +94,13 @@ public class Preparer { HostSharing sharing = hostSharing(cluster, hostType); Version osVersion = nodeRepository.osVersions().targetFor(hostType).orElse(Version.emptyVersion); NodeAllocation.HostDeficit deficit = allocation.hostDeficit().get(); - List<Node> hosts = new ArrayList<>(); + Set<Node> hosts = new LinkedHashSet<>(); Consumer<List<ProvisionedHost>> whenProvisioned = provisionedHosts -> { - hosts.addAll(provisionedHosts.stream().map(host -> host.generateHost(requested.hostTTL())).toList()); - nodeRepository.nodes().addNodes(hosts, Agent.application); + List<Node> newHosts = provisionedHosts.stream() + .map(host -> host.generateHost(requested.hostTTL())) + .filter(hosts::add) + .toList(); + nodeRepository.nodes().addNodes(newHosts, Agent.application); // Offer the nodes on the newly provisioned hosts, this should be enough to cover the deficit List<NodeCandidate> candidates = provisionedHosts.stream() |