diff options
author | Jon Bratseth <bratseth@verizonmedia.com> | 2019-11-13 22:08:42 +0100 |
---|---|---|
committer | Jon Bratseth <bratseth@verizonmedia.com> | 2019-11-13 22:08:42 +0100 |
commit | aee9118e0625e3f1c010d9ff2c7b7b82125414de (patch) | |
tree | a707c1b5b04fb1e63984c71c38ad4b82f34c0432 /config-model | |
parent | b6e48bd32a548dd3cc1847344e6451882afebb91 (diff) |
Don't pretend hosts can have multiple memberships
Diffstat (limited to 'config-model')
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; |