diff options
author | Valerij Fredriksen <valerijf@verizonmedia.com> | 2019-08-21 15:41:45 +0200 |
---|---|---|
committer | Valerij Fredriksen <valerijf@verizonmedia.com> | 2019-08-21 15:41:45 +0200 |
commit | 55bc1a0dbda018c69337f33436d93124aca24e52 (patch) | |
tree | 84690905e7eea2e560c28ff49e7d8c796a578142 | |
parent | fcf44cdd8c2aff47da0eb1708d786152f756983d (diff) |
Serialize flavor overrides
2 files changed, 23 insertions, 3 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/NodeSerializer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/NodeSerializer.java index 4f43b53c0e7..0346db3a4b7 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/NodeSerializer.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/NodeSerializer.java @@ -13,6 +13,7 @@ import com.yahoo.config.provision.NodeFlavors; import com.yahoo.config.provision.NodeResources; import com.yahoo.config.provision.NodeType; import com.yahoo.config.provision.TenantName; +import com.yahoo.config.provision.host.FlavorOverrides; import com.yahoo.config.provision.serialization.NetworkPortsSerializer; import com.yahoo.slime.ArrayTraverser; import com.yahoo.slime.Cursor; @@ -153,6 +154,10 @@ public class NodeSerializer { private void toSlime(Flavor flavor, Cursor object) { if (flavor.isConfigured()) { object.setString(flavorKey, flavor.name()); + if (flavor.flavorOverrides().isPresent()) { + Cursor resourcesObject = object.setObject(resourcesKey); + flavor.flavorOverrides().get().diskGb().ifPresent(diskGb -> resourcesObject.setDouble(diskKey, diskGb)); + } } else { NodeResources resources = flavor.resources(); @@ -229,12 +234,14 @@ public class NodeSerializer { } private Flavor flavorFromSlime(Inspector object) { + Inspector resources = object.field(resourcesKey); + if (object.field(flavorKey).valid()) { - return flavors.getFlavorOrThrow(object.field(flavorKey).asString()); + Flavor flavor = flavors.getFlavorOrThrow(object.field(flavorKey).asString()); + if (!resources.valid()) return flavor; + return flavor.withFlavorOverrides(FlavorOverrides.ofDisk(resources.field(diskKey).asDouble())); } else { - Inspector resources = object.field(resourcesKey); - // TODO: Simplify Sept. 2019 double bandwidth = Optional.of(resources.field(bandwidthKey)) .filter(Inspector::valid) diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/persistence/SerializationTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/persistence/SerializationTest.java index b2550872a1d..84f707eb505 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/persistence/SerializationTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/persistence/SerializationTest.java @@ -12,6 +12,7 @@ import com.yahoo.config.provision.NetworkPorts; import com.yahoo.config.provision.NodeFlavors; import com.yahoo.config.provision.NodeType; import com.yahoo.config.provision.TenantName; +import com.yahoo.config.provision.host.FlavorOverrides; import com.yahoo.slime.Cursor; import com.yahoo.slime.Slime; import com.yahoo.slime.Type; @@ -277,6 +278,18 @@ public class SerializationTest { } @Test + public void flavor_overrides_serialization() { + Node node = createNode(); + assertEquals(2, node.flavor().getMinDiskAvailableGb(), 0); + node = node.with(node.flavor().withFlavorOverrides(FlavorOverrides.ofDisk(1234))); + assertEquals(1234, node.flavor().getMinDiskAvailableGb(), 0); + + Node copy = nodeSerializer.fromJson(Node.State.provisioned, nodeSerializer.toJson(node)); + assertEquals(1234, copy.flavor().getMinDiskAvailableGb(), 0); + assertEquals(node, copy); + } + + @Test public void want_to_deprovision_defaults_to_false() { String nodeData = "{\n" + |