aboutsummaryrefslogtreecommitdiffstats
path: root/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/resource/ResourceSnapshot.java
diff options
context:
space:
mode:
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
commit05da1f1d1f5f437388d3e552a360fa816f6d37a5 (patch)
tree76f9090b290ecde5c478dd64e5033f6f30e9246b /controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/resource/ResourceSnapshot.java
parent2738f12be650038f86eef63a7e7c24df50afdf2a (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.java22
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()));
+ }
}