diff options
author | Martin Polden <mpolden@mpolden.no> | 2019-02-04 09:31:18 +0100 |
---|---|---|
committer | Martin Polden <mpolden@mpolden.no> | 2019-02-04 09:33:19 +0100 |
commit | 4cabf81b4078dc5974d37270f1170a92e5ed37b8 (patch) | |
tree | aacb1e26fa47c3b9d64daa3535d2e194fbbe5214 /config-provisioning/src/main/java/com/yahoo/config/provision/ClusterMembership.java | |
parent | 143348b1f6fe210ec8a3a0d22eb07cac56a07825 (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.java | 36 |
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(",")); + } + } |