summaryrefslogtreecommitdiffstats
path: root/node-repository
diff options
context:
space:
mode:
authorjonmv <venstad@gmail.com>2023-08-24 13:18:17 +0200
committerjonmv <venstad@gmail.com>2023-08-24 13:18:17 +0200
commitf7be7552d0184ad34341dc66ffda53be1e7e1563 (patch)
treea2244ffb55d61fd760bd5caf0fbf9556999b000b /node-repository
parent39420e6f2331825568605cfeb2975844de99de3a (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.java14
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()