aboutsummaryrefslogtreecommitdiffstats
path: root/node-repository/src/test/java
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@gmail.com>2020-09-16 11:54:38 +0200
committerJon Bratseth <bratseth@gmail.com>2020-09-16 11:54:38 +0200
commit65570e88c8735d6abe55457bdb2dce705672f005 (patch)
tree525b6c63c8b4ffc3df7bb91850443dd09dbc48f1 /node-repository/src/test/java
parent7ecd25a81bb636174954da2caa8255cc1f7b3515 (diff)
Keep track of cluster type in metrics db
Diffstat (limited to 'node-repository/src/test/java')
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/NodeRepositoryTest.java34
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/NodeRepositoryTester.java9
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTester.java2
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/NodeMetricsDbTest.java35
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/AutoscalingMaintainerTest.java2
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/ScalingSuggestionsMaintainerTest.java2
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/InfraDeployerImplTest.java2
7 files changed, 56 insertions, 30 deletions
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/NodeRepositoryTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/NodeRepositoryTest.java
index d7829df4152..511d2f988d0 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/NodeRepositoryTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/NodeRepositoryTest.java
@@ -34,9 +34,9 @@ public class NodeRepositoryTest {
NodeRepositoryTester tester = new NodeRepositoryTester();
assertEquals(0, tester.nodeRepository().getNodes().size());
- tester.addNode("id1", "host1", "default", NodeType.host);
- tester.addNode("id2", "host2", "default", NodeType.host);
- tester.addNode("id3", "host3", "default", NodeType.host);
+ tester.addHost("id1", "host1", "default", NodeType.host);
+ tester.addHost("id2", "host2", "default", NodeType.host);
+ tester.addHost("id3", "host3", "default", NodeType.host);
assertEquals(3, tester.nodeRepository().getNodes().size());
@@ -50,7 +50,7 @@ public class NodeRepositoryTest {
@Test
public void only_allow_docker_containers_remove_in_ready() {
NodeRepositoryTester tester = new NodeRepositoryTester();
- tester.addNode("id1", "host1", "docker", NodeType.tenant);
+ tester.addHost("id1", "host1", "docker", NodeType.tenant);
try {
tester.nodeRepository().removeRecursively("host1"); // host1 is in state provisioned
@@ -66,9 +66,9 @@ public class NodeRepositoryTest {
@Test
public void only_remove_tenant_docker_containers_for_new_allocations() {
NodeRepositoryTester tester = new NodeRepositoryTester();
- tester.addNode("host1", "host1", "default", NodeType.tenant);
- tester.addNode("host2", "host2", "docker", NodeType.tenant);
- tester.addNode("cfg1", "cfg1", "docker", NodeType.config);
+ tester.addHost("host1", "host1", "default", NodeType.tenant);
+ tester.addHost("host2", "host2", "docker", NodeType.tenant);
+ tester.addHost("cfg1", "cfg1", "docker", NodeType.config);
tester.setNodeState("host1", Node.State.dirty);
tester.setNodeState("host2", Node.State.dirty);
@@ -87,8 +87,8 @@ public class NodeRepositoryTest {
@Test
public void fail_readying_with_hard_fail() {
NodeRepositoryTester tester = new NodeRepositoryTester();
- tester.addNode("host1", "host1", "default", NodeType.tenant);
- tester.addNode("host2", "host2", "default", NodeType.tenant);
+ tester.addHost("host1", "host1", "default", NodeType.tenant);
+ tester.addHost("host2", "host2", "default", NodeType.tenant);
tester.setNodeState("host1", Node.State.dirty);
tester.setNodeState("host2", Node.State.dirty);
@@ -113,8 +113,8 @@ public class NodeRepositoryTest {
public void delete_host_only_after_all_the_children_have_been_deleted() {
NodeRepositoryTester tester = new NodeRepositoryTester();
- tester.addNode("id1", "host1", "default", NodeType.host);
- tester.addNode("id2", "host2", "default", NodeType.host);
+ tester.addHost("id1", "host1", "default", NodeType.host);
+ tester.addHost("id2", "host2", "default", NodeType.host);
tester.addNode("node10", "node10", "host1", "docker", NodeType.tenant);
tester.addNode("node11", "node11", "host1", "docker", NodeType.tenant);
tester.addNode("node12", "node12", "host1", "docker", NodeType.tenant);
@@ -151,7 +151,7 @@ public class NodeRepositoryTest {
String cfghost1 = "cfghost1";
String cfg1 = "cfg1";
- tester.addNode("id1", cfghost1, "default", NodeType.confighost);
+ tester.addHost("id1", cfghost1, "default", NodeType.confighost);
tester.addNode("id2", cfg1, cfghost1, "docker", NodeType.config);
tester.setNodeState(cfghost1, Node.State.active);
tester.setNodeState(cfg1, Node.State.active);
@@ -177,8 +177,8 @@ public class NodeRepositoryTest {
Instant testStart = tester.nodeRepository().clock().instant();
tester.clock().advance(Duration.ofSeconds(1));
- tester.addNode("id1", "host1", "default", NodeType.host);
- tester.addNode("id2", "host2", "default", NodeType.host);
+ tester.addHost("id1", "host1", "default", NodeType.host);
+ tester.addHost("id2", "host2", "default", NodeType.host);
assertFalse(tester.nodeRepository().getNode("host1").get().history().hasEventAfter(History.Event.Type.deprovisioned, testStart));
// Set host 1 properties and deprovision it
@@ -196,7 +196,7 @@ public class NodeRepositoryTest {
assertTrue(host1.history().hasEventAfter(History.Event.Type.deprovisioned, testStart));
// Adding it again preserves some information from the deprovisioned host and removes it
- tester.addNode("id2", "host1", "default", NodeType.host);
+ tester.addHost("id2", "host1", "default", NodeType.host);
host1 = tester.nodeRepository().getNode("host1").get();
assertEquals("This is the newly added node", "id2", host1.id());
assertFalse("The old 'host1' is removed",
@@ -213,8 +213,8 @@ public class NodeRepositoryTest {
public void dirty_host_only_if_we_can_dirty_children() {
NodeRepositoryTester tester = new NodeRepositoryTester();
- tester.addNode("id1", "host1", "default", NodeType.host);
- tester.addNode("id2", "host2", "default", NodeType.host);
+ tester.addHost("id1", "host1", "default", NodeType.host);
+ tester.addHost("id2", "host2", "default", NodeType.host);
tester.addNode("node10", "node10", "host1", "docker", NodeType.tenant);
tester.addNode("node11", "node11", "host1", "docker", NodeType.tenant);
tester.addNode("node12", "node12", "host1", "docker", NodeType.tenant);
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/NodeRepositoryTester.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/NodeRepositoryTester.java
index 9b0500303d8..92f7e7404a6 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/NodeRepositoryTester.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/NodeRepositoryTester.java
@@ -4,6 +4,7 @@ package com.yahoo.vespa.hosted.provision;
import com.yahoo.config.provision.DockerImage;
import com.yahoo.config.provision.Flavor;
import com.yahoo.config.provision.NodeFlavors;
+import com.yahoo.config.provision.NodeResources;
import com.yahoo.config.provision.NodeType;
import com.yahoo.config.provision.Zone;
import com.yahoo.config.provisioning.FlavorsConfig;
@@ -54,7 +55,7 @@ public class NodeRepositoryTester {
return nodeRepository.getNodes(type, inState);
}
- public Node addNode(String id, String hostname, String flavor, NodeType type) {
+ public Node addHost(String id, String hostname, String flavor, NodeType type) {
Node node = nodeRepository.createNode(id, hostname, Optional.empty(),
nodeFlavors.getFlavorOrThrow(flavor), type);
return nodeRepository.addNodes(Collections.singletonList(node), Agent.system).get(0);
@@ -66,6 +67,12 @@ public class NodeRepositoryTester {
return nodeRepository.addNodes(Collections.singletonList(node), Agent.system).get(0);
}
+ public Node addNode(String id, String hostname, String parentHostname, NodeResources resources) {
+ Node node = nodeRepository.createNode(id, hostname, Optional.of(parentHostname),
+ new Flavor(resources), NodeType.tenant);
+ return nodeRepository.addNodes(Collections.singletonList(node), Agent.system).get(0);
+ }
+
/**
* Moves a node directly to the given state without doing any validation, useful
* to create wanted test scenario without having to move every node through series
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTester.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTester.java
index cb39e8fecce..0a127eacae1 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTester.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTester.java
@@ -67,7 +67,7 @@ class AutoscalingTester {
.build();
hostResourcesCalculator = new MockHostResourcesCalculator(zone);
- db = new NodeMetricsDb();
+ db = new NodeMetricsDb(provisioningTester.nodeRepository());
autoscaler = new Autoscaler(db, nodeRepository());
}
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/NodeMetricsDbTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/NodeMetricsDbTest.java
index 0a3436bc379..27d54840586 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/NodeMetricsDbTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/NodeMetricsDbTest.java
@@ -1,7 +1,16 @@
// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.hosted.provision.autoscale;
+import com.yahoo.config.provision.ApplicationId;
+import com.yahoo.config.provision.Capacity;
+import com.yahoo.config.provision.ClusterResources;
+import com.yahoo.config.provision.ClusterSpec;
+import com.yahoo.config.provision.NodeResources;
+import com.yahoo.config.provision.NodeType;
import com.yahoo.test.ManualClock;
+import com.yahoo.vespa.hosted.provision.NodeRepository;
+import com.yahoo.vespa.hosted.provision.NodeRepositoryTester;
+import com.yahoo.vespa.hosted.provision.provisioning.ProvisioningTester;
import org.junit.Test;
import java.time.Duration;
@@ -14,23 +23,33 @@ public class NodeMetricsDbTest {
@Test
public void testNodeMetricsDb() {
- ManualClock clock = new ManualClock();
- NodeMetricsDb db = new NodeMetricsDb();
+ ProvisioningTester tester = new ProvisioningTester.Builder().build();
+ tester.makeReadyHosts(10, new NodeResources(10, 100, 1000, 10)).deployZoneApp();
+ ApplicationId app1 = tester.makeApplicationId("app1");
+ tester.deployZoneApp();
+ var hosts =
+ tester.activate(app1,
+ ClusterSpec.request(ClusterSpec.Type.container, ClusterSpec.Id.from("test")).vespaVersion("7.0").build(),
+ Capacity.from(new ClusterResources(2, 1, new NodeResources(1, 4, 10, 1))));
+ String node0 = hosts.iterator().next().hostname();
+
+ ManualClock clock = tester.clock();
+ NodeMetricsDb db = new NodeMetricsDb(tester.nodeRepository());
List<NodeMetrics.MetricValue> values = new ArrayList<>();
for (int i = 0; i < 40; i++) {
- values.add(new NodeMetrics.MetricValue("host0", "cpu.util", clock.instant().getEpochSecond(), 0.9f));
- clock.advance(Duration.ofHours(1));
+ values.add(new NodeMetrics.MetricValue(node0, "cpu.util", clock.instant().getEpochSecond(), 0.9f));
+ clock.advance(Duration.ofMinutes(30));
}
db.add(values);
// Avoid off-by-one bug when the below windows starts exactly on one of the above getEpochSecond() timestamps.
clock.advance(Duration.ofMinutes(1));
- assertEquals(29, db.getWindow(clock.instant().minus(Duration.ofHours(30)), Resource.cpu, List.of("host0")).measurementCount());
- assertEquals( 0, db.getWindow(clock.instant().minus(Duration.ofHours(30)), Resource.memory, List.of("host0")).measurementCount());
+ assertEquals(29, db.getWindow(clock.instant().minus(Duration.ofHours(15)), Resource.cpu, List.of(node0)).measurementCount());
+ assertEquals( 0, db.getWindow(clock.instant().minus(Duration.ofHours(15)), Resource.memory, List.of(node0)).measurementCount());
db.gc(clock);
- assertEquals(23, db.getWindow(clock.instant().minus(Duration.ofHours(30)), Resource.cpu, List.of("host0")).measurementCount());
- assertEquals( 0, db.getWindow(clock.instant().minus(Duration.ofHours(30)), Resource.memory, List.of("host0")).measurementCount());
+ assertEquals(23, db.getWindow(clock.instant().minus(Duration.ofHours(15)), Resource.cpu, List.of(node0)).measurementCount());
+ assertEquals( 0, db.getWindow(clock.instant().minus(Duration.ofHours(15)), Resource.memory, List.of(node0)).measurementCount());
}
}
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/AutoscalingMaintainerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/AutoscalingMaintainerTest.java
index c34db3210c1..88195cf0ed9 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/AutoscalingMaintainerTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/AutoscalingMaintainerTest.java
@@ -54,7 +54,7 @@ public class AutoscalingMaintainerTest {
app2, new MockDeployer.ApplicationContext(app2, cluster2, Capacity.from(new ClusterResources(2, 1, highResources))));
MockDeployer deployer = new MockDeployer(tester.provisioner(), tester.clock(), apps);
- NodeMetricsDb nodeMetricsDb = new NodeMetricsDb();
+ NodeMetricsDb nodeMetricsDb = new NodeMetricsDb(tester.nodeRepository());
AutoscalingMaintainer maintainer = new AutoscalingMaintainer(tester.nodeRepository(),
nodeMetricsDb,
deployer,
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/ScalingSuggestionsMaintainerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/ScalingSuggestionsMaintainerTest.java
index be5c7f423c7..31a9fcb8999 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/ScalingSuggestionsMaintainerTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/ScalingSuggestionsMaintainerTest.java
@@ -44,7 +44,7 @@ public class ScalingSuggestionsMaintainerTest {
ApplicationId app2 = tester.makeApplicationId("app2");
ClusterSpec cluster2 = tester.contentClusterSpec();
- NodeMetricsDb nodeMetricsDb = new NodeMetricsDb();
+ NodeMetricsDb nodeMetricsDb = new NodeMetricsDb(tester.nodeRepository());
tester.makeReadyNodes(20, "flt", NodeType.host, 8);
tester.deployZoneApp();
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/InfraDeployerImplTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/InfraDeployerImplTest.java
index e45ea09d372..edbbb3ed2e3 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/InfraDeployerImplTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/InfraDeployerImplTest.java
@@ -136,7 +136,7 @@ public class InfraDeployerImplTest {
}
private Node addNode(int id, Node.State state, Optional<Version> wantedVespaVersion) {
- Node node = tester.addNode("id-" + id, "node-" + id, "default", nodeType);
+ Node node = tester.addHost("id-" + id, "node-" + id, "default", nodeType);
Optional<Node> nodeWithAllocation = wantedVespaVersion.map(version -> {
ClusterSpec clusterSpec = application.getClusterSpecWithVersion(version).with(Optional.of(ClusterSpec.Group.from(0)));
ClusterMembership membership = ClusterMembership.from(clusterSpec, 1);