From 5d0663a1f2eddb94b01d6ef09ea5cb8d149d4ab0 Mon Sep 17 00:00:00 2001 From: Jon Bratseth Date: Mon, 25 May 2020 10:27:35 +0200 Subject: Revert "Merge pull request #13353 from vespa-engine/revert-13348-bratseth/real-resources-in-model" This reverts commit 413ea623b5033593c2f2fe9951e1a685c8ff9dfc, reversing changes made to 5c0bfb06784075ac72c7891b7dce6454d85bdff8. --- .../java/com/yahoo/config/provision/Capacity.java | 2 +- .../java/com/yahoo/config/provision/Flavor.java | 10 ++ .../java/com/yahoo/config/provision/HostSpec.java | 156 +++++++++++++++++---- .../com/yahoo/config/provision/NodeResources.java | 11 +- .../serialization/AllocatedHostsSerializer.java | 61 +++++--- .../yahoo/config/provision/NodeFlavorsTest.java | 2 +- .../AllocatedHostsSerializerTest.java | 54 ++++--- 7 files changed, 226 insertions(+), 70 deletions(-) (limited to 'config-provisioning/src') diff --git a/config-provisioning/src/main/java/com/yahoo/config/provision/Capacity.java b/config-provisioning/src/main/java/com/yahoo/config/provision/Capacity.java index f723575c342..1a1cd243f89 100644 --- a/config-provisioning/src/main/java/com/yahoo/config/provision/Capacity.java +++ b/config-provisioning/src/main/java/com/yahoo/config/provision/Capacity.java @@ -90,7 +90,7 @@ public final class Capacity { /** Creates this from a node type */ public static Capacity fromRequiredNodeType(NodeType type) { - return from(new ClusterResources(0, 0, NodeResources.unspecified), true, false, type); + return from(new ClusterResources(0, 0, NodeResources.unspecified()), true, false, type); } private static Capacity from(ClusterResources resources, boolean required, boolean canFail, NodeType type) { diff --git a/config-provisioning/src/main/java/com/yahoo/config/provision/Flavor.java b/config-provisioning/src/main/java/com/yahoo/config/provision/Flavor.java index 8d767e9f4ad..c8ec45b0ec8 100644 --- a/config-provisioning/src/main/java/com/yahoo/config/provision/Flavor.java +++ b/config-provisioning/src/main/java/com/yahoo/config/provision/Flavor.java @@ -109,15 +109,25 @@ public class Flavor { public Optional flavorOverrides() { return flavorOverrides; } + // TODO: Remove after June 2020 + @Deprecated public double getMinMainMemoryAvailableGb() { return resources.memoryGb(); } + // TODO: Remove after June 2020 + @Deprecated public double getMinDiskAvailableGb() { return resources.diskGb(); } + // TODO: Remove after June 2020 + @Deprecated public boolean hasFastDisk() { return resources.diskSpeed() == NodeResources.DiskSpeed.fast; } + // TODO: Remove after June 2020 + @Deprecated public double getBandwidthGbps() { return resources.bandwidthGbps(); } /** Returns the number of cores available in this flavor, not scaled for speed. */ + // TODO: Remove after June 2020 + @Deprecated public double getMinCpuCores() { return minCpuCores; } public Type getType() { return type; } diff --git a/config-provisioning/src/main/java/com/yahoo/config/provision/HostSpec.java b/config-provisioning/src/main/java/com/yahoo/config/provision/HostSpec.java index 2a5d27a0fe7..52a2008b658 100644 --- a/config-provisioning/src/main/java/com/yahoo/config/provision/HostSpec.java +++ b/config-provisioning/src/main/java/com/yahoo/config/provision/HostSpec.java @@ -22,73 +22,167 @@ public class HostSpec implements Comparable { /** Aliases of this host */ private final List aliases; + private final NodeResources realResources; + private final NodeResources advertisedResources; + private final NodeResources requestedResources; + /** The current membership role of this host in the cluster it belongs to */ private final Optional membership; - private final Optional flavor; - private final Optional version; private final Optional dockerImageRepo; private final Optional networkPorts; - private final Optional requestedResources; + /** Create a host in a non-cloud system, where hosts are specified in config */ + public HostSpec(String hostname, List aliases, Optional networkPorts) { + this(hostname, aliases, + NodeResources.unspecified(), NodeResources.unspecified(), NodeResources.unspecified(), + Optional.empty(), Optional.empty(), networkPorts, Optional.empty()); + } + + /** Create a host in a hosted system */ + public HostSpec(String hostname, + NodeResources realResources, + NodeResources advertisedResurces, + NodeResources requestedResources, + ClusterMembership membership, + Optional version, + Optional networkPorts, + Optional dockerImageRepo) { + this(hostname, List.of(), + realResources, + advertisedResurces, + requestedResources, + Optional.of(membership), + version, + networkPorts, + dockerImageRepo); + } + + private HostSpec(String hostname, + List aliases, + NodeResources realResources, + NodeResources advertisedResurces, + NodeResources requestedResources, + Optional membership, + Optional version, + Optional networkPorts, + Optional dockerImageRepo) { + if (hostname == null || hostname.isEmpty()) throw new IllegalArgumentException("Hostname must be specified"); + this.hostname = hostname; + this.aliases = List.copyOf(aliases); + this.realResources = Objects.requireNonNull(realResources); + this.advertisedResources = Objects.requireNonNull(advertisedResurces); + this.requestedResources = Objects.requireNonNull(requestedResources, "RequestedResources cannot be null"); + this.membership = Objects.requireNonNull(membership); + this.version = Objects.requireNonNull(version, "Version cannot be null but can be empty"); + this.networkPorts = Objects.requireNonNull(networkPorts, "Network ports cannot be null but can be empty"); + this.dockerImageRepo = Objects.requireNonNull(dockerImageRepo, "Docker image repo cannot be null but can be empty"); + } + // TODO: Remove after June 2020 + @Deprecated public HostSpec(String hostname, Optional membership) { - this(hostname, new ArrayList<>(), Optional.empty(), membership); + this(hostname, new ArrayList<>(), + NodeResources.unspecified(), NodeResources.unspecified(), NodeResources.unspecified(), + membership, + Optional.empty(), Optional.empty(), Optional.empty()); } + // TODO: Remove after June 2020 + @Deprecated public HostSpec(String hostname, ClusterMembership membership, Flavor flavor, Optional version) { - this(hostname, new ArrayList<>(), Optional.of(flavor), Optional.of(membership), version); + this(hostname, new ArrayList<>(), + flavor.resources(), flavor.resources(), NodeResources.unspecified(), + Optional.of(membership), version, Optional.empty(), Optional.empty()); } + // TODO: Remove after June 2020 + @Deprecated public HostSpec(String hostname, List aliases) { - this(hostname, aliases, Optional.empty(), Optional.empty()); + this(hostname, aliases, + NodeResources.unspecified(), NodeResources.unspecified(), NodeResources.unspecified(), + Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty()); } + // TODO: Remove after June 2020 + @Deprecated public HostSpec(String hostname, List aliases, Flavor flavor) { - this(hostname, aliases, Optional.of(flavor), Optional.empty()); + this(hostname, aliases, + flavor.resources(), flavor.resources(), NodeResources.unspecified(), + Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty()); } + // TODO: Remove after June 2020 + @Deprecated public HostSpec(String hostname, List aliases, ClusterMembership membership) { - this(hostname, aliases, Optional.empty(), Optional.of(membership)); + this(hostname, aliases, + NodeResources.unspecified(), NodeResources.unspecified(), NodeResources.unspecified(), + Optional.of(membership), + Optional.empty(), Optional.empty(), Optional.empty()); } + // TODO: Remove after June 2020 + @Deprecated public HostSpec(String hostname, List aliases, Optional flavor, Optional membership) { - this(hostname, aliases, flavor, membership, Optional.empty()); + this(hostname, aliases, + flavor.map(f -> f.resources()).orElse(NodeResources.unspecified()), + flavor.map(f -> f.resources()).orElse(NodeResources.unspecified()), + NodeResources.unspecified(), + membership, Optional.empty(), Optional.empty(), Optional.empty()); } + // TODO: Remove after June 2020 + @Deprecated public HostSpec(String hostname, List aliases, Optional flavor, Optional membership, Optional version) { - this(hostname, aliases, flavor, membership, version, Optional.empty()); + this(hostname, aliases, + flavor.map(f -> f.resources()).orElse(NodeResources.unspecified()), + flavor.map(f -> f.resources()).orElse(NodeResources.unspecified()), + NodeResources.unspecified(), + membership, version, + Optional.empty(), Optional.empty()); } + // TODO: Remove after June 2020 + @Deprecated public HostSpec(String hostname, List aliases, Optional flavor, Optional membership, Optional version, Optional networkPorts) { - this(hostname, aliases, flavor, membership, version, networkPorts, Optional.empty()); + this(hostname, aliases, + flavor.map(f -> f.resources()).orElse(NodeResources.unspecified()), + flavor.map(f -> f.resources()).orElse(NodeResources.unspecified()), + NodeResources.unspecified(), + membership, version, networkPorts, + Optional.empty()); } - public HostSpec(String hostname, List aliases, Optional flavor, + // TODO: Remove after June 2020 + @Deprecated + public HostSpec(String hostname, List aliases, + Optional flavor, Optional membership, Optional version, Optional networkPorts, Optional requestedResources) { - this(hostname, aliases, flavor, membership, version, networkPorts, requestedResources, Optional.empty()); + this(hostname, aliases, + flavor.map(f -> f.resources()).orElse(NodeResources.unspecified()), + flavor.map(f -> f.resources()).orElse(NodeResources.unspecified()), + requestedResources.orElse(NodeResources.unspecified()), + membership, version, networkPorts, Optional.empty()); } + // TODO: Remove after June 2020 + @Deprecated public HostSpec(String hostname, List aliases, Optional flavor, Optional membership, Optional version, Optional networkPorts, Optional requestedResources, Optional dockerImageRepo) { - if (hostname == null || hostname.isEmpty()) throw new IllegalArgumentException("Hostname must be specified"); - this.hostname = hostname; - this.aliases = List.copyOf(aliases); - this.flavor = flavor; - this.membership = membership; - this.version = Objects.requireNonNull(version, "Version cannot be null but can be empty"); - this.networkPorts = Objects.requireNonNull(networkPorts, "Network ports cannot be null but can be empty"); - this.requestedResources = Objects.requireNonNull(requestedResources, "RequestedResources cannot be null"); - this.dockerImageRepo = Objects.requireNonNull(dockerImageRepo, "Docker image repo cannot be null but can be empty"); + this(hostname, aliases, + flavor.map(f -> f.resources()).orElse(NodeResources.unspecified()), + flavor.map(f -> f.resources()).orElse(NodeResources.unspecified()), + requestedResources.orElse(NodeResources.unspecified()), + membership, version, networkPorts, dockerImageRepo); } /** Returns the name identifying this host */ @@ -97,7 +191,17 @@ public class HostSpec implements Comparable { /** Returns the aliases of this host as an immutable list. This may be empty but never null. */ public List aliases() { return aliases; } - public Optional flavor() { return flavor; } + /** The real resources available for Vespa processes on this node, after subtracting infrastructure overhead. */ + public NodeResources realResources() { return realResources; } + + /** The total advertised resources of this node, typically matching what's requested. */ + public NodeResources advertisedResources() { return advertisedResources; } + + /** A flavor contained the advertised resources of this host */ + // TODO: Remove after June 2020 + public Optional flavor() { + return advertisedResources.asOptional().map(resources -> new Flavor(resources)); + } /** Returns the current version of Vespa running on this node, or empty if not known */ public Optional version() { return version; } @@ -108,13 +212,13 @@ public class HostSpec implements Comparable { /** Returns the network port allocations on this host, or empty if not present */ public Optional networkPorts() { return networkPorts; } - /** Returns the requested resources leading to this host being provisioned, or empty if not known */ - public Optional requestedResources() { return requestedResources; } + /** Returns the requested resources leading to this host being provisioned, or empty if unspecified */ + public Optional requestedResources() { return requestedResources.asOptional(); } public Optional dockerImageRepo() { return dockerImageRepo; } public HostSpec withPorts(Optional ports) { - return new HostSpec(hostname, aliases, flavor, membership, version, ports, requestedResources, dockerImageRepo); + return new HostSpec(hostname, aliases, realResources, advertisedResources, requestedResources, membership, version, ports, dockerImageRepo); } @Override diff --git a/config-provisioning/src/main/java/com/yahoo/config/provision/NodeResources.java b/config-provisioning/src/main/java/com/yahoo/config/provision/NodeResources.java index 91604cd667d..e02aa7a5f22 100644 --- a/config-provisioning/src/main/java/com/yahoo/config/provision/NodeResources.java +++ b/config-provisioning/src/main/java/com/yahoo/config/provision/NodeResources.java @@ -3,6 +3,7 @@ package com.yahoo.config.provision; import java.util.Locale; import java.util.Objects; +import java.util.Optional; /** * The node resources required by an application cluster @@ -16,6 +17,7 @@ public class NodeResources { private static final double memoryUnitCost = 0.012; private static final double diskUnitCost = 0.0004; + // TODO: Make private after June 2020 public static final NodeResources unspecified = new NodeResources(0, 0, 0, 0); public enum DiskSpeed { @@ -252,7 +254,14 @@ public class NodeResources { return true; } - public boolean isUnspecified() { return this == unspecified; } + public static NodeResources unspecified() { return unspecified; } + + public boolean isUnspecified() { return this.equals(unspecified); } + + /** Returns this.isUnspecified() ? Optional.empty() : Optional.of(this) */ + public Optional asOptional() { + return this.isUnspecified() ? Optional.empty() : Optional.of(this); + } private boolean equal(double a, double b) { return Math.abs(a - b) < 0.00000001; diff --git a/config-provisioning/src/main/java/com/yahoo/config/provision/serialization/AllocatedHostsSerializer.java b/config-provisioning/src/main/java/com/yahoo/config/provision/serialization/AllocatedHostsSerializer.java index 9ba26be072c..96b189cefe6 100644 --- a/config-provisioning/src/main/java/com/yahoo/config/provision/serialization/AllocatedHostsSerializer.java +++ b/config-provisioning/src/main/java/com/yahoo/config/provision/serialization/AllocatedHostsSerializer.java @@ -45,6 +45,9 @@ public class AllocatedHostsSerializer { private static final String aliasesKey = "aliases"; private static final String hostSpecMembershipKey = "membership"; + private static final String realResourcesKey = "realResources"; + private static final String advertisedResourcesKey = "advertisedResources"; + // Flavor can be removed when all allocated nodes are docker nodes private static final String flavorKey = "flavor"; @@ -90,7 +93,9 @@ public class AllocatedHostsSerializer { object.setString(hostSpecDockerImageRepoKey, repo.repository()); }); }); - host.flavor().ifPresent(flavor -> toSlime(flavor, object)); + host.flavor().ifPresent(flavor -> toSlime(flavor, object)); // TODO: Remove this line after June 2020 + toSlime(host.realResources(), object.setObject(realResourcesKey)); + toSlime(host.advertisedResources(), object.setObject(advertisedResourcesKey)); host.requestedResources().ifPresent(resources -> toSlime(resources, object.setObject(requestedResourcesKey))); host.version().ifPresent(version -> object.setString(hostSpecCurrentVespaVersionKey, version.toFullString())); host.networkPorts().ifPresent(ports -> NetworkPortsSerializer.toSlime(ports, object.setArray(hostSpecNetworkPortsKey))); @@ -133,18 +138,25 @@ public class AllocatedHostsSerializer { } private static HostSpec hostFromSlime(Inspector object, Optional nodeFlavors) { - return new HostSpec(object.field(hostSpecHostNameKey).asString(), - aliasesFromSlime(object), - flavorFromSlime(object, nodeFlavors), - object.field(hostSpecMembershipKey).valid() ? Optional.of(membershipFromSlime(object)) : Optional.empty(), - optionalString(object.field(hostSpecCurrentVespaVersionKey)).map(com.yahoo.component.Version::new), - NetworkPortsSerializer.fromSlime(object.field(hostSpecNetworkPortsKey)), - nodeResourcesFromSlime(object.field(requestedResourcesKey)), - optionalDockerImage(object.field(hostSpecDockerImageRepoKey))); + if (object.field(hostSpecMembershipKey).valid()) { // Hosted + return new HostSpec(object.field(hostSpecHostNameKey).asString(), + nodeResourcesFromSlime(object.field(realResourcesKey), object, nodeFlavors), + nodeResourcesFromSlime(object.field(advertisedResourcesKey), object, nodeFlavors), + optionalNodeResourcesFromSlime(object.field(requestedResourcesKey)), // TODO: Make non-optional after June 2020 + membershipFromSlime(object), + optionalString(object.field(hostSpecCurrentVespaVersionKey)).map(com.yahoo.component.Version::new), + NetworkPortsSerializer.fromSlime(object.field(hostSpecNetworkPortsKey)), + optionalDockerImage(object.field(hostSpecDockerImageRepoKey))); + } + else { + return new HostSpec(object.field(hostSpecHostNameKey).asString(), + aliasesFromSlime(object), + NetworkPortsSerializer.fromSlime(object.field(hostSpecNetworkPortsKey))); + } } private static List aliasesFromSlime(Inspector object) { - if ( ! object.field(aliasesKey).valid()) return Collections.emptyList(); + if ( ! object.field(aliasesKey).valid()) return List.of(); List aliases = new ArrayList<>(); object.field(aliasesKey).traverse((ArrayTraverser)(index, alias) -> aliases.add(alias.asString())); return aliases; @@ -154,17 +166,28 @@ public class AllocatedHostsSerializer { if (object.field(flavorKey).valid() && nodeFlavors.isPresent() && nodeFlavors.get().exists(object.field(flavorKey).asString())) return nodeFlavors.get().getFlavor(object.field(flavorKey).asString()); else - return nodeResourcesFromSlime(object.field(resourcesKey)).map(resources -> new Flavor(resources)); + return Optional.empty(); + } + + private static NodeResources nodeResourcesFromSlime(Inspector resources) { + return new NodeResources(resources.field(vcpuKey).asDouble(), + resources.field(memoryKey).asDouble(), + resources.field(diskKey).asDouble(), + resources.field(bandwidthKey).asDouble(), + diskSpeedFromSlime(resources.field(diskSpeedKey)), + storageTypeFromSlime(resources.field(storageTypeKey))); + } + + private static NodeResources optionalNodeResourcesFromSlime(Inspector resources) { + if ( ! resources.valid()) return NodeResources.unspecified(); + return nodeResourcesFromSlime(resources); } - private static Optional nodeResourcesFromSlime(Inspector resources) { - if ( ! resources.valid()) return Optional.empty(); - return Optional.of(new NodeResources(resources.field(vcpuKey).asDouble(), - resources.field(memoryKey).asDouble(), - resources.field(diskKey).asDouble(), - resources.field(bandwidthKey).asDouble(), - diskSpeedFromSlime(resources.field(diskSpeedKey)), - storageTypeFromSlime(resources.field(storageTypeKey)))); + private static NodeResources nodeResourcesFromSlime(Inspector resources, Inspector parent, + Optional nodeFlavors) { + if ( ! resources.valid()) // TODO: Remove the fallback using nodeFlavors after June 2020 + return flavorFromSlime(parent, nodeFlavors).map(f -> f.resources()).orElse(NodeResources.unspecified); + return nodeResourcesFromSlime(resources); } private static NodeResources.DiskSpeed diskSpeedFromSlime(Inspector diskSpeed) { diff --git a/config-provisioning/src/test/java/com/yahoo/config/provision/NodeFlavorsTest.java b/config-provisioning/src/test/java/com/yahoo/config/provision/NodeFlavorsTest.java index 31eec77de6b..e184e85c399 100644 --- a/config-provisioning/src/test/java/com/yahoo/config/provision/NodeFlavorsTest.java +++ b/config-provisioning/src/test/java/com/yahoo/config/provision/NodeFlavorsTest.java @@ -34,7 +34,7 @@ public class NodeFlavorsTest { NodeFlavors nodeFlavors = new NodeFlavors(config); Flavor banana = nodeFlavors.getFlavor("banana").get(); assertEquals(3, banana.cost()); - assertEquals(10, banana.getMinCpuCores(), delta); + assertEquals(13, banana.resources().vcpu(), delta); assertEquals("10 * 1.3", 13, banana.resources().vcpu(), delta); } diff --git a/config-provisioning/src/test/java/com/yahoo/config/provision/serialization/AllocatedHostsSerializerTest.java b/config-provisioning/src/test/java/com/yahoo/config/provision/serialization/AllocatedHostsSerializerTest.java index 33157a01c07..30810b79104 100644 --- a/config-provisioning/src/test/java/com/yahoo/config/provision/serialization/AllocatedHostsSerializerTest.java +++ b/config-provisioning/src/test/java/com/yahoo/config/provision/serialization/AllocatedHostsSerializerTest.java @@ -14,7 +14,6 @@ import com.yahoo.config.provisioning.FlavorsConfig; import org.junit.Test; import java.io.IOException; -import java.util.Collections; import java.util.LinkedHashSet; import java.util.List; import java.util.Optional; @@ -33,34 +32,44 @@ public class AllocatedHostsSerializerTest { public void testAllocatedHostsSerialization() throws IOException { NodeFlavors configuredFlavors = configuredFlavorsFrom("C/12/45/100", 12, 45, 100, 50, Flavor.Type.BARE_METAL); Set hosts = new LinkedHashSet<>(); - hosts.add(new HostSpec("empty", - Optional.empty())); - hosts.add(new HostSpec("with-aliases", - List.of("alias1", "alias2"))); + hosts.add(new HostSpec("empty", List.of(), Optional.empty())); + hosts.add(new HostSpec("with-aliases", List.of("alias1", "alias2"), Optional.empty())); hosts.add(new HostSpec("allocated", - List.of(), + NodeResources.unspecified(), + NodeResources.unspecified(), + NodeResources.unspecified(), + ClusterMembership.from("container/test/0/0", Version.fromString("6.73.1"), + Optional.of(DockerImage.fromString("docker.foo.com:4443/vespa/bar"))), + Optional.empty(), Optional.empty(), - Optional.of(ClusterMembership.from("container/test/0/0", Version.fromString("6.73.1"), - Optional.of(DockerImage.fromString("docker.foo.com:4443/vespa/bar")))), - Optional.empty(), Optional.empty(), Optional.empty(), Optional.of(DockerImage.fromString("docker.foo.com:4443/vespa/bar")))); - hosts.add(new HostSpec("flavor-from-resources-1", - Collections.emptyList(), new Flavor(new NodeResources(0.5, 3.1, 4, 1)))); hosts.add(new HostSpec("flavor-from-resources-2", - Collections.emptyList(), - Optional.of(new Flavor(new NodeResources(0.5, 3.1, 4, 1, NodeResources.DiskSpeed.slow))), + new NodeResources(0.5, 3.1, 4, 1, NodeResources.DiskSpeed.slow), + new NodeResources(1.0, 6.2, 8, 2, NodeResources.DiskSpeed.slow), + new NodeResources(0.5, 3.1, 4, 1, NodeResources.DiskSpeed.any), + ClusterMembership.from("container/test/0/0", Version.fromString("6.73.1"), + Optional.empty()), Optional.empty(), Optional.empty(), - Optional.empty(), - Optional.of(new NodeResources(0.5, 3.1, 4, 1, NodeResources.DiskSpeed.any)))); - hosts.add(new HostSpec("configured-flavor", - Collections.emptyList(), configuredFlavors.getFlavorOrThrow("C/12/45/100"))); + Optional.empty())); hosts.add(new HostSpec("with-version", - Collections.emptyList(), Optional.empty(), Optional.empty(), Optional.of(Version.fromString("3.4.5")))); + NodeResources.unspecified(), + NodeResources.unspecified(), + NodeResources.unspecified(), + ClusterMembership.from("container/test/0/0", Version.fromString("6.73.1"), + Optional.empty()), + Optional.of(Version.fromString("3.4.5")), + Optional.empty(), Optional.empty())); hosts.add(new HostSpec("with-ports", - Collections.emptyList(), Optional.empty(), Optional.empty(), Optional.empty(), + NodeResources.unspecified(), + NodeResources.unspecified(), + NodeResources.unspecified(), + ClusterMembership.from("container/test/0/0", Version.fromString("6.73.1"), + Optional.empty()), + Optional.empty(), Optional.of(new NetworkPorts(List.of(new NetworkPorts.Allocation(1234, "service1", "configId1", "suffix1"), - new NetworkPorts.Allocation(4567, "service2", "configId2", "suffix2")))))); + new NetworkPorts.Allocation(4567, "service2", "configId2", "suffix2")))), + Optional.empty())); assertAllocatedHosts(AllocatedHosts.withHosts(hosts), configuredFlavors); } @@ -73,11 +82,12 @@ public class AllocatedHostsSerializerTest { HostSpec deserializedHost = requireHost(expectedHost.hostname(), deserializedHosts); assertEquals(expectedHost.hostname(), deserializedHost.hostname()); assertEquals(expectedHost.membership(), deserializedHost.membership()); - assertEquals(expectedHost.flavor(), deserializedHost.flavor()); + assertEquals(expectedHost.realResources(), deserializedHost.realResources()); + assertEquals(expectedHost.advertisedResources(), deserializedHost.advertisedResources()); + assertEquals(expectedHost.requestedResources(), deserializedHost.requestedResources()); assertEquals(expectedHost.version(), deserializedHost.version()); assertEquals(expectedHost.networkPorts(), deserializedHost.networkPorts()); assertEquals(expectedHost.aliases(), deserializedHost.aliases()); - assertEquals(expectedHost.requestedResources(), deserializedHost.requestedResources()); assertEquals(expectedHost.dockerImageRepo(), deserializedHost.dockerImageRepo()); } } -- cgit v1.2.3