summaryrefslogtreecommitdiffstats
path: root/config-provisioning
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@yahoo-inc.com>2017-04-18 15:53:19 +0200
committerJon Bratseth <bratseth@yahoo-inc.com>2017-04-18 15:53:19 +0200
commit352b828e91711ab1384213ad7f741d423688eeca (patch)
tree55094ccb785eeca6156f8445cd45a1c5e868bbba /config-provisioning
parent76497a12e6ec76d82527b2bd2fbe3de8bba6eb63 (diff)
parentbd5edd2681f6b0a3282cd053acb98d4b0ee126c4 (diff)
Merge branch 'master' into bratseth/receive-wanted-version
Diffstat (limited to 'config-provisioning')
-rw-r--r--config-provisioning/src/main/java/com/yahoo/config/provision/ProvisionInfo.java26
-rw-r--r--config-provisioning/src/main/java/com/yahoo/config/provision/Zone.java22
-rw-r--r--config-provisioning/src/test/java/com/yahoo/config/provision/ProvisionInfoTest.java2
3 files changed, 36 insertions, 14 deletions
diff --git a/config-provisioning/src/main/java/com/yahoo/config/provision/ProvisionInfo.java b/config-provisioning/src/main/java/com/yahoo/config/provision/ProvisionInfo.java
index e903332bd6f..c5ccb7d2f58 100644
--- a/config-provisioning/src/main/java/com/yahoo/config/provision/ProvisionInfo.java
+++ b/config-provisioning/src/main/java/com/yahoo/config/provision/ProvisionInfo.java
@@ -23,6 +23,7 @@ public class ProvisionInfo {
private static final String hostSpecKey = "hostSpec";
private static final String hostSpecHostName = "hostName";
private static final String hostSpecMembership = "membership";
+ private static final String hostSpecFlavor = "flavor";
private static final String dockerImage = "dockerImage";
private final Set<HostSpec> hosts = new LinkedHashSet<>();
@@ -50,29 +51,33 @@ public class ProvisionInfo {
if (host.membership().get().cluster().dockerImage().isPresent())
cursor.setString(dockerImage, host.membership().get().cluster().dockerImage().get());
}
+ if (host.flavor().isPresent())
+ cursor.setString(hostSpecFlavor, host.flavor().get().name());
}
public Set<HostSpec> getHosts() {
return Collections.unmodifiableSet(hosts);
}
- private static ProvisionInfo fromSlime(Inspector inspector) {
+ private static ProvisionInfo fromSlime(Inspector inspector, Optional<NodeFlavors> nodeFlavors) {
Inspector array = inspector.field(mappingKey);
final Set<HostSpec> hosts = new LinkedHashSet<>();
array.traverse(new ArrayTraverser() {
@Override
public void entry(int i, Inspector inspector) {
- hosts.add(createHostSpec(inspector.field(hostSpecKey)));
+ hosts.add(createHostSpec(inspector.field(hostSpecKey), nodeFlavors));
}
});
return new ProvisionInfo(hosts);
}
- private static HostSpec createHostSpec(Inspector object) {
+ private static HostSpec createHostSpec(Inspector object, Optional<NodeFlavors> nodeFlavors) {
Optional<ClusterMembership> membership =
- object.field(hostSpecMembership).valid() ? Optional.of(readMembership(object)) : Optional.empty();
- HostSpec h = new HostSpec(object.field(hostSpecHostName).asString(), Collections.emptyList(), Optional.empty(), membership);
- return h;
+ object.field(hostSpecMembership).valid() ? Optional.of(readMembership(object)) : Optional.empty();
+ Optional<Flavor> flavor =
+ object.field(hostSpecFlavor).valid() ? readFlavor(object, nodeFlavors) : Optional.empty();
+
+ return new HostSpec(object.field(hostSpecHostName).asString(),Collections.emptyList(), flavor, membership);
}
private static ClusterMembership readMembership(Inspector object) {
@@ -80,14 +85,19 @@ public class ProvisionInfo {
object.field(dockerImage).valid() ? Optional.of(object.field(dockerImage).asString()) : Optional.empty());
}
+ private static Optional<Flavor> readFlavor(Inspector object, Optional<NodeFlavors> nodeFlavors) {
+ return nodeFlavors.map(flavorMapper -> flavorMapper.getFlavor(object.field(hostSpecFlavor).asString()))
+ .orElse(Optional.empty());
+ }
+
public byte[] toJson() throws IOException {
Slime slime = new Slime();
toSlime(slime.setObject());
return SlimeUtils.toJsonBytes(slime);
}
- public static ProvisionInfo fromJson(byte[] json) {
- return fromSlime(SlimeUtils.jsonToSlime(json).get());
+ public static ProvisionInfo fromJson(byte[] json, Optional<NodeFlavors> nodeFlavors) {
+ return fromSlime(SlimeUtils.jsonToSlime(json).get(), nodeFlavors);
}
public ProvisionInfo merge(ProvisionInfo provisionInfo) {
diff --git a/config-provisioning/src/main/java/com/yahoo/config/provision/Zone.java b/config-provisioning/src/main/java/com/yahoo/config/provision/Zone.java
index 6ff26d0aad7..6559e08d3ed 100644
--- a/config-provisioning/src/main/java/com/yahoo/config/provision/Zone.java
+++ b/config-provisioning/src/main/java/com/yahoo/config/provision/Zone.java
@@ -20,11 +20,15 @@ public class Zone {
private final RegionName region;
private final SystemName systemName;
private final FlavorDefaults flavorDefaults;
+ private final Optional<NodeFlavors> nodeFlavors;
@Inject
- public Zone(ConfigserverConfig configserverConfig) {
- this(SystemName.from(configserverConfig.system()), Environment.from(configserverConfig.environment()),
- RegionName.from(configserverConfig.region()), new FlavorDefaults(configserverConfig));
+ public Zone(ConfigserverConfig configserverConfig, NodeFlavors nodeFlavors) {
+ this(SystemName.from(configserverConfig.system()),
+ Environment.from(configserverConfig.environment()),
+ RegionName.from(configserverConfig.region()),
+ new FlavorDefaults(configserverConfig),
+ nodeFlavors);
}
/** Create from environment and region */
@@ -39,14 +43,19 @@ public class Zone {
/** Create from environment and region. Useful for testing. */
public Zone(SystemName system, Environment environment, RegionName region, String defaultFlavor) {
- this(system, environment, region, new FlavorDefaults(defaultFlavor));
+ this(system, environment, region, new FlavorDefaults(defaultFlavor), null);
}
- private Zone(SystemName systemName, Environment environment, RegionName region, FlavorDefaults flavorDefaults) {
+ private Zone(SystemName systemName,
+ Environment environment,
+ RegionName region,
+ FlavorDefaults flavorDefaults,
+ NodeFlavors nodeFlavors) {
this.environment = environment;
this.region = region;
this.flavorDefaults = flavorDefaults;
this.systemName = systemName;
+ this.nodeFlavors = Optional.ofNullable(nodeFlavors);
}
/** Returns the current environment */
@@ -61,6 +70,9 @@ public class Zone {
/** Returns the default hardware flavor to assign in this zone */
public String defaultFlavor(ClusterSpec.Type clusterType) { return flavorDefaults.flavor(clusterType); }
+ /** Returns all available node flavors for the zone, or empty if not set for this Zone. */
+ public Optional<NodeFlavors> nodeFlavors() { return nodeFlavors; }
+
/** Do not use */
public static Zone defaultZone() {
return new Zone(SystemName.defaultSystem(), Environment.defaultEnvironment(), RegionName.defaultName());
diff --git a/config-provisioning/src/test/java/com/yahoo/config/provision/ProvisionInfoTest.java b/config-provisioning/src/test/java/com/yahoo/config/provision/ProvisionInfoTest.java
index 52b4f6853b8..a6ccdb8536f 100644
--- a/config-provisioning/src/test/java/com/yahoo/config/provision/ProvisionInfoTest.java
+++ b/config-provisioning/src/test/java/com/yahoo/config/provision/ProvisionInfoTest.java
@@ -49,7 +49,7 @@ public class ProvisionInfoTest {
}
private void assertProvisionInfo(ProvisionInfo info) throws IOException {
- ProvisionInfo serializedInfo = ProvisionInfo.fromJson(info.toJson());
+ ProvisionInfo serializedInfo = ProvisionInfo.fromJson(info.toJson(), Optional.empty());
assertEquals(info.getHosts().size(), serializedInfo.getHosts().size());
assertTrue(serializedInfo.getHosts().contains(h1));
assertTrue(serializedInfo.getHosts().contains(h2));