summaryrefslogtreecommitdiffstats
path: root/node-repository/src/test/java
diff options
context:
space:
mode:
Diffstat (limited to 'node-repository/src/test/java')
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTest.java15
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/ClusterModelTest.java70
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/Loader.java2
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTest.java4
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/VirtualNodeProvisioningCompleteHostCalculatorTest.java11
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/VirtualNodeProvisioningTest.java6
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/application1.json2
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/application2.json6
8 files changed, 68 insertions, 48 deletions
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTest.java
index e6873e7118f..28f37546eb6 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTest.java
@@ -19,6 +19,7 @@ import com.yahoo.vespa.hosted.provision.NodeRepository;
import com.yahoo.vespa.hosted.provision.Nodelike;
import com.yahoo.vespa.hosted.provision.provisioning.CapacityPolicies;
import com.yahoo.vespa.hosted.provision.provisioning.HostResourcesCalculator;
+import org.junit.Ignore;
import org.junit.Test;
import java.time.Duration;
@@ -69,10 +70,18 @@ public class AutoscalingTest {
/** Using too many resources for a short period is proof we should scale up regardless of the time that takes. */
@Test
- public void test_autoscaling_up_is_fast_TODO() {
+ public void test_no_autoscaling_with_no_measurements() {
var fixture = AutoscalingTester.fixture().build();
- fixture.tester().clock().advance(Duration.ofDays(1)); // TODO: Remove the need for this
- fixture.loader().applyLoad(1.0, 1.0, 1.0, 120); // TODO: Make this low
+ System.out.println(fixture.autoscale());
+ assertTrue(fixture.autoscale().target().isEmpty());
+ }
+
+ /** Using too many resources for a short period is proof we should scale up regardless of the time that takes. */
+ @Test
+ @Ignore // TODO
+ public void test_autoscaling_up_is_fast() {
+ var fixture = AutoscalingTester.fixture().build();
+ fixture.loader().applyLoad(1.0, 1.0, 1.0, 1);
fixture.tester().assertResources("Scaling up since resource usage is too high",
10, 1, 9.4, 8.5, 92.6,
fixture.autoscale());
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/ClusterModelTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/ClusterModelTest.java
index 516a7a92d04..0559a232065 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/ClusterModelTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/ClusterModelTest.java
@@ -27,50 +27,60 @@ public class ClusterModelTest {
private static final double delta = 0.001;
@Test
- public void test_traffic_headroom() {
- ManualClock clock = new ManualClock();
- Application application = Application.empty(ApplicationId.from("t1", "a1", "i1"));
- ClusterSpec clusterSpec = clusterSpec();
- Cluster cluster = cluster(new NodeResources(1, 10, 100, 1));
- application = application.with(cluster);
+ public void unit_adjustment_should_cause_no_change() {
+ var model = clusterModelWithNoData(); // 5 nodes, 1 group
+ assertEquals(Load.one(), model.loadAdjustment());
+ var target = model.loadAdjustment().scaled(resources());
+ int testingNodes = 5 - 1;
+ int currentNodes = 5 - 1;
+ assertEquals(resources(), model.loadWith(testingNodes, 1).scaled(Load.one().divide(model.loadWith(currentNodes, 1)).scaled(target)));
+ }
+ @Test
+ public void test_traffic_headroom() {
// No current traffic share: Ideal load is low but capped
- var model1 = new ClusterModel(application.with(new Status(0.0, 1.0)),
- clusterSpec, cluster, clock, Duration.ofMinutes(10),
- timeseries(cluster,100, t -> t == 0 ? 10000.0 : 0.0, t -> 0.0, clock),
- ClusterNodesTimeseries.empty());
- assertEquals(0.131, model1.idealLoad().cpu(), delta);
+ var model1 = clusterModel(new Status(0.0, 1.0),
+ t -> t == 0 ? 10000.0 : 0.0, t -> 0.0);
+ assertEquals(0.10672097759674132, model1.idealLoad().cpu(), delta);
// Almost no current traffic share: Ideal load is low but capped
- var model2 = new ClusterModel(application.with(new Status(0.0001, 1.0)),
- clusterSpec, cluster, clock, Duration.ofMinutes(10),
- timeseries(cluster,100, t -> t == 0 ? 10000.0 : 0.0, t -> 0.0, clock),
- ClusterNodesTimeseries.empty());
- assertEquals(0.131, model2.idealLoad().cpu(), delta);
+ var model2 = clusterModel(new Status(0.0001, 1.0),
+ t -> t == 0 ? 10000.0 : 0.0, t -> 0.0);
+ assertEquals(0.10672097759674132, model2.idealLoad().cpu(), delta);
}
@Test
public void test_growth_headroom() {
- ManualClock clock = new ManualClock();
+ // No current traffic: Ideal load is low but capped
+ var model1 = clusterModel(new Status(0.0, 0.0),
+ t -> t == 0 ? 10000.0 : 0.0, t -> 0.0);
+ assertEquals(0.2240325865580448, model1.idealLoad().cpu(), delta);
+ // Almost no current traffic: Ideal load is low but capped
+ var model2 = clusterModel(new Status(0.0001, 1.0),
+ t -> t == 0 ? 10000.0 : 0.0001, t -> 0.0);
+ assertEquals(0.0326530612244898, model2.idealLoad().cpu(), delta);
+ }
+
+ private ClusterModel clusterModelWithNoData() {
+ return clusterModel(new Status(0.0, 1.0), t -> 0.0, t -> 0.0);
+ }
+
+ private ClusterModel clusterModel(Status status, IntFunction<Double> queryRate, IntFunction<Double> writeRate) {
+ ManualClock clock = new ManualClock();
Application application = Application.empty(ApplicationId.from("t1", "a1", "i1"));
ClusterSpec clusterSpec = clusterSpec();
- Cluster cluster = cluster(new NodeResources(1, 10, 100, 1));
+ Cluster cluster = cluster(resources());
application = application.with(cluster);
- // No current traffic: Ideal load is low but capped
- var model1 = new ClusterModel(application,
- clusterSpec, cluster, clock, Duration.ofMinutes(10),
- timeseries(cluster,100, t -> t == 0 ? 10000.0 : 0.0, t -> 0.0, clock),
- ClusterNodesTimeseries.empty());
- assertEquals(0.275, model1.idealLoad().cpu(), delta);
+ return new ClusterModel(application.with(status),
+ clusterSpec, cluster, clock, Duration.ofMinutes(10),
+ timeseries(cluster,100, queryRate, writeRate, clock),
+ ClusterNodesTimeseries.empty());
+ }
- // Almost no current traffic: Ideal load is low but capped
- var model2 = new ClusterModel(application.with(new Status(0.0001, 1.0)),
- clusterSpec, cluster, clock, Duration.ofMinutes(10),
- timeseries(cluster,100, t -> t == 0 ? 10000.0 : 0.0001, t -> 0.0, clock),
- ClusterNodesTimeseries.empty());
- assertEquals(0.040, model2.idealLoad().cpu(), delta);
+ private NodeResources resources() {
+ return new NodeResources(1, 10, 100, 1);
}
private ClusterSpec clusterSpec() {
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/Loader.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/Loader.java
index db4fe917b53..c0203f5f202 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/Loader.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/Loader.java
@@ -33,6 +33,7 @@ public class Loader {
* @param count the number of measurements
*/
public Duration addCpuMeasurements(double value, int count) {
+ var idealLoad = fixture.clusterModel().idealLoad(); // TODO: Use this
NodeList nodes = fixture.nodes();
float oneExtraNodeFactor = (float)(nodes.size() - 1.0) / (nodes.size());
Instant initialTime = fixture.tester().clock().instant();
@@ -88,6 +89,7 @@ public class Loader {
* wanting to see the ideal load with one node missing.)
*/
public void addMemMeasurements(double value, int count) {
+ var idealLoad = fixture.clusterModel().idealLoad(); // TODO: Use this
NodeList nodes = fixture.nodes();
float oneExtraNodeFactor = (float)(nodes.size() - 1.0) / (nodes.size());
for (int i = 0; i < count; i++) {
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTest.java
index 34219a15caa..8c9c8939616 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTest.java
@@ -546,14 +546,14 @@ public class ProvisioningTest {
tester.activate(app1, cluster1, Capacity.from(resources(6, 3, 8, 25, 10),
resources(9, 3, 12, 35, 15)));
tester.assertNodes("Groups changed",
- 9, 3, 8, 35, 15,
+ 9, 3, 8, 30, 13,
app1, cluster1);
// Stop specifying node resources
tester.activate(app1, cluster1, Capacity.from(new ClusterResources(6, 3, NodeResources.unspecified()),
new ClusterResources(9, 3, NodeResources.unspecified())));
tester.assertNodes("No change",
- 9, 3, 8, 35, 15,
+ 9, 3, 8, 30, 13,
app1, cluster1);
}
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/VirtualNodeProvisioningCompleteHostCalculatorTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/VirtualNodeProvisioningCompleteHostCalculatorTest.java
index 2f0caf8092f..d703ecf44e8 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/VirtualNodeProvisioningCompleteHostCalculatorTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/VirtualNodeProvisioningCompleteHostCalculatorTest.java
@@ -37,24 +37,23 @@ public class VirtualNodeProvisioningCompleteHostCalculatorTest {
ClusterSpec cluster1 = ClusterSpec.request(ClusterSpec.Type.content, new ClusterSpec.Id("cluster1")).vespaVersion("7").build();
var initialResources = new NodeResources(20, 16, 50, 1);
- tester.activate(app1, cluster1, Capacity.from(new ClusterResources(2, 1, initialResources),
- new ClusterResources(2, 1, initialResources)));
+ tester.activate(app1, cluster1, Capacity.from(new ClusterResources(2, 1, initialResources)));
tester.assertNodes("Initial allocation",
2, 1, 20, 16, 50, 1.0,
app1, cluster1);
var newMinResources = new NodeResources( 5, 4, 11, 1);
var newMaxResources = new NodeResources(20, 10, 30, 1);
+
tester.activate(app1, cluster1, Capacity.from(new ClusterResources(7, 1, newMinResources),
new ClusterResources(7, 1, newMaxResources)));
- tester.assertNodes("New allocation preserves total resources",
- 7, 1, 7, 4.6, 14.3, 1.0,
+ tester.assertNodes("New allocation preserves (redundancy adjusted) total resources",
+ 7, 1, 5, 4.0, 11, 1.0,
app1, cluster1);
-
tester.activate(app1, cluster1, Capacity.from(new ClusterResources(7, 1, newMinResources),
new ClusterResources(7, 1, newMaxResources)));
tester.assertNodes("Redeploying the same ranges does not cause changes",
- 7, 1, 7, 4.6, 14.3, 1.0,
+ 7, 1, 5, 4.0, 11, 1.0,
app1, cluster1);
}
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/VirtualNodeProvisioningTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/VirtualNodeProvisioningTest.java
index a1c55833862..7728e0ac9c8 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/VirtualNodeProvisioningTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/VirtualNodeProvisioningTest.java
@@ -522,14 +522,14 @@ public class VirtualNodeProvisioningTest {
var newMaxResources = new NodeResources(20, 10, 30, 1);
tester.activate(app1, cluster1, Capacity.from(new ClusterResources(7, 1, newMinResources),
new ClusterResources(7, 1, newMaxResources)));
- tester.assertNodes("New allocation preserves total resources",
- 7, 1, 7, 6.7, 14.3, 1.0,
+ tester.assertNodes("New allocation preserves total (redundancy adjusted) resources",
+ 7, 1, 5, 6.0, 11, 1.0,
app1, cluster1);
tester.activate(app1, cluster1, Capacity.from(new ClusterResources(7, 1, newMinResources),
new ClusterResources(7, 1, newMaxResources)));
tester.assertNodes("Redeploying does not cause changes",
- 7, 1, 7, 6.7, 14.3, 1.0,
+ 7, 1, 5, 6.0, 11, 1.0,
app1, cluster1);
}
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/application1.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/application1.json
index 63a604bf4eb..40719153b9e 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/application1.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/application1.json
@@ -71,7 +71,7 @@
},
"utilization" : {
"cpu" : 0.0,
- "idealCpu": 0.275,
+ "idealCpu": 0.1375,
"currentCpu": 0.0,
"memory" : 0.0,
"idealMemory": 0.65,
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/application2.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/application2.json
index eddf9b957a7..41aa4257c00 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/application2.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/application2.json
@@ -45,13 +45,13 @@
},
"utilization" : {
"cpu" : 0.0,
- "idealCpu": 0.2664285714285714,
+ "idealCpu": 0.1394913986537023,
"currentCpu": 0.0,
"memory" : 0.0,
- "idealMemory": 0.65,
+ "idealMemory": 0.325,
"currentMemory": 0.0,
"disk" : 0.0,
- "idealDisk": 0.6,
+ "idealDisk": 0.3,
"currentDisk": 0.0
},
"scalingEvents" : [