diff options
author | Harald Musum <musum@verizonmedia.com> | 2020-03-17 12:37:31 +0100 |
---|---|---|
committer | Harald Musum <musum@verizonmedia.com> | 2020-03-17 12:37:31 +0100 |
commit | 195d5f4848e3f85368f7279e4b3956d8f2b740b2 (patch) | |
tree | 01898f91ee784587fbf12ab6b28b2b545b216e6e /config-provisioning | |
parent | d04a6cbda7d2cfcbf649039b2f89d2769546dc5e (diff) |
Use two builder methods, request() and specification()
request() should be used when requesting a cluster, same as old
static method called request(). specification() should be used when
creating a clsuter spec for an existing cluster, same as old
static method from(). specification() will throw an exception
if some required fields are not set
Diffstat (limited to 'config-provisioning')
5 files changed, 36 insertions, 18 deletions
diff --git a/config-provisioning/abi-spec.json b/config-provisioning/abi-spec.json index 5b8a90a9f5d..46ece153986 100644 --- a/config-provisioning/abi-spec.json +++ b/config-provisioning/abi-spec.json @@ -298,7 +298,8 @@ "public static com.yahoo.config.provision.ClusterSpec request(com.yahoo.config.provision.ClusterSpec$Type, com.yahoo.config.provision.ClusterSpec$Id, com.yahoo.component.Version, boolean, java.util.Optional, java.util.Optional)", "public static com.yahoo.config.provision.ClusterSpec from(com.yahoo.config.provision.ClusterSpec$Type, com.yahoo.config.provision.ClusterSpec$Id, com.yahoo.config.provision.ClusterSpec$Group, com.yahoo.component.Version, boolean, java.util.Optional)", "public static com.yahoo.config.provision.ClusterSpec from(com.yahoo.config.provision.ClusterSpec$Type, com.yahoo.config.provision.ClusterSpec$Id, com.yahoo.config.provision.ClusterSpec$Group, com.yahoo.component.Version, boolean, java.util.Optional, java.util.Optional)", - "public static com.yahoo.config.provision.ClusterSpec$Builder builder(com.yahoo.config.provision.ClusterSpec$Type, com.yahoo.config.provision.ClusterSpec$Id)", + "public static com.yahoo.config.provision.ClusterSpec$Builder request(com.yahoo.config.provision.ClusterSpec$Type, com.yahoo.config.provision.ClusterSpec$Id)", + "public static com.yahoo.config.provision.ClusterSpec$Builder specification(com.yahoo.config.provision.ClusterSpec$Type, com.yahoo.config.provision.ClusterSpec$Id)", "public java.lang.String toString()", "public int hashCode()", "public boolean equals(java.lang.Object)", 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 0cd30061139..b777a13af7c 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 @@ -39,9 +39,13 @@ public class ClusterMembership { } } - this.cluster = ClusterSpec.from(ClusterSpec.Type.valueOf(components[0]), ClusterSpec.Id.from(components[1]), - ClusterSpec.Group.from(Integer.parseInt(components[2])), vespaVersion, - exclusive, combinedId.map(ClusterSpec.Id::from), dockerImageRepo); + this.cluster = ClusterSpec.specification(ClusterSpec.Type.valueOf(components[0]), ClusterSpec.Id.from(components[1])) + .group(ClusterSpec.Group.from(Integer.parseInt(components[2]))) + .vespaVersion(vespaVersion) + .exclusive(exclusive) + .combinedId(combinedId.map(ClusterSpec.Id::from)) + .dockerImageRepo(dockerImageRepo) + .build(); this.index = Integer.parseInt(components[3]); this.stringValue = toStringValue(); } diff --git a/config-provisioning/src/main/java/com/yahoo/config/provision/ClusterSpec.java b/config-provisioning/src/main/java/com/yahoo/config/provision/ClusterSpec.java index 45a276a83b2..70d0a7a1929 100644 --- a/config-provisioning/src/main/java/com/yahoo/config/provision/ClusterSpec.java +++ b/config-provisioning/src/main/java/com/yahoo/config/provision/ClusterSpec.java @@ -100,14 +100,21 @@ public final class ClusterSpec { return new ClusterSpec(type, id, Optional.of(groupId), vespaVersion, exclusive, combinedId, dockerImageRepo); } - public static Builder builder(Type type, Id id) { - return new Builder(type, id); + /** Creates a ClusterSpec when requesting a cluster */ + public static Builder request(Type type, Id id) { + return new Builder(type, id, false); + } + + /** Creates a ClusterSpec for an existing cluster, group id and vespa version needs to be set */ + public static Builder specification(Type type, Id id) { + return new Builder(type, id, true); } public static class Builder { private final Type type; private final Id id; + private final boolean specification; private Optional<Group> groupId = Optional.empty(); private Optional<String> dockerImageRepo = Optional.empty(); @@ -115,13 +122,17 @@ public final class ClusterSpec { private boolean exclusive = false; private Optional<Id> combinedId = Optional.empty(); - - Builder(Type type, Id id) { + Builder(Type type, Id id, boolean specification) { this.type = type; this.id = id; + this.specification = specification; } public ClusterSpec build() { + if (specification) { + if (groupId.isEmpty()) throw new IllegalArgumentException("Creating a ClusterSpec with specification() requires groupId to be set"); + if (vespaVersion == null) throw new IllegalArgumentException("Creating a ClusterSpec with specification() requires vespaVersion to be set"); + } return new ClusterSpec(type, id, groupId, vespaVersion, exclusive, combinedId, dockerImageRepo); } diff --git a/config-provisioning/src/test/java/com/yahoo/config/provision/ClusterMembershipTest.java b/config-provisioning/src/test/java/com/yahoo/config/provision/ClusterMembershipTest.java index 2962fdb77e2..a21b899e7b0 100644 --- a/config-provisioning/src/test/java/com/yahoo/config/provision/ClusterMembershipTest.java +++ b/config-provisioning/src/test/java/com/yahoo/config/provision/ClusterMembershipTest.java @@ -1,7 +1,6 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.config.provision; -import com.yahoo.component.Version; import com.yahoo.component.Vtag; import org.junit.Test; @@ -18,7 +17,7 @@ public class ClusterMembershipTest { @Test public void testContainerServiceInstance() { - ClusterSpec cluster = ClusterSpec.builder(ClusterSpec.Type.container, ClusterSpec.Id.from("id1")).vespaVersion("6.42").build(); + ClusterSpec cluster = ClusterSpec.request(ClusterSpec.Type.container, ClusterSpec.Id.from("id1")).vespaVersion("6.42").build(); assertContainerService(ClusterMembership.from(cluster, 3)); } @@ -56,15 +55,16 @@ public class ClusterMembershipTest { @Test public void testServiceInstance() { - ClusterSpec cluster = ClusterSpec.builder(ClusterSpec.Type.content, ClusterSpec.Id.from("id1")).vespaVersion("6.42").build(); + ClusterSpec cluster = ClusterSpec.request(ClusterSpec.Type.content, ClusterSpec.Id.from("id1")).vespaVersion("6.42").build(); assertContentService(ClusterMembership.from(cluster, 37)); } @Test public void testServiceInstanceWithGroup() { - ClusterSpec cluster = ClusterSpec.from(ClusterSpec.Type.content, ClusterSpec.Id.from("id1"), - ClusterSpec.Group.from(4), Version.fromString("6.42"), - false, Optional.empty(), Optional.empty()); + ClusterSpec cluster = ClusterSpec.specification(ClusterSpec.Type.content, ClusterSpec.Id.from("id1")) + .group(ClusterSpec.Group.from(4)) + .vespaVersion("6.42") + .build(); assertContentServiceWithGroup(ClusterMembership.from(cluster, 37)); } @@ -75,13 +75,13 @@ public class ClusterMembershipTest { @Test public void testServiceInstanceWithRetire() { - ClusterSpec cluster = ClusterSpec.builder(ClusterSpec.Type.content, ClusterSpec.Id.from("id1")).vespaVersion("6.42").build(); + ClusterSpec cluster = ClusterSpec.request(ClusterSpec.Type.content, ClusterSpec.Id.from("id1")).vespaVersion("6.42").build(); assertContentServiceWithRetire(ClusterMembership.retiredFrom(cluster, 37)); } @Test public void testServiceInstanceWithGroupAndRetire() { - ClusterSpec cluster = ClusterSpec.builder(ClusterSpec.Type.content, ClusterSpec.Id.from("id1")) + ClusterSpec cluster = ClusterSpec.request(ClusterSpec.Type.content, ClusterSpec.Id.from("id1")) .group(ClusterSpec.Group.from(4)) .vespaVersion("6.42") .build(); diff --git a/config-provisioning/src/test/java/com/yahoo/config/provision/ClusterSpecTest.java b/config-provisioning/src/test/java/com/yahoo/config/provision/ClusterSpecTest.java index eb2407e988a..40ed7500269 100644 --- a/config-provisioning/src/test/java/com/yahoo/config/provision/ClusterSpecTest.java +++ b/config-provisioning/src/test/java/com/yahoo/config/provision/ClusterSpecTest.java @@ -53,8 +53,10 @@ public class ClusterSpecTest { } private static ClusterSpec spec(ClusterSpec.Type type, String id) { - return ClusterSpec.from(type, ClusterSpec.Id.from(id), ClusterSpec.Group.from(1), Version.emptyVersion, - false, Optional.empty(), Optional.empty()); + return ClusterSpec.specification(type, ClusterSpec.Id.from(id)) + .group(ClusterSpec.Group.from(1)) + .vespaVersion(Version.emptyVersion) + .build(); } } |