diff options
Diffstat (limited to 'node-repository/src/test')
9 files changed, 58 insertions, 24 deletions
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/applications/ApplicationsTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/applications/ApplicationsTest.java index 2f331c53f74..cc988b2ec1e 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/applications/ApplicationsTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/applications/ApplicationsTest.java @@ -2,6 +2,7 @@ package com.yahoo.vespa.hosted.provision.applications; import com.yahoo.config.provision.ApplicationId; +import com.yahoo.config.provision.ApplicationTransaction; import com.yahoo.config.provision.ProvisionLock; import com.yahoo.transaction.NestedTransaction; import com.yahoo.vespa.hosted.provision.NodeRepositoryTester; @@ -30,7 +31,7 @@ public class ApplicationsTest { assertEquals(app1, applications.get(app1).get().id()); assertEquals(List.of(app1), applications.ids()); NestedTransaction t = new NestedTransaction(); - applications.remove(app1, t, provisionLock(app1)); + applications.remove(new ApplicationTransaction(provisionLock(app1), t)); t.commit(); assertTrue(applications.get(app1).isEmpty()); assertEquals(List.of(), applications.ids()); @@ -38,14 +39,14 @@ public class ApplicationsTest { applications.put(new Application(app1), () -> {}); applications.put(new Application(app2), () -> {}); t = new NestedTransaction(); - applications.put(new Application(app3), t, () -> {}); + applications.put(new Application(app3), new ApplicationTransaction(provisionLock(app1), t)); assertEquals(List.of(app1, app2), applications.ids()); t.commit(); assertEquals(List.of(app1, app2, app3), applications.ids()); t = new NestedTransaction(); - applications.remove(app1, t, provisionLock(app1)); - applications.remove(app2, t, provisionLock(app2)); - applications.remove(app3, t, provisionLock(app3)); + applications.remove(new ApplicationTransaction(provisionLock(app1), t)); + applications.remove(new ApplicationTransaction(provisionLock(app2), t)); + applications.remove(new ApplicationTransaction(provisionLock(app3), t)); assertEquals(List.of(app1, app2, app3), applications.ids()); t.commit(); assertTrue(applications.get(app1).isEmpty()); 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 2635258956a..5c2bbf1742f 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 @@ -6,13 +6,18 @@ 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.vespa.hosted.provision.applications.ScalingEvent; import com.yahoo.vespa.hosted.provision.autoscale.Metric; import com.yahoo.vespa.hosted.provision.testutils.MockDeployer; import org.junit.Test; import java.time.Duration; import java.time.Instant; +import java.util.List; + +import static com.yahoo.config.provision.NodeResources.DiskSpeed.fast; +import static com.yahoo.config.provision.NodeResources.StorageType.remote; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; @@ -78,24 +83,32 @@ public class AutoscalingMaintainerTest { var tester = new AutoscalingMaintainerTester(new MockDeployer.ApplicationContext(app1, cluster1, app1Capacity)); // Initial deployment at time 0 + System.out.println("Initial deploy"); tester.deploy(app1, cluster1, app1Capacity); // Measure overload tester.clock().advance(Duration.ofSeconds(1)); + System.out.println("Advance by 1 second to " + tester.clock().instant()); + System.out.println("Emit metrics"); + tester.addMeasurements(Metric.generation, 0, 1, app1); tester.addMeasurements(Metric.cpu, 0.9f, 500, app1); tester.addMeasurements(Metric.memory, 0.9f, 500, app1); tester.addMeasurements(Metric.disk, 0.9f, 500, app1); // Causes autoscaling tester.clock().advance(Duration.ofSeconds(1)); + System.out.println("Advance by 1 second to " + tester.clock().instant()); Instant firstMaintenanceTime = tester.clock().instant(); + System.out.println("Run maintenance"); tester.maintainer().maintain(); assertTrue(tester.deployer().lastDeployTime(app1).isPresent()); assertEquals(firstMaintenanceTime.toEpochMilli(), tester.deployer().lastDeployTime(app1).get().toEpochMilli()); - assertEquals(1, tester.nodeMetricsDb().getEvents(app1).size()); - assertEquals(app1, tester.nodeMetricsDb().getEvents(app1).get(0).application()); - assertEquals(0, tester.nodeMetricsDb().getEvents(app1).get(0).generation()); - assertEquals(firstMaintenanceTime.toEpochMilli(), tester.nodeMetricsDb().getEvents(app1).get(0).time().toEpochMilli()); + List<ScalingEvent> events = tester.nodeRepository().applications().get(app1).get().cluster(cluster1.id()).get().scalingEvents(); + assertEquals(1, events.size()); + assertEquals(2, events.get(0).from().nodes()); + assertEquals(4, events.get(0).to().nodes()); + assertEquals(1, events.get(0).generation()); + assertEquals(firstMaintenanceTime.toEpochMilli(), events.get(0).at().toEpochMilli()); // Measure overload still, since change is not applied, but metrics are discarded tester.clock().advance(Duration.ofSeconds(1)); @@ -117,7 +130,7 @@ public class AutoscalingMaintainerTest { // Add measurement of the expected generation, leading to rescaling tester.clock().advance(Duration.ofSeconds(1)); - tester.addMeasurements(Metric.generation, 0, 1, app1); + tester.addMeasurements(Metric.generation, 1, 1, app1); tester.addMeasurements(Metric.cpu, 0.1f, 500, app1); tester.addMeasurements(Metric.memory, 0.1f, 500, app1); tester.addMeasurements(Metric.disk, 0.1f, 500, app1); @@ -125,8 +138,8 @@ public class AutoscalingMaintainerTest { Instant lastMaintenanceTime = tester.clock().instant(); tester.maintainer().maintain(); assertEquals(lastMaintenanceTime.toEpochMilli(), tester.deployer().lastDeployTime(app1).get().toEpochMilli()); - assertEquals(2, tester.nodeMetricsDb().getEvents(app1).size()); - assertEquals(1, tester.nodeMetricsDb().getEvents(app1).get(1).generation()); + events = tester.nodeRepository().applications().get(app1).get().cluster(cluster1.id()).get().scalingEvents(); + assertEquals(2, events.get(0).generation()); } @Test diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/FailedExpirerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/FailedExpirerTest.java index 58a8edb4631..ceedb41ab31 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/FailedExpirerTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/FailedExpirerTest.java @@ -1,8 +1,10 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.provision.maintenance; +import com.yahoo.config.provision.ActivationContext; import com.yahoo.config.provision.ApplicationId; import com.yahoo.config.provision.ApplicationName; +import com.yahoo.config.provision.ApplicationTransaction; import com.yahoo.config.provision.Capacity; import com.yahoo.config.provision.ClusterResources; import com.yahoo.config.provision.ClusterSpec; @@ -330,7 +332,7 @@ public class FailedExpirerTest { (level, message) -> System.out.println(level + ": " + message) ); try (var lock = provisioner.lock(applicationId)) { NestedTransaction transaction = new NestedTransaction().add(new CuratorTransaction(curator)); - provisioner.activate(transaction, Set.copyOf(preparedNodes), lock); + provisioner.activate(Set.copyOf(preparedNodes), new ActivationContext(0), new ApplicationTransaction(lock, transaction)); transaction.commit(); } return this; diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/NodeFailTester.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/NodeFailTester.java index 5117a7b7397..824ebe40ea8 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/NodeFailTester.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/NodeFailTester.java @@ -1,7 +1,9 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.provision.maintenance; +import com.yahoo.config.provision.ActivationContext; import com.yahoo.config.provision.ApplicationId; +import com.yahoo.config.provision.ApplicationTransaction; import com.yahoo.config.provision.Capacity; import com.yahoo.config.provision.ClusterResources; import com.yahoo.config.provision.ClusterSpec; @@ -250,7 +252,7 @@ public class NodeFailTester { List<HostSpec> hosts = provisioner.prepare(applicationId, cluster, capacity, null); try (var lock = provisioner.lock(applicationId)) { NestedTransaction transaction = new NestedTransaction().add(new CuratorTransaction(curator)); - provisioner.activate(transaction, hosts, lock); + provisioner.activate(hosts, new ActivationContext(0), new ApplicationTransaction(lock, transaction)); transaction.commit(); } } diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/RebalancerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/RebalancerTest.java index 35c8a9a9251..21003324696 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/RebalancerTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/RebalancerTest.java @@ -2,6 +2,7 @@ package com.yahoo.vespa.hosted.provision.maintenance; import com.yahoo.config.provision.ApplicationId; +import com.yahoo.config.provision.ApplicationTransaction; import com.yahoo.config.provision.Capacity; import com.yahoo.config.provision.ClusterResources; import com.yahoo.config.provision.ClusterSpec; @@ -82,7 +83,8 @@ public class RebalancerTest { // --- Making the system stable enables rebalancing NestedTransaction tx = new NestedTransaction(); - tester.nodeRepository().deactivate(List.of(cpuSkewedNode), tx, new ProvisionLock(cpuApp, () -> {})); + tester.nodeRepository().deactivate(List.of(cpuSkewedNode), + new ApplicationTransaction(new ProvisionLock(cpuApp, () -> {}), tx)); tx.commit(); // ... if activation fails when trying, we clean up the state diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/RetiredExpirerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/RetiredExpirerTest.java index aba5810784b..bdae9d28fe2 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/RetiredExpirerTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/RetiredExpirerTest.java @@ -1,8 +1,10 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.provision.maintenance; +import com.yahoo.config.provision.ActivationContext; import com.yahoo.config.provision.ApplicationId; import com.yahoo.config.provision.ApplicationName; +import com.yahoo.config.provision.ApplicationTransaction; import com.yahoo.config.provision.Capacity; import com.yahoo.config.provision.ClusterResources; import com.yahoo.config.provision.ClusterSpec; diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/persistence/ApplicationSerializerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/persistence/ApplicationSerializerTest.java index 598831d1eeb..72f9e9597de 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/persistence/ApplicationSerializerTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/persistence/ApplicationSerializerTest.java @@ -7,8 +7,10 @@ import com.yahoo.config.provision.ClusterSpec; import com.yahoo.config.provision.NodeResources; import com.yahoo.vespa.hosted.provision.applications.Application; import com.yahoo.vespa.hosted.provision.applications.Cluster; +import com.yahoo.vespa.hosted.provision.applications.ScalingEvent; import org.junit.Test; +import java.time.Instant; import java.util.ArrayList; import java.util.List; import java.util.Optional; @@ -30,13 +32,19 @@ public class ApplicationSerializerTest { new ClusterResources( 8, 4, new NodeResources(1, 2, 3, 4)), new ClusterResources(12, 6, new NodeResources(3, 6, 21, 24)), Optional.empty(), - Optional.empty())); + Optional.empty(), + List.of())); + var minResources = new NodeResources(1, 2, 3, 4); clusters.add(new Cluster(ClusterSpec.Id.from("c2"), true, - new ClusterResources( 8, 4, new NodeResources(1, 2, 3, 4)), + new ClusterResources( 8, 4, minResources), new ClusterResources(14, 7, new NodeResources(3, 6, 21, 24)), Optional.of(new ClusterResources(20, 10, new NodeResources(0.5, 4, 14, 16))), - Optional.of(new ClusterResources(10, 5, new NodeResources(2, 4, 14, 16))))); + Optional.of(new ClusterResources(10, 5, new NodeResources(2, 4, 14, 16))), + List.of(new ScalingEvent(new ClusterResources(10, 5, minResources), + new ClusterResources(12, 6, minResources), + 7L, + Instant.ofEpochMilli(12345L))))); Application original = new Application(ApplicationId.from("myTenant", "myApplication", "myInstance"), clusters); @@ -56,6 +64,7 @@ public class ApplicationSerializerTest { assertEquals(originalCluster.maxResources(), serializedCluster.maxResources()); assertEquals(originalCluster.suggestedResources(), serializedCluster.suggestedResources()); assertEquals(originalCluster.targetResources(), serializedCluster.targetResources()); + assertEquals(originalCluster.scalingEvents(), serializedCluster.scalingEvents()); } } 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 4fae7cf0ab9..fb732c641b8 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 @@ -2,6 +2,7 @@ package com.yahoo.vespa.hosted.provision.provisioning; import com.yahoo.component.Version; +import com.yahoo.config.provision.ApplicationTransaction; import com.yahoo.config.provision.ClusterMembership; import com.yahoo.config.provision.ClusterSpec; import com.yahoo.config.provision.HostName; @@ -50,7 +51,6 @@ import static org.mockito.Mockito.when; @RunWith(Parameterized.class) public class InfraDeployerImplTest { - @Parameterized.Parameters(name = "application={0}") public static Iterable<Object[]> parameters() { return List.of( @@ -136,15 +136,15 @@ public class InfraDeployerImplTest { private void verifyActivated(String... hostnames) { verify(duperModelInfraApi).infraApplicationActivated( eq(application.getApplicationId()), eq(Stream.of(hostnames).map(HostName::from).collect(Collectors.toList()))); - ArgumentMatcher<ProvisionLock> lockMatcher = lock -> { - assertEquals(application.getApplicationId(), lock.application()); + ArgumentMatcher<ApplicationTransaction> transactionMatcher = t -> { + assertEquals(application.getApplicationId(), t.application()); return true; }; ArgumentMatcher<Collection<HostSpec>> hostsMatcher = hostSpecs -> { assertEquals(Set.of(hostnames), hostSpecs.stream().map(HostSpec::hostname).collect(Collectors.toSet())); return true; }; - verify(provisioner).activate(any(), argThat(hostsMatcher), argThat(lockMatcher)); + verify(provisioner).activate(argThat(hostsMatcher), any(), argThat(transactionMatcher)); } private Node addNode(int id, Node.State state, Optional<Version> wantedVespaVersion) { diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTester.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTester.java index 2a43b9f44f6..5acfc6f69d4 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTester.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTester.java @@ -2,8 +2,10 @@ package com.yahoo.vespa.hosted.provision.provisioning; import com.yahoo.component.Version; +import com.yahoo.config.provision.ActivationContext; import com.yahoo.config.provision.ApplicationId; import com.yahoo.config.provision.ApplicationName; +import com.yahoo.config.provision.ApplicationTransaction; import com.yahoo.config.provision.Capacity; import com.yahoo.config.provision.ClusterResources; import com.yahoo.config.provision.ClusterSpec; @@ -209,7 +211,7 @@ public class ProvisioningTester { try (var lock = provisioner.lock(application)) { NestedTransaction transaction = new NestedTransaction(); transaction.add(new CuratorTransaction(curator)); - provisioner.activate(transaction, hosts, lock); + provisioner.activate(hosts, new ActivationContext(0), new ApplicationTransaction(lock, transaction)); transaction.commit(); } assertEquals(toHostNames(hosts), toHostNames(nodeRepository.getNodes(application, Node.State.active))); @@ -239,7 +241,8 @@ public class ProvisioningTester { public void deactivate(ApplicationId applicationId) { try (var lock = nodeRepository.lock(applicationId)) { NestedTransaction deactivateTransaction = new NestedTransaction(); - nodeRepository.deactivate(deactivateTransaction, new ProvisionLock(applicationId, lock)); + nodeRepository.deactivate(new ApplicationTransaction(new ProvisionLock(applicationId, lock), + deactivateTransaction)); deactivateTransaction.commit(); } } |