aboutsummaryrefslogtreecommitdiffstats
path: root/config-provisioning/src/main/java/com/yahoo/config/provision/ClusterMembership.java
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2019-02-04 09:31:18 +0100
committerMartin Polden <mpolden@mpolden.no>2019-02-04 09:33:19 +0100
commit4cabf81b4078dc5974d37270f1170a92e5ed37b8 (patch)
treeaacb1e26fa47c3b9d64daa3535d2e194fbbe5214 /config-provisioning/src/main/java/com/yahoo/config/provision/ClusterMembership.java
parent143348b1f6fe210ec8a3a0d22eb07cac56a07825 (diff)
Add rotations to cluster spec
Diffstat (limited to 'config-provisioning/src/main/java/com/yahoo/config/provision/ClusterMembership.java')
-rw-r--r--config-provisioning/src/main/java/com/yahoo/config/provision/ClusterMembership.java36
1 files changed, 29 insertions, 7 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 1253496cdd2..c0099878b45 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
@@ -3,9 +3,14 @@ package com.yahoo.config.provision;
import com.yahoo.component.Version;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Set;
+import java.util.stream.Collectors;
+
/**
* A node's membership in a cluster. This is a value object.
- * The format is "clusterType/clusterId/groupId/index[/exclusive][/retired]
+ * The format is "clusterType/clusterId/groupId/index[/exclusive][/retired][/rotationId,...]"
*
* @author bratseth
*/
@@ -20,18 +25,26 @@ public class ClusterMembership {
private ClusterMembership(String stringValue, Version vespaVersion) {
String[] components = stringValue.split("/");
- if (components.length < 4 || components.length > 6)
+ if (components.length < 4 || components.length > 7)
throw new RuntimeException("Could not parse '" + stringValue + "' to a cluster membership. " +
- "Expected 'clusterType/clusterId/groupId/index[/retired][/exclusive]'");
+ "Expected 'clusterType/clusterId/groupId/index[/retired][/exclusive][/rotationId,...]'");
boolean exclusive = false;
+ Set<RotationName> rotations = Collections.emptySet();
if (components.length > 4) {
- exclusive = components[4].equals("exclusive");
- retired = components[components.length-1].equals("retired");
+ for (int i = 4; i < components.length; i++) {
+ String component = components[i];
+ switch (component) {
+ case "exclusive": exclusive = true; break;
+ case "retired": retired = true; break;
+ default: rotations = rotationsFrom(component); break;
+ }
+ }
}
this.cluster = ClusterSpec.from(ClusterSpec.Type.valueOf(components[0]), ClusterSpec.Id.from(components[1]),
- ClusterSpec.Group.from(Integer.valueOf(components[2])), vespaVersion, exclusive);
+ ClusterSpec.Group.from(Integer.valueOf(components[2])), vespaVersion, exclusive,
+ rotations);
this.index = Integer.parseInt(components[3]);
this.stringValue = toStringValue();
}
@@ -49,7 +62,8 @@ public class ClusterMembership {
(cluster.group().isPresent() ? "/" + cluster.group().get().index() : "") +
"/" + index +
( cluster.isExclusive() ? "/exclusive" : "") +
- ( retired ? "/retired" : "");
+ ( retired ? "/retired" : "") +
+ ( !cluster.rotations().isEmpty() ? "/" + rotationsAsString(cluster.rotations()) : "");
}
@@ -107,4 +121,12 @@ public class ClusterMembership {
return new ClusterMembership(cluster, index, true);
}
+ private static Set<RotationName> rotationsFrom(String s) {
+ return Arrays.stream(s.split(",")).map(RotationName::from).collect(Collectors.toUnmodifiableSet());
+ }
+
+ private static String rotationsAsString(Set<RotationName> rotations) {
+ return rotations.stream().map(RotationName::value).collect(Collectors.joining(","));
+ }
+
}