From 869c206879f2ae4b215dd476b3fc14693cd2a7b1 Mon Sep 17 00:00:00 2001 From: Jon Bratseth Date: Tue, 21 Feb 2023 12:07:35 +0100 Subject: Handle zero traffic --- .../com/yahoo/vespa/hosted/provision/autoscale/ClusterModel.java | 6 ++++-- .../provision/autoscale/AutoscalingUsingBcpGroupInfoTest.java | 8 ++++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/ClusterModel.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/ClusterModel.java index 264664f91b2..4a4222cca6a 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/ClusterModel.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/ClusterModel.java @@ -196,8 +196,10 @@ public class ClusterModel { if (! cluster.bcpGroupInfo().isEmpty()) { // Do a weighted sum of the ideal "vote" based on local and bcp group info. // This avoids any discontinuities with a near-zero local query rate. - double localInformationWeight = Math.min(1, averageQueryRate().orElse(0) / - Math.min(queryRateGivingFullConfidence, cluster.bcpGroupInfo().queryRate())); + double localInformationWeight = cluster.bcpGroupInfo().queryRate() == 0 + ? 1 + : Math.min(1, averageQueryRate().orElse(0) / + Math.min(queryRateGivingFullConfidence, cluster.bcpGroupInfo().queryRate())); Load bcpGroupIdeal = adjustQueryDependentIdealLoadByBcpGroupInfo(ideal); ideal = ideal.multiply(localInformationWeight).add(bcpGroupIdeal.multiply(1 - localInformationWeight)); } diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingUsingBcpGroupInfoTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingUsingBcpGroupInfoTest.java index eb2488b7829..1178706f9d4 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingUsingBcpGroupInfoTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingUsingBcpGroupInfoTest.java @@ -53,6 +53,14 @@ public class AutoscalingUsingBcpGroupInfoTest { fixture.tester().assertResources("Scaling up cpu using bcp group cpu info", 9, 1, 5.4, 6.1, 25.3, fixture.autoscale()); + + // Bcp elsewhere is 0 - use local only + fixture.tester().clock().advance(Duration.ofDays(2)); + fixture.store(new BcpGroupInfo(0, 1.1, 0.45)); + fixture.loader().addCpuMeasurements(0.7f, 10); + fixture.tester().assertResources("Scaling using local info", + 8, 1, 1, 7.0, 29.0, + fixture.autoscale()); } /** Tests with varying BCP group info parameters. */ -- cgit v1.2.3