summaryrefslogtreecommitdiffstats
path: root/config-provisioning
diff options
context:
space:
mode:
authorHarald Musum <musum@verizonmedia.com>2020-03-17 12:37:31 +0100
committerHarald Musum <musum@verizonmedia.com>2020-03-17 12:37:31 +0100
commit195d5f4848e3f85368f7279e4b3956d8f2b740b2 (patch)
tree01898f91ee784587fbf12ab6b28b2b545b216e6e /config-provisioning
parentd04a6cbda7d2cfcbf649039b2f89d2769546dc5e (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')
-rw-r--r--config-provisioning/abi-spec.json3
-rw-r--r--config-provisioning/src/main/java/com/yahoo/config/provision/ClusterMembership.java10
-rw-r--r--config-provisioning/src/main/java/com/yahoo/config/provision/ClusterSpec.java19
-rw-r--r--config-provisioning/src/test/java/com/yahoo/config/provision/ClusterMembershipTest.java16
-rw-r--r--config-provisioning/src/test/java/com/yahoo/config/provision/ClusterSpecTest.java6
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();
}
}