diff options
author | Jon Bratseth <bratseth@gmail.com> | 2020-09-16 11:54:38 +0200 |
---|---|---|
committer | Jon Bratseth <bratseth@gmail.com> | 2020-09-16 11:54:38 +0200 |
commit | 65570e88c8735d6abe55457bdb2dce705672f005 (patch) | |
tree | 525b6c63c8b4ffc3df7bb91850443dd09dbc48f1 /node-repository/src/test/java | |
parent | 7ecd25a81bb636174954da2caa8255cc1f7b3515 (diff) |
Keep track of cluster type in metrics db
Diffstat (limited to 'node-repository/src/test/java')
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); |