aboutsummaryrefslogtreecommitdiffstats
path: root/config-provisioning
diff options
context:
space:
mode:
authorjonmv <venstad@gmail.com>2022-12-01 14:12:33 +0100
committerjonmv <venstad@gmail.com>2022-12-01 14:12:33 +0100
commit4226f2d67552c31e07a5be772691be213770a1b7 (patch)
tree8ae23d295a385dd286a6b2b080fc7a8715ab39c8 /config-provisioning
parent2925f225b34ad7fa3eb515bbddcc8c774e514131 (diff)
Write new settings only on activation
Diffstat (limited to 'config-provisioning')
-rw-r--r--config-provisioning/src/main/java/com/yahoo/config/provision/ClusterMembership.java11
-rw-r--r--config-provisioning/src/main/java/com/yahoo/config/provision/serialization/AllocatedHostsSerializer.java20
-rw-r--r--config-provisioning/src/test/java/com/yahoo/config/provision/serialization/AllocatedHostsSerializerTest.java11
3 files changed, 36 insertions, 6 deletions
diff --git a/config-provisioning/src/main/java/com/yahoo/config/provision/ClusterMembership.java b/config-provisioning/src/main/java/com/yahoo/config/provision/ClusterMembership.java
index afa3c0a4062..83a2258976e 100644
--- a/config-provisioning/src/main/java/com/yahoo/config/provision/ClusterMembership.java
+++ b/config-provisioning/src/main/java/com/yahoo/config/provision/ClusterMembership.java
@@ -21,7 +21,8 @@ public class ClusterMembership {
protected ClusterMembership() {}
- private ClusterMembership(String stringValue, Version vespaVersion, Optional<DockerImage> dockerImageRepo) {
+ private ClusterMembership(String stringValue, Version vespaVersion, Optional<DockerImage> dockerImageRepo,
+ LoadBalancerSettings loadBalancerSettings) {
String[] components = stringValue.split("/");
if (components.length < 4)
throw new RuntimeException("Could not parse '" + stringValue + "' to a cluster membership. " +
@@ -49,6 +50,7 @@ public class ClusterMembership {
.exclusive(exclusive)
.combinedId(combinedId.map(ClusterSpec.Id::from))
.dockerImageRepository(dockerImageRepo)
+ .loadBalancerSettings(loadBalancerSettings)
.stateful(stateful)
.build();
this.index = Integer.parseInt(components[3]);
@@ -123,7 +125,12 @@ public class ClusterMembership {
public String toString() { return stringValue(); }
public static ClusterMembership from(String stringValue, Version vespaVersion, Optional<DockerImage> dockerImageRepo) {
- return new ClusterMembership(stringValue, vespaVersion, dockerImageRepo);
+ return from(stringValue, vespaVersion, dockerImageRepo, LoadBalancerSettings.empty);
+ }
+
+ public static ClusterMembership from(String stringValue, Version vespaVersion, Optional<DockerImage> dockerImageRepo,
+ LoadBalancerSettings loadBalancerSettings) {
+ return new ClusterMembership(stringValue, vespaVersion, dockerImageRepo, loadBalancerSettings);
}
public static ClusterMembership from(ClusterSpec cluster, int index) {
diff --git a/config-provisioning/src/main/java/com/yahoo/config/provision/serialization/AllocatedHostsSerializer.java b/config-provisioning/src/main/java/com/yahoo/config/provision/serialization/AllocatedHostsSerializer.java
index 3973b042bde..01bb0ca45ff 100644
--- a/config-provisioning/src/main/java/com/yahoo/config/provision/serialization/AllocatedHostsSerializer.java
+++ b/config-provisioning/src/main/java/com/yahoo/config/provision/serialization/AllocatedHostsSerializer.java
@@ -1,10 +1,12 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.config.provision.serialization;
+import com.yahoo.component.Version;
import com.yahoo.config.provision.AllocatedHosts;
import com.yahoo.config.provision.ClusterMembership;
import com.yahoo.config.provision.DockerImage;
import com.yahoo.config.provision.HostSpec;
+import com.yahoo.config.provision.LoadBalancerSettings;
import com.yahoo.config.provision.NodeResources;
import com.yahoo.slime.ArrayTraverser;
import com.yahoo.slime.Cursor;
@@ -38,6 +40,8 @@ public class AllocatedHostsSerializer {
private static final String hostSpecKey = "hostSpec";
private static final String hostSpecHostNameKey = "hostName";
private static final String hostSpecMembershipKey = "membership";
+ private static final String loadBalancerSettingsKey = "loadBalancerSettings";
+ private static final String allowedUrnsKey = "allowedUrns";
private static final String realResourcesKey = "realResources";
private static final String advertisedResourcesKey = "advertisedResources";
@@ -81,6 +85,9 @@ public class AllocatedHostsSerializer {
host.membership().ifPresent(membership -> {
object.setString(hostSpecMembershipKey, membership.stringValue());
object.setString(hostSpecVespaVersionKey, membership.cluster().vespaVersion().toFullString());
+ if ( ! membership.cluster().loadBalancerSettings().isEmpty())
+ membership.cluster().loadBalancerSettings().allowedUrns()
+ .forEach(object.setObject(loadBalancerSettingsKey).setArray(allowedUrnsKey)::addString);
membership.cluster().dockerImageRepo().ifPresent(repo -> object.setString(hostSpecDockerImageRepoKey, repo.untagged()));
});
toSlime(host.realResources(), object.setObject(realResourcesKey));
@@ -125,7 +132,7 @@ public class AllocatedHostsSerializer {
nodeResourcesFromSlime(object.field(advertisedResourcesKey)),
optionalNodeResourcesFromSlime(object.field(requestedResourcesKey)), // TODO: Make non-optional when we serialize NodeResources.unspecified()
membershipFromSlime(object),
- optionalString(object.field(hostSpecCurrentVespaVersionKey)).map(com.yahoo.component.Version::new),
+ optionalString(object.field(hostSpecCurrentVespaVersionKey)).map(Version::new),
NetworkPortsSerializer.fromSlime(object.field(hostSpecNetworkPortsKey)),
optionalDockerImage(object.field(hostSpecDockerImageRepoKey)));
}
@@ -211,10 +218,15 @@ public class AllocatedHostsSerializer {
private static ClusterMembership membershipFromSlime(Inspector object) {
return ClusterMembership.from(object.field(hostSpecMembershipKey).asString(),
- com.yahoo.component.Version.fromString(object.field(hostSpecVespaVersionKey).asString()),
+ Version.fromString(object.field(hostSpecVespaVersionKey).asString()),
object.field(hostSpecDockerImageRepoKey).valid()
- ? Optional.of(DockerImage.fromString(object.field(hostSpecDockerImageRepoKey).asString()))
- : Optional.empty());
+ ? Optional.of(DockerImage.fromString(object.field(hostSpecDockerImageRepoKey).asString()))
+ : Optional.empty(),
+ object.field(loadBalancerSettingsKey).valid()
+ ? new LoadBalancerSettings(SlimeUtils.entriesStream(object.field(loadBalancerSettingsKey).field(allowedUrnsKey))
+ .map(Inspector::asString)
+ .toList())
+ : LoadBalancerSettings.empty);
}
private static Optional<String> optionalString(Inspector inspector) {
diff --git a/config-provisioning/src/test/java/com/yahoo/config/provision/serialization/AllocatedHostsSerializerTest.java b/config-provisioning/src/test/java/com/yahoo/config/provision/serialization/AllocatedHostsSerializerTest.java
index 172e0875767..bcb3b8cd4aa 100644
--- a/config-provisioning/src/test/java/com/yahoo/config/provision/serialization/AllocatedHostsSerializerTest.java
+++ b/config-provisioning/src/test/java/com/yahoo/config/provision/serialization/AllocatedHostsSerializerTest.java
@@ -6,6 +6,7 @@ import com.yahoo.config.provision.AllocatedHosts;
import com.yahoo.config.provision.ClusterMembership;
import com.yahoo.config.provision.DockerImage;
import com.yahoo.config.provision.HostSpec;
+import com.yahoo.config.provision.LoadBalancerSettings;
import com.yahoo.config.provision.NetworkPorts;
import com.yahoo.config.provision.NodeResources;
import org.junit.jupiter.api.Test;
@@ -19,6 +20,7 @@ import java.util.Set;
import static com.yahoo.config.provision.serialization.AllocatedHostsSerializer.fromJson;
import static com.yahoo.config.provision.serialization.AllocatedHostsSerializer.toJson;
import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.fail;
/**
* @author bratseth
@@ -62,6 +64,15 @@ public class AllocatedHostsSerializerTest {
Optional.empty()),
Optional.of(Version.fromString("3.4.5")),
Optional.empty(), Optional.empty()));
+ hosts.add(new HostSpec("with-load-balancer-settings",
+ smallSlowDiskSpeedNode,
+ bigSlowDiskSpeedNode,
+ anyDiskSpeedNode,
+ ClusterMembership.from("container/test/0/0", Version.fromString("6.73.1"),
+ Optional.empty(), new LoadBalancerSettings(List.of("burn"))),
+ Optional.empty(),
+ Optional.empty(),
+ Optional.empty()));
hosts.add(new HostSpec("with-ports",
smallSlowDiskSpeedNode,
bigSlowDiskSpeedNode,