diff options
author | Øyvind Grønnesby <oyving@yahooinc.com> | 2023-03-09 09:55:43 +0100 |
---|---|---|
committer | Øyvind Grønnesby <oyving@yahooinc.com> | 2023-03-09 10:18:07 +0100 |
commit | 05da1f1d1f5f437388d3e552a360fa816f6d37a5 (patch) | |
tree | 76f9090b290ecde5c478dd64e5033f6f30e9246b /controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/resource/ResourceSnapshot.java | |
parent | 2738f12be650038f86eef63a7e7c24df50afdf2a (diff) |
Don't use NodeResources::add to create ResourceSnapshot
Diffstat (limited to 'controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/resource/ResourceSnapshot.java')
-rw-r--r-- | controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/resource/ResourceSnapshot.java | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/resource/ResourceSnapshot.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/resource/ResourceSnapshot.java index 4a849b831b7..f265ec3116c 100644 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/resource/ResourceSnapshot.java +++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/resource/ResourceSnapshot.java @@ -53,7 +53,7 @@ public class ResourceSnapshot { var resources = nodes.stream() .map(Node::resources) - .reduce(NodeResources.zero(), NodeResources::add); + .reduce(NodeResources.zero(), ResourceSnapshot::addResources); return new ResourceSnapshot(applicationIds.iterator().next(), resources, timestamp, zoneId, versions.iterator().next()); } @@ -95,4 +95,24 @@ public class ResourceSnapshot { public int hashCode(){ return Objects.hash(applicationId, resources, timestamp, zoneId, version); } + + /* This function does pretty much the same thing as NodeResources::add, but it allows adding resources + * where some dimensions that are not relevant for billing (yet) are not the same. + * + * TODO: Make this code respect all dimensions. + */ + private static NodeResources addResources(NodeResources a, NodeResources b) { + if (a.architecture() != b.architecture() && a.architecture() != NodeResources.Architecture.any && b.architecture() != NodeResources.Architecture.any) { + throw new IllegalArgumentException(a + " and " + b + " are not interchangeable for resource snapshots"); + } + return new NodeResources( + a.vcpu() + b.vcpu(), + a.memoryGb() + b.memoryGb(), + a.diskGb() + b.diskGb(), + 0, + NodeResources.DiskSpeed.any, + NodeResources.StorageType.any, + a.architecture(), + a.gpuResources().plus(b.gpuResources())); + } } |