summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjonmv <venstad@gmail.com>2023-11-20 10:47:04 +0100
committerjonmv <venstad@gmail.com>2023-11-20 10:47:30 +0100
commit88ba68c235ce3160fb940d214debbedc10a94444 (patch)
treef81541a2afb49bc911b1f8f623b051acb2ed1c8a
parenta534a4b08f4eddc0022ddce8bff47222a725db98 (diff)
Make idSeed mandatory
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepository.java3
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/lb/LoadBalancerInstance.java6
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/lb/LoadBalancerService.java14
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/lb/LoadBalancerServiceMock.java20
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/lb/SharedLoadBalancerService.java31
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/CuratorDb.java2
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/LoadBalancerSerializer.java8
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/LoadBalancerProvisioner.java22
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisionServiceProvider.java2
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/LoadBalancersResponse.java2
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/lb/SharedLoadBalancerServiceTest.java2
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/persistence/LoadBalancerSerializerTest.java10
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/LoadBalancerProvisionerTest.java11
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/load-balancers-single.json2
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/load-balancers.json4
15 files changed, 73 insertions, 66 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepository.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepository.java
index a4a4c42d9c1..5406d820498 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepository.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepository.java
@@ -264,7 +264,8 @@ public class NodeRepository extends AbstractComponent implements HealthCheckerPr
.cluster(endpoint.clusterName())
.first()
.flatMap(LoadBalancer::instance)
- .flatMap(LoadBalancerInstance::idSeed));
+ .map(LoadBalancerInstance::idSeed)
+ .orElseThrow(() -> new IllegalArgumentException("no load balancer instance for '" + endpoint + "'")));
}
}
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/lb/LoadBalancerInstance.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/lb/LoadBalancerInstance.java
index 4dbf891b1b7..818858ef385 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/lb/LoadBalancerInstance.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/lb/LoadBalancerInstance.java
@@ -20,7 +20,7 @@ import java.util.Set;
*/
public class LoadBalancerInstance {
- private final Optional<String> idSeed;
+ private final String idSeed;
private final Optional<DomainName> hostname;
private final Optional<String> ip4Address;
private final Optional<String> ip6Address;
@@ -32,7 +32,7 @@ public class LoadBalancerInstance {
private final List<PrivateServiceId> serviceIds;
private final CloudAccount cloudAccount;
- public LoadBalancerInstance(Optional<String> idSeed, Optional<DomainName> hostname, Optional<String> ip4Address, Optional<String> ip6Address,
+ public LoadBalancerInstance(String idSeed, Optional<DomainName> hostname, Optional<String> ip4Address, Optional<String> ip6Address,
Optional<DnsZone> dnsZone, Set<Integer> ports, Set<String> networks, Set<Real> reals,
ZoneEndpoint settings, List<PrivateServiceId> serviceIds, CloudAccount cloudAccount) {
this.idSeed = Objects.requireNonNull(idSeed, "idSeed must be non-null");
@@ -54,7 +54,7 @@ public class LoadBalancerInstance {
}
/** A unique seed to use when generating cloud-specific resource IDs for this load balancer instance. */
- public Optional<String> idSeed() {
+ public String idSeed() {
return idSeed;
}
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/lb/LoadBalancerService.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/lb/LoadBalancerService.java
index 6ddde1151dd..9e62edf8d4b 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/lb/LoadBalancerService.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/lb/LoadBalancerService.java
@@ -7,8 +7,6 @@ import com.yahoo.config.provision.EndpointsChecker.Endpoint;
import com.yahoo.config.provision.EndpointsChecker.HealthChecker;
import com.yahoo.config.provision.NodeType;
-import java.util.Optional;
-
/**
* A managed load balance service.
*
@@ -20,18 +18,10 @@ public interface LoadBalancerService {
* Provisions load balancers from the given specification. Implementations are expected to be idempotent
*
* @param spec Load balancer specification
- * @return The provisioned load balancer instance
- */
- default LoadBalancerInstance provision(LoadBalancerSpec spec) { return provision(spec, Optional.empty()); }
-
- /**
- * Provisions load balancers from the given specification. Implementations are expected to be idempotent
- *
- * @param spec Load balancer specification
* @param idSeed Seed for generating a unique ID for the load balancer instance
* @return The provisioned load balancer instance
*/
- LoadBalancerInstance provision(LoadBalancerSpec spec, Optional<String> idSeed);
+ LoadBalancerInstance provision(LoadBalancerSpec spec, String idSeed);
/**
* Configures load balancers for the given specification. Implementations are expected to be idempotent
@@ -56,7 +46,7 @@ public interface LoadBalancerService {
boolean supports(NodeType nodeType, ClusterSpec.Type clusterType);
/** See {@link HealthChecker#healthy(Endpoint)}. */
- Availability healthy(Endpoint endpoint, Optional<String> idSeed);
+ Availability healthy(Endpoint endpoint, String idSeed);
/** Load balancer protocols */
enum Protocol {
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/lb/LoadBalancerServiceMock.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/lb/LoadBalancerServiceMock.java
index 03ff17c6ebc..2b1007f75d4 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/lb/LoadBalancerServiceMock.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/lb/LoadBalancerServiceMock.java
@@ -26,13 +26,11 @@ import static java.util.stream.Collectors.toMap;
public class LoadBalancerServiceMock implements LoadBalancerService {
private record Key(ApplicationId application, ClusterSpec.Id cluster, String idSeed) {
- @Override public int hashCode() { return idSeed == null ? Objects.hash(application, cluster) : Objects.hash(idSeed); }
+ @Override public int hashCode() { return idSeed.hashCode(); }
@Override public boolean equals(Object o) {
if (o == this) return true;
if ( ! (o instanceof Key key)) return false;
- if (idSeed != null) return Objects.equals(idSeed, key.idSeed);
- return Objects.equals(application, key.application) &&
- Objects.equals(cluster, key.cluster);
+ return Objects.equals(idSeed, key.idSeed);
}
}
private final Map<Key, LoadBalancerInstance> instances = new HashMap<>();
@@ -68,7 +66,7 @@ public class LoadBalancerServiceMock implements LoadBalancerService {
}
@Override
- public LoadBalancerInstance provision(LoadBalancerSpec spec, Optional<String> idSeed) {
+ public LoadBalancerInstance provision(LoadBalancerSpec spec, String idSeed) {
if (throwOnCreate) throw new IllegalStateException("Did not expect a new load balancer to be created");
var instance = new LoadBalancerInstance(
idSeed,
@@ -82,13 +80,13 @@ public class LoadBalancerServiceMock implements LoadBalancerService {
spec.settings(),
spec.settings().isPrivateEndpoint() ? List.of(PrivateServiceId.of("service")) : List.of(),
spec.cloudAccount());
- instances.put(new Key(spec.application(), spec.cluster(), idSeed.orElse(null)), instance);
+ instances.put(new Key(spec.application(), spec.cluster(), idSeed), instance);
return instance;
}
@Override
public LoadBalancerInstance configure(LoadBalancerInstance instance, LoadBalancerSpec spec, boolean force) {
- var id = new Key(spec.application(), spec.cluster(), instance.idSeed().orElse(null));
+ var id = new Key(spec.application(), spec.cluster(), instance.idSeed());
var oldInstance = requireNonNull(instances.get(id), "expected existing load balancer " + id);
if (!force && !oldInstance.reals().isEmpty() && spec.reals().isEmpty()) {
throw new IllegalArgumentException("Refusing to remove all reals from load balancer " + id);
@@ -102,20 +100,20 @@ public class LoadBalancerServiceMock implements LoadBalancerService {
@Override
public void reallocate(LoadBalancerInstance provisioned, LoadBalancerSpec spec) {
- instances.put(new Key(spec.application(), spec.cluster(), provisioned.idSeed().get()),
- requireNonNull(instances.remove(new Key(null, null, provisioned.idSeed().get())))); // ᕙ༼◕_◕༽ᕤ
+ instances.put(new Key(spec.application(), spec.cluster(), provisioned.idSeed()),
+ requireNonNull(instances.remove(new Key(null, null, provisioned.idSeed())))); // ᕙ༼◕_◕༽ᕤ
}
@Override
public void remove(LoadBalancer loadBalancer) {
requireNonNull(instances.remove(new Key(loadBalancer.id().application(),
loadBalancer.id().cluster(),
- loadBalancer.instance().get().idSeed().orElse(null))),
+ loadBalancer.instance().get().idSeed())),
"expected load balancer to exist: " + loadBalancer.id());
}
@Override
- public Availability healthy(Endpoint endpoint, Optional<String> idSeed) {
+ public Availability healthy(Endpoint endpoint, String idSeed) {
return Availability.ready;
}
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/lb/SharedLoadBalancerService.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/lb/SharedLoadBalancerService.java
index 883b8dec944..f6de166ed01 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/lb/SharedLoadBalancerService.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/lb/SharedLoadBalancerService.java
@@ -30,24 +30,11 @@ public class SharedLoadBalancerService implements LoadBalancerService {
}
@Override
- public LoadBalancerInstance provision(LoadBalancerSpec spec, Optional<String> idSeed) {
- return create(spec);
- }
-
- @Override
- public LoadBalancerInstance configure(LoadBalancerInstance instance, LoadBalancerSpec spec, boolean force) {
- return instance.with(spec.reals(), spec.settings(), Optional.empty());
- }
-
- @Override
- public void reallocate(LoadBalancerInstance provisioned, LoadBalancerSpec spec) {
- throw new UnsupportedOperationException("reallocate is not supported with " + getClass());
- }
-
- private LoadBalancerInstance create(LoadBalancerSpec spec) {
+ public LoadBalancerInstance provision(LoadBalancerSpec spec, String idSeed) {
if ( ! spec.settings().isPublicEndpoint())
throw new IllegalArgumentException("non-public endpoints is not supported with " + getClass());
- return new LoadBalancerInstance(Optional.empty(),
+
+ return new LoadBalancerInstance(idSeed,
Optional.of(DomainName.of(vipHostname)),
Optional.empty(),
Optional.empty(),
@@ -61,6 +48,16 @@ public class SharedLoadBalancerService implements LoadBalancerService {
}
@Override
+ public LoadBalancerInstance configure(LoadBalancerInstance instance, LoadBalancerSpec spec, boolean force) {
+ return instance.with(spec.reals(), spec.settings(), Optional.empty());
+ }
+
+ @Override
+ public void reallocate(LoadBalancerInstance provisioned, LoadBalancerSpec spec) {
+ throw new UnsupportedOperationException("reallocate is not supported with " + getClass());
+ }
+
+ @Override
public void remove(LoadBalancer loadBalancer) {
// Do nothing, we have no external state to modify
}
@@ -78,7 +75,7 @@ public class SharedLoadBalancerService implements LoadBalancerService {
}
@Override
- public Availability healthy(Endpoint endpoint, Optional<String> idSeed) {
+ public Availability healthy(Endpoint endpoint, String idSeed) {
return Availability.ready;
}
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/CuratorDb.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/CuratorDb.java
index d511570881b..31d79d34c94 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/CuratorDb.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/CuratorDb.java
@@ -445,7 +445,7 @@ public class CuratorDb {
}
public Optional<LoadBalancer> readLoadBalancer(LoadBalancerId id) {
- return read(loadBalancerPath(id), LoadBalancerSerializer::fromJson);
+ return read(loadBalancerPath(id), bytes -> LoadBalancerSerializer.fromJson(id, bytes));
}
public void writeLoadBalancer(LoadBalancer loadBalancer, LoadBalancer.State fromState) {
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/LoadBalancerSerializer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/LoadBalancerSerializer.java
index 756692917e3..e351a4cc59f 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/LoadBalancerSerializer.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/LoadBalancerSerializer.java
@@ -17,6 +17,7 @@ import com.yahoo.vespa.hosted.provision.lb.LoadBalancerId;
import com.yahoo.vespa.hosted.provision.lb.LoadBalancerInstance;
import com.yahoo.vespa.hosted.provision.lb.PrivateServiceId;
import com.yahoo.vespa.hosted.provision.lb.Real;
+import com.yahoo.vespa.hosted.provision.provisioning.LoadBalancerProvisioner;
import java.io.IOException;
import java.io.UncheckedIOException;
@@ -71,7 +72,7 @@ public class LoadBalancerSerializer {
Cursor root = slime.setObject();
root.setString(idField, loadBalancer.id().serializedForm());
- loadBalancer.instance().flatMap(LoadBalancerInstance::idSeed).ifPresent(idSeed -> root.setString(idSeedField, idSeed));
+ loadBalancer.instance().map(LoadBalancerInstance::idSeed).ifPresent(idSeed -> root.setString(idSeedField, idSeed));
loadBalancer.instance().flatMap(LoadBalancerInstance::hostname).ifPresent(hostname -> root.setString(hostnameField, hostname.value()));
loadBalancer.instance().flatMap(LoadBalancerInstance::ip4Address).ifPresent(ip -> root.setString(lbIpAddressField, ip));
loadBalancer.instance().flatMap(LoadBalancerInstance::ip6Address).ifPresent(ip -> root.setString(lbIp6AddressField, ip));
@@ -110,7 +111,7 @@ public class LoadBalancerSerializer {
}
}
- public static LoadBalancer fromJson(byte[] data) {
+ public static LoadBalancer fromJson(LoadBalancerId id, byte[] data) {
Cursor object = SlimeUtils.jsonToSlime(data).get();
Set<Real> reals = new LinkedHashSet<>();
@@ -127,7 +128,8 @@ public class LoadBalancerSerializer {
Set<String> networks = new LinkedHashSet<>();
object.field(networksField).traverse((ArrayTraverser) (i, network) -> networks.add(network.asString()));
- Optional<String> idSeed = SlimeUtils.optionalString(object.field(idSeedField));
+ // TODO jonmv: remove fallback after data is re-written.
+ String idSeed = SlimeUtils.optionalString(object.field(idSeedField)).orElse(id.application().tenant().value() + id.application().application().value() + id.application().instance().value() + id.cluster().value());
Optional<DomainName> hostname = SlimeUtils.optionalString(object.field(hostnameField)).map(DomainName::of);
Optional<String> ip4Address = SlimeUtils.optionalString(object.field(lbIpAddressField));
Optional<String> ip6Address = SlimeUtils.optionalString(object.field(lbIp6AddressField));
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/LoadBalancerProvisioner.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/LoadBalancerProvisioner.java
index 24bca326f82..0964a9d9779 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/LoadBalancerProvisioner.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/LoadBalancerProvisioner.java
@@ -268,7 +268,7 @@ public class LoadBalancerProvisioner {
log.log(Level.INFO, () -> "Provisioning instance for " + id);
try {
LoadBalancerSpec spec = new LoadBalancerSpec(id.application(), id.cluster(), reals, settings, requested.cloudAccount());
- return provisionFromPool(spec, requested.type()).orElseGet(() -> service.provision(spec))
+ return provisionFromPool(spec, requested.type()).orElseGet(() -> service.provision(spec, toSeed(id, requested.type())))
// Provisioning a private endpoint service requires hard resources to be ready, so we delay it until activation.
.withServiceIds(currentLoadBalancer.flatMap(LoadBalancer::instance).map(LoadBalancerInstance::serviceIds).orElse(List.of()));
}
@@ -328,8 +328,9 @@ public class LoadBalancerProvisioner {
while (head - tail < size) {
ClusterSpec.Id slot = slotId(head);
LoadBalancerSpec spec = preProvisionSpec(slot, nodeRepository.zone().cloud().account());
- db.writeLoadBalancer(new LoadBalancer(new LoadBalancerId(preProvisionOwner, slot),
- Optional.of(service.provision(spec, Optional.of(slot.value()))),
+ LoadBalancerId id = new LoadBalancerId(preProvisionOwner, slot);
+ db.writeLoadBalancer(new LoadBalancer(id,
+ Optional.of(service.provision(spec, toSeed(id, NodeType.tenant))),
State.active, // Keep the expirer away.
nodeRepository.clock().instant()),
null);
@@ -337,6 +338,21 @@ public class LoadBalancerProvisioner {
}
}
+ public static String toSeed(LoadBalancerId id, NodeType type) {
+ return type == NodeType.tenant ? toSeed(id) : toLegacySeed(id.application(), id.cluster());
+ }
+
+ public static String toSeed(LoadBalancerId id) {
+ return id.serializedForm();
+ }
+
+ public static String toLegacySeed(ApplicationId application, ClusterSpec.Id cluster) {
+ return application.tenant().value() +
+ application.application().value() +
+ application.instance().value() +
+ cluster.value(); // ಠ_ಠ
+ }
+
/** Reconfigure a load balancer instance, if necessary */
private LoadBalancerInstance configureInstance(LoadBalancerId id, NodeList nodes,
LoadBalancer currentLoadBalancer,
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisionServiceProvider.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisionServiceProvider.java
index 20202ca7a74..6aafea637aa 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisionServiceProvider.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisionServiceProvider.java
@@ -25,7 +25,7 @@ public interface ProvisionServiceProvider {
}
interface ProtoHealthChecker {
- Availability healthy(Endpoint endpoint, Optional<String> idSeed);
+ Availability healthy(Endpoint endpoint, String idSeed);
}
}
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/LoadBalancersResponse.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/LoadBalancersResponse.java
index f1a10134c7a..dd63d18ea38 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/LoadBalancersResponse.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/LoadBalancersResponse.java
@@ -90,7 +90,7 @@ public class LoadBalancersResponse extends SlimeJsonResponse {
}
instance.serviceId().ifPresent(serviceId -> lbObject.setString("serviceId", serviceId.value()));
lbObject.setBool("public", instance.settings().isPublicEndpoint());
- instance.idSeed().ifPresent(idSeed -> lbObject.setString("idSeed", idSeed));
+ lbObject.setString("idSeed", instance.idSeed());
});
lb.instance()
.map(LoadBalancerInstance::cloudAccount)
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/lb/SharedLoadBalancerServiceTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/lb/SharedLoadBalancerServiceTest.java
index 7475a3654b7..91d04ba5ff9 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/lb/SharedLoadBalancerServiceTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/lb/SharedLoadBalancerServiceTest.java
@@ -31,7 +31,7 @@ public class SharedLoadBalancerServiceTest {
LoadBalancerSpec spec = new LoadBalancerSpec(applicationId, clusterId, reals,
ZoneEndpoint.defaultEndpoint, CloudAccount.empty);
- var lb = loadBalancerService.configure(loadBalancerService.provision(spec), spec, false);
+ var lb = loadBalancerService.configure(loadBalancerService.provision(spec, "seed"), spec, false);
assertEquals(Optional.of(HostName.of("vip.example.com")), lb.hostname());
assertEquals(Optional.empty(), lb.dnsZone());
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/persistence/LoadBalancerSerializerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/persistence/LoadBalancerSerializerTest.java
index 0d3c1994ad8..c4688f0b3dd 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/persistence/LoadBalancerSerializerTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/persistence/LoadBalancerSerializerTest.java
@@ -39,7 +39,7 @@ public class LoadBalancerSerializerTest {
{
var loadBalancer = new LoadBalancer(loadBalancerId,
Optional.of(new LoadBalancerInstance(
- Optional.of("1"),
+ "1",
Optional.of(DomainName.of("lb-host")),
Optional.empty(),
Optional.empty(),
@@ -58,7 +58,7 @@ public class LoadBalancerSerializerTest {
LoadBalancer.State.active,
now);
- var serialized = LoadBalancerSerializer.fromJson(LoadBalancerSerializer.toJson(loadBalancer));
+ var serialized = LoadBalancerSerializer.fromJson(loadBalancer.id(), LoadBalancerSerializer.toJson(loadBalancer));
assertEquals(loadBalancer.id(), serialized.id());
assertEquals(loadBalancer.instance().get().idSeed(), serialized.instance().get().idSeed());
assertEquals(loadBalancer.instance().get().hostname(), serialized.instance().get().hostname());
@@ -75,7 +75,7 @@ public class LoadBalancerSerializerTest {
{
var loadBalancer = new LoadBalancer(loadBalancerId,
Optional.of(new LoadBalancerInstance(
- Optional.empty(),
+ "",
Optional.empty(),
Optional.of("1.2.3.4"),
Optional.of("fd00::1"),
@@ -89,7 +89,7 @@ public class LoadBalancerSerializerTest {
LoadBalancer.State.active,
now);
- var serialized = LoadBalancerSerializer.fromJson(LoadBalancerSerializer.toJson(loadBalancer));
+ var serialized = LoadBalancerSerializer.fromJson(loadBalancer.id(), LoadBalancerSerializer.toJson(loadBalancer));
assertEquals(loadBalancer.id(), serialized.id());
assertEquals(loadBalancer.instance().get().idSeed(), serialized.instance().get().idSeed());
assertEquals(loadBalancer.instance().get().hostname(), serialized.instance().get().hostname());
@@ -112,7 +112,7 @@ public class LoadBalancerSerializerTest {
var now = Instant.now();
var loadBalancer = new LoadBalancer(loadBalancerId, Optional.empty(), LoadBalancer.State.reserved, now);
- var serialized = LoadBalancerSerializer.fromJson(LoadBalancerSerializer.toJson(loadBalancer));
+ var serialized = LoadBalancerSerializer.fromJson(loadBalancerId, LoadBalancerSerializer.toJson(loadBalancer));
assertEquals(loadBalancer.id(), serialized.id());
assertEquals(loadBalancer.instance(), serialized.instance());
assertEquals(loadBalancer.state(), serialized.state());
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/LoadBalancerProvisionerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/LoadBalancerProvisionerTest.java
index fb59b3077f8..fce788c7e32 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/LoadBalancerProvisionerTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/LoadBalancerProvisionerTest.java
@@ -50,6 +50,7 @@ import java.util.SortedSet;
import java.util.function.Supplier;
import java.util.stream.Collectors;
+import static com.yahoo.vespa.hosted.provision.lb.LoadBalancerSpec.preProvisionOwner;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertSame;
@@ -190,15 +191,15 @@ public class LoadBalancerProvisionerTest {
provisioner.refreshPool();
expirer.run();
assertEquals(2, tester.nodeRepository().loadBalancers().list().size());
- assertEquals(2, tester.nodeRepository().loadBalancers().list(LoadBalancerSpec.preProvisionOwner).size());
+ assertEquals(2, tester.nodeRepository().loadBalancers().list(preProvisionOwner).size());
// Provision a load balancer when the pool has two entries.
ClusterSpec.Id containerCluster = ClusterSpec.Id.from("qrs");
prepare(app1, clusterRequest(ClusterSpec.Type.container, containerCluster));
List<LoadBalancer> loadBalancers = tester.nodeRepository().loadBalancers().list(app1).asList();
assertEquals(1, loadBalancers.size());
- assertEquals(1, tester.nodeRepository().loadBalancers().list(LoadBalancerSpec.preProvisionOwner).asList().size());
- assertEquals(Optional.of("1"), loadBalancers.get(0).instance().get().idSeed());
+ assertEquals(1, tester.nodeRepository().loadBalancers().list(preProvisionOwner).asList().size());
+ assertEquals(preProvisionOwner.serializedForm() + ":1", loadBalancers.get(0).instance().get().idSeed());
// Shrink pool to 0 entries.
flagSource.withIntFlag(PermanentFlags.PRE_PROVISIONED_LB_COUNT.id(), 0);
@@ -214,8 +215,8 @@ public class LoadBalancerProvisionerTest {
assertThrows(IllegalStateException.class, provisioner::refreshPool).getMessage());
tester.loadBalancerService().throwOnCreate(false);
provisioner.refreshPool();
- assertEquals(List.of(Optional.of("3")),
- tester.nodeRepository().loadBalancers().list(LoadBalancerSpec.preProvisionOwner)
+ assertEquals(List.of(preProvisionOwner.serializedForm() + ":3"),
+ tester.nodeRepository().loadBalancers().list(preProvisionOwner)
.mapToList(lb -> lb.instance().get().idSeed()));
}
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/load-balancers-single.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/load-balancers-single.json
index 620275bb033..bc5a04edc2f 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/load-balancers-single.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/load-balancers-single.json
@@ -7,7 +7,7 @@
"dnsZone": "zone-id-1",
"hostname": "lb-hosted-vespa.pre-provision-1",
"id": "tenant4:application4:instance4:id4",
- "idSeed": "1",
+ "idSeed": "hosted-vespa:pre-provision:default:1",
"instance": "instance4",
"networks": [
"10.2.3.0/24",
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/load-balancers.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/load-balancers.json
index e8392d92522..883820634fe 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/load-balancers.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/load-balancers.json
@@ -7,6 +7,7 @@
"dnsZone": "zone-id-1",
"hostname": "lb-tenant1.application1.instance1-id1",
"id": "tenant1:application1:instance1:id1",
+ "idSeed": "tenant1:application1:instance1:id1",
"instance": "instance1",
"networks": [
"10.2.3.0/24",
@@ -47,6 +48,7 @@
"dnsZone": "zone-id-1",
"hostname": "lb-hosted-vespa.zone-config-servers-zone-config-servers",
"id": "hosted-vespa:zone-config-servers:default:zone-config-servers",
+ "idSeed": "hosted-vespazone-config-serversdefaultzone-config-servers",
"instance": "default",
"networks": [
"10.2.3.0/24",
@@ -78,7 +80,7 @@
"dnsZone": "zone-id-1",
"hostname": "lb-hosted-vespa.pre-provision-1",
"id": "tenant4:application4:instance4:id4",
- "idSeed": "1",
+ "idSeed": "hosted-vespa:pre-provision:default:1",
"instance": "instance4",
"networks": [
"10.2.3.0/24",