summaryrefslogtreecommitdiffstats
path: root/config-model
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@verizonmedia.com>2019-11-13 22:08:42 +0100
committerJon Bratseth <bratseth@verizonmedia.com>2019-11-13 22:08:42 +0100
commitaee9118e0625e3f1c010d9ff2c7b7b82125414de (patch)
treea707c1b5b04fb1e63984c71c38ad4b82f34c0432 /config-model
parentb6e48bd32a548dd3cc1847344e6451882afebb91 (diff)
Don't pretend hosts can have multiple memberships
Diffstat (limited to 'config-model')
-rw-r--r--config-model/src/main/java/com/yahoo/config/model/provision/SingleNodeProvisioner.java2
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/HostResource.java33
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/HostSystem.java10
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsProxyContainer.java2
-rw-r--r--config-model/src/test/java/com/yahoo/config/model/provision/ModelProvisioningTest.java7
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/HostResourceTest.java54
6 files changed, 16 insertions, 92 deletions
diff --git a/config-model/src/main/java/com/yahoo/config/model/provision/SingleNodeProvisioner.java b/config-model/src/main/java/com/yahoo/config/model/provision/SingleNodeProvisioner.java
index b7035594c71..180a16f3c8f 100644
--- a/config-model/src/main/java/com/yahoo/config/model/provision/SingleNodeProvisioner.java
+++ b/config-model/src/main/java/com/yahoo/config/model/provision/SingleNodeProvisioner.java
@@ -32,7 +32,7 @@ public class SingleNodeProvisioner implements HostProvisioner {
}
public SingleNodeProvisioner(Flavor flavor) {
host = new Host(HostName.getLocalhost());
- this.hostSpec = new HostSpec(host.hostname(), host.aliases(),flavor);
+ this.hostSpec = new HostSpec(host.hostname(), host.aliases(), flavor);
}
@Override
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/HostResource.java b/config-model/src/main/java/com/yahoo/vespa/model/HostResource.java
index 099c02e06fe..9dba6fde9d4 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/HostResource.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/HostResource.java
@@ -38,8 +38,6 @@ public class HostResource implements Comparable<HostResource> {
/** Map from "sentinel name" to service */
private final Map<String, Service> services = new LinkedHashMap<>();
- private Set<ClusterMembership> clusterMemberships = new LinkedHashSet<>();
-
/**
* Create a new {@link HostResource} bound to a specific {@link com.yahoo.vespa.model.Host}.
*
@@ -109,31 +107,6 @@ public class HostResource implements Comparable<HostResource> {
/** Returns the flavor of this resource. Empty for self-hosted Vespa. */
public Optional<Flavor> getFlavor() { return spec.flavor(); }
- public void addClusterMembership(ClusterMembership clusterMembership) {
- if (clusterMembership != null)
- clusterMemberships.add(clusterMembership);
- }
-
- public Set<ClusterMembership> clusterMemberships() {
- return Collections.unmodifiableSet(clusterMemberships);
- }
-
- /**
- * Returns the "primary" cluster membership.
- * Content clusters are preferred, then container clusters, and finally admin clusters.
- * If there is more than one cluster of the preferred type, the cluster that was added first will be chosen.
- */
- public Optional<ClusterMembership> primaryClusterMembership() {
- return clusterMemberships().stream()
- .sorted(HostResource::compareClusters)
- .findFirst();
- }
-
- private static int compareClusters(ClusterMembership cluster1, ClusterMembership cluster2) {
- // This depends on the declared order of enum constants.
- return cluster2.cluster().type().compareTo(cluster1.cluster().type());
- }
-
@Override
public String toString() {
return "host '" + host.getHostname() + "'";
@@ -163,10 +136,8 @@ public class HostResource implements Comparable<HostResource> {
* Compare by hostname otherwise.
*/
public int comparePrimarilyByIndexTo(HostResource other) {
- Optional<ClusterMembership> thisMembership = this.primaryClusterMembership();
- Optional<ClusterMembership> otherMembership = other.primaryClusterMembership();
- if (thisMembership.isPresent() && otherMembership.isPresent())
- return Integer.compare(thisMembership.get().index(), otherMembership.get().index());
+ if (this.spec.membership().isPresent() && other.spec.membership().isPresent())
+ return Integer.compare(this.spec.membership().get().index(), other.spec.membership().get().index());
else
return this.getHostname().compareTo(other.getHostname());
}
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/HostSystem.java b/config-model/src/main/java/com/yahoo/vespa/model/HostSystem.java
index ad0febd14cd..3ac5f794426 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/HostSystem.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/HostSystem.java
@@ -116,19 +116,13 @@ public class HostSystem extends AbstractConfigProducer<Host> {
public HostResource getHost(String hostAlias) {
HostSpec hostSpec = provisioner.allocateHost(hostAlias);
- for (HostResource resource : hostname2host.values()) {
- if (resource.getHostname().equals(hostSpec.hostname())) {
- hostSpec.membership().ifPresent(resource::addClusterMembership);
- return resource;
- }
- }
- return addNewHost(hostSpec);
+ HostResource resource = hostname2host.get(hostSpec.hostname());
+ return resource != null ? resource : addNewHost(hostSpec);
}
private HostResource addNewHost(HostSpec hostSpec) {
Host host = Host.createHost(this, hostSpec.hostname());
HostResource hostResource = new HostResource(host, hostSpec);
- hostSpec.membership().ifPresent(hostResource::addClusterMembership);
hostSpec.networkPorts().ifPresent(np -> hostResource.ports().addNetworkPorts(np));
hostname2host.put(host.getHostname(), hostResource);
return hostResource;
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsProxyContainer.java b/config-model/src/main/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsProxyContainer.java
index c0dc029e009..719d3256889 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsProxyContainer.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/admin/metricsproxy/MetricsProxyContainer.java
@@ -120,7 +120,7 @@ public class MetricsProxyContainer extends Container implements
public void getConfig(NodeDimensionsConfig.Builder builder) {
Map<String, String> dimensions = new LinkedHashMap<>();
if (isHostedVespa) {
- getHostResource().primaryClusterMembership().map(ClusterMembership::cluster).ifPresent(cluster -> {
+ getHostResource().spec().membership().map(ClusterMembership::cluster).ifPresent(cluster -> {
dimensions.put(CLUSTER_TYPE, cluster.type().name());
dimensions.put(CLUSTER_ID, cluster.id().value());
});
diff --git a/config-model/src/test/java/com/yahoo/config/model/provision/ModelProvisioningTest.java b/config-model/src/test/java/com/yahoo/config/model/provision/ModelProvisioningTest.java
index b8b50ba0eaa..79d7ccb93e2 100644
--- a/config-model/src/test/java/com/yahoo/config/model/provision/ModelProvisioningTest.java
+++ b/config-model/src/test/java/com/yahoo/config/model/provision/ModelProvisioningTest.java
@@ -219,10 +219,9 @@ public class ModelProvisioningTest {
assertEquals(1, model.getHostSystem().getHosts().size());
HostResource host = model.getHostSystem().getHosts().iterator().next();
- assertEquals(1, host.clusterMemberships().size());
- ClusterMembership membership = host.clusterMemberships().iterator().next();
- assertEquals("container", membership.cluster().type().name());
- assertEquals("container1", membership.cluster().id().value());
+ assertTrue(host.spec().membership().isPresent());
+ assertEquals("container", host.spec().membership().get().cluster().type().name());
+ assertEquals("container1", host.spec().membership().get().cluster().id().value());
}
@Test
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/HostResourceTest.java b/config-model/src/test/java/com/yahoo/vespa/model/HostResourceTest.java
index 0624c2cd23a..234841f2b6c 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/HostResourceTest.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/HostResourceTest.java
@@ -6,9 +6,11 @@ import com.yahoo.config.model.producer.AbstractConfigProducer;
import com.yahoo.config.model.test.MockRoot;
import com.yahoo.config.provision.ClusterMembership;
import com.yahoo.config.provision.ClusterSpec;
+import com.yahoo.config.provision.HostSpec;
import org.junit.Test;
import java.util.Arrays;
+import java.util.Optional;
import static com.yahoo.config.provision.ClusterSpec.Type.admin;
import static com.yahoo.config.provision.ClusterSpec.Type.container;
@@ -38,50 +40,13 @@ public class HostResourceTest {
}
@Test
- public void no_clusters_yields_no_primary_cluster_membership() {
- HostResource host = hostResourceWithMemberships();
- assertTrue(host.clusterMemberships().isEmpty());
-
- assertFalse(host.primaryClusterMembership().isPresent());
- }
-
- @Test
- public void one_cluster_yields_that_primary_cluster_membership() {
+ public void host_witrh_membership() {
HostResource host = hostResourceWithMemberships(ClusterMembership.from(clusterSpec(container, "jdisc"), 0));
assertClusterMembership(host, container, "jdisc");
}
- @Test
- public void content_cluster_membership_is_preferred_over_other_types() {
- HostResource host = hostResourceWithMemberships(
- ClusterMembership.from(clusterSpec(container, "jdisc"), 0),
- ClusterMembership.from(clusterSpec(content, "search"), 0),
- ClusterMembership.from(clusterSpec(admin, "admin"), 0));
-
- assertClusterMembership(host, content, "search");
- }
-
- @Test
- public void container_cluster_membership_is_preferred_over_admin() {
- HostResource host = hostResourceWithMemberships(
- ClusterMembership.from(clusterSpec(admin, "admin"), 0),
- ClusterMembership.from(clusterSpec(container, "jdisc"), 0));
-
- assertClusterMembership(host, container, "jdisc");
- }
-
- @Test
- public void cluster_membership_that_was_added_first_is_preferred() {
- HostResource host = hostResourceWithMemberships(
- ClusterMembership.from(clusterSpec(content, "content1"), 0),
- ClusterMembership.from(clusterSpec(content, "content0"), 0),
- ClusterMembership.from(clusterSpec(content, "content2"), 0));
-
- assertClusterMembership(host, content, "content1");
- }
-
private void assertClusterMembership(HostResource host, ClusterSpec.Type type, String id) {
- ClusterSpec membership = host.primaryClusterMembership().map(ClusterMembership::cluster)
+ ClusterSpec membership = host.spec().membership().map(ClusterMembership::cluster)
.orElseThrow(() -> new RuntimeException("No cluster membership!"));
assertEquals(type, membership.type());
@@ -92,14 +57,9 @@ public class HostResourceTest {
return ClusterSpec.from(type, ClusterSpec.Id.from(id), ClusterSpec.Group.from(0), Version.fromString("6.42"), false);
}
- private HostResource mockHostResource(MockRoot root) {
- return new HostResource(new Host(root));
- }
-
- private static HostResource hostResourceWithMemberships(ClusterMembership... memberships) {
- HostResource host = new HostResource(Host.createHost(null, "hostname"));
- Arrays.asList(memberships).forEach(host::addClusterMembership);
- return host;
+ private static HostResource hostResourceWithMemberships(ClusterMembership membership) {
+ return new HostResource(Host.createHost(null, "hostname"),
+ new HostSpec("hostname", Optional.of(membership)));
}
private static int counter = 0;