diff options
author | Martin Polden <mpolden@mpolden.no> | 2023-12-28 13:53:11 +0100 |
---|---|---|
committer | Martin Polden <mpolden@mpolden.no> | 2023-12-29 09:28:43 +0100 |
commit | 6ac28a031f6f48d1a6423c04d1beaf0cb82f1e39 (patch) | |
tree | a758ddeea66db52305c50465257423532a1de904 /node-repository/src/test/java/com | |
parent | 05187585032925654086f74ea68b2f0f6d71a2f8 (diff) |
Skip upgrade when OS version is unavailable
Diffstat (limited to 'node-repository/src/test/java/com')
-rw-r--r-- | node-repository/src/test/java/com/yahoo/vespa/hosted/provision/os/OsVersionsTest.java | 44 |
1 files changed, 34 insertions, 10 deletions
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/os/OsVersionsTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/os/OsVersionsTest.java index 0be90dcb888..b7014fbd280 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/os/OsVersionsTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/os/OsVersionsTest.java @@ -18,6 +18,7 @@ import com.yahoo.vespa.hosted.provision.node.Allocation; import com.yahoo.vespa.hosted.provision.node.OsVersion; import com.yahoo.vespa.hosted.provision.node.Status; import com.yahoo.vespa.hosted.provision.provisioning.ProvisioningTester; +import com.yahoo.vespa.hosted.provision.testutils.MockHostProvisioner; import org.junit.Test; import java.time.Duration; @@ -41,7 +42,7 @@ public class OsVersionsTest { @Test public void upgrade() { - var versions = new OsVersions(tester.nodeRepository()); + var versions = new OsVersions(tester.nodeRepository(), Optional.ofNullable(tester.hostProvisioner())); provisionInfraApplication(10); Supplier<NodeList> hostNodes = () -> tester.nodeRepository().nodes().list().nodeType(NodeType.host); @@ -94,7 +95,7 @@ public class OsVersionsTest { public void max_active_upgrades() { int totalNodes = 20; int maxActiveUpgrades = 5; - var versions = new OsVersions(tester.nodeRepository(), Cloud.defaultCloud()); + var versions = new OsVersions(tester.nodeRepository(), Cloud.defaultCloud(), Optional.ofNullable(tester.hostProvisioner())); setMaxActiveUpgrades(maxActiveUpgrades); provisionInfraApplication(totalNodes); Supplier<NodeList> hostNodes = () -> tester.nodeRepository().nodes().list().state(Node.State.active).hosts(); @@ -140,7 +141,7 @@ public class OsVersionsTest { @Test public void newer_upgrade_aborts_upgrade_to_stale_version() { - var versions = new OsVersions(tester.nodeRepository()); + var versions = new OsVersions(tester.nodeRepository(), Optional.ofNullable(tester.hostProvisioner())); provisionInfraApplication(10); Supplier<NodeList> hostNodes = () -> tester.nodeRepository().nodes().list().hosts(); @@ -160,7 +161,7 @@ public class OsVersionsTest { @Test public void upgrade_and_downgrade_by_retiring() { int maxActiveUpgrades = 2; - var versions = new OsVersions(tester.nodeRepository(), Cloud.builder().dynamicProvisioning(true).build()); + var versions = new OsVersions(tester.nodeRepository(), Cloud.builder().dynamicProvisioning(true).build(), Optional.ofNullable(tester.hostProvisioner())); setMaxActiveUpgrades(maxActiveUpgrades); int hostCount = 10; // Provision hosts and children @@ -229,7 +230,7 @@ public class OsVersionsTest { @Test public void upgrade_by_retiring_everything_at_once() { - var versions = new OsVersions(tester.nodeRepository(), Cloud.builder().dynamicProvisioning(true).build()); + var versions = new OsVersions(tester.nodeRepository(), Cloud.builder().dynamicProvisioning(true).build(), Optional.ofNullable(tester.hostProvisioner())); setMaxActiveUpgrades(Integer.MAX_VALUE); int hostCount = 3; provisionInfraApplication(hostCount, NodeType.host); @@ -253,7 +254,7 @@ public class OsVersionsTest { @Test public void upgrade_by_rebuilding() { - var versions = new OsVersions(tester.nodeRepository(), Cloud.defaultCloud()); + var versions = new OsVersions(tester.nodeRepository(), Cloud.defaultCloud(), Optional.ofNullable(tester.hostProvisioner())); setMaxActiveUpgrades(1); int hostCount = 10; provisionInfraApplication(hostCount + 1); @@ -337,7 +338,8 @@ public class OsVersionsTest { .dynamicProvisioning(true) .name(CloudName.AWS) .account(CloudAccount.from("000000000000")) - .build()); + .build(), + Optional.ofNullable(tester.hostProvisioner())); provisionInfraApplication(hostCount, NodeType.host, NodeResources.StorageType.remote, NodeResources.Architecture.x86_64); Supplier<NodeList> hostNodes = () -> tester.nodeRepository().nodes().list().nodeType(NodeType.host); @@ -382,7 +384,7 @@ public class OsVersionsTest { @Test public void upgrade_by_rebuilding_multiple_host_types() { setMaxActiveUpgrades(1); - var versions = new OsVersions(tester.nodeRepository(), Cloud.defaultCloud()); + var versions = new OsVersions(tester.nodeRepository(), Cloud.defaultCloud(), Optional.ofNullable(tester.hostProvisioner())); int hostCount = 3; provisionInfraApplication(hostCount, NodeType.host); provisionInfraApplication(hostCount, NodeType.confighost); @@ -415,7 +417,7 @@ public class OsVersionsTest { @Test public void upgrade_by_rebuilding_is_limited_by_stateful_clusters() { setMaxActiveUpgrades(3); - var versions = new OsVersions(tester.nodeRepository(), Cloud.defaultCloud()); + var versions = new OsVersions(tester.nodeRepository(), Cloud.defaultCloud(), Optional.ofNullable(tester.hostProvisioner())); int hostCount = 5; ApplicationId app1 = ApplicationId.from("t1", "a1", "i1"); ApplicationId app2 = ApplicationId.from("t2", "a2", "i2"); @@ -493,7 +495,7 @@ public class OsVersionsTest { public void upgrade_by_rebuilding_limits_infrastructure_host() { int hostCount = 3; setMaxActiveUpgrades(hostCount); - var versions = new OsVersions(tester.nodeRepository(), Cloud.defaultCloud()); + var versions = new OsVersions(tester.nodeRepository(), Cloud.defaultCloud(), Optional.ofNullable(tester.hostProvisioner())); provisionInfraApplication(hostCount, NodeType.proxyhost); Supplier<NodeList> hosts = () -> tester.nodeRepository().nodes().list().nodeType(NodeType.proxyhost); @@ -515,6 +517,28 @@ public class OsVersionsTest { } } + @Test + public void skips_unavailable_version() { + MockHostProvisioner hostProvisioner = new MockHostProvisioner(List.of()); + ProvisioningTester tester = new ProvisioningTester.Builder().dynamicProvisioning(true, false).hostProvisioner(hostProvisioner).build(); + OsVersions versions = new OsVersions(tester.nodeRepository(), Cloud.builder().dynamicProvisioning(true).build(), Optional.of(hostProvisioner)); + tester.makeReadyHosts(1, new NodeResources(2,4,8,100)); + tester.activateTenantHosts(); + Supplier<Node> host = () -> tester.nodeRepository().nodes().list().nodeType(NodeType.host).first().get(); + tester.clock().advance(Duration.ofDays(1)); + + hostProvisioner.addOsVersion(Version.fromString("7.0")); + Version version0 = Version.fromString("8.0"); + versions.setTarget(NodeType.host, version0, false); + versions.resumeUpgradeOf(NodeType.host, true); + assertTrue("Upgrade is not triggered to unavailable version", host.get().status().osVersion().wanted().isEmpty()); + + // Version becomes available + hostProvisioner.addOsVersion(version0); + versions.resumeUpgradeOf(NodeType.host, true); + assertEquals("Host upgrade is triggered", version0, host.get().status().osVersion().wanted().get()); + } + private void setMaxActiveUpgrades(int max) { tester.flagSource().withIntFlag(PermanentFlags.MAX_OS_UPGRADES.id(), max); } |