aboutsummaryrefslogtreecommitdiffstats
path: root/node-repository
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2024-05-24 14:19:04 +0200
committerMartin Polden <mpolden@mpolden.no>2024-05-24 14:19:04 +0200
commit54c14c5efd43349ea22f8a8100b2a79159103cd7 (patch)
tree7b405f47661e7e592c703101204995e1ddce208d /node-repository
parent8e4316f3c29c5bc0c83a1cd92c9f1c0711443f58 (diff)
Handle fulfilment precision loss
Diffstat (limited to 'node-repository')
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/AllocatableResources.java9
1 files changed, 8 insertions, 1 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/AllocatableResources.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/AllocatableResources.java
index 98c5af2688a..79e709e7bae 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/AllocatableResources.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/AllocatableResources.java
@@ -130,7 +130,10 @@ public class AllocatableResources {
double vcpuFulfilment = Math.min(1, realResources.totalResources().vcpu() / idealResources.totalResources().vcpu());
double memoryGbFulfilment = Math.min(1, realResources.totalResources().memoryGb() / idealResources.totalResources().memoryGb());
double diskGbFulfilment = Math.min(1, realResources.totalResources().diskGb() / idealResources.totalResources().diskGb());
- return (vcpuFulfilment + memoryGbFulfilment + diskGbFulfilment) / 3;
+ double fulfilment = (vcpuFulfilment + memoryGbFulfilment + diskGbFulfilment) / 3;
+ if (equal(fulfilment, 0)) return 0;
+ if (equal(fulfilment, 1)) return 1;
+ return fulfilment;
}
public boolean preferableTo(AllocatableResources other, ClusterModel model) {
@@ -292,4 +295,8 @@ public class AllocatableResources {
return true;
}
+ private static boolean equal(double a, double b) {
+ return Math.abs(a - b) < 1e-9;
+ }
+
}