aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorValerij Fredriksen <freva@users.noreply.github.com>2022-10-07 11:28:14 +0200
committerGitHub <noreply@github.com>2022-10-07 11:28:14 +0200
commit7cb5817e50e61a7cfefd6cac449134b13b0dbdc7 (patch)
tree019dc596746643743644def03ef38255c37d0767
parent7438b33d2447f5348e25c18160a592924130ee25 (diff)
parentf2361c82dda7cf2b51556ce2f1e2b8e4e0a36804 (diff)
Merge pull request #24353 from vespa-engine/mpolden/restrict-cloud
Limit soft rebuilds to supported cloud
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/os/OsVersions.java20
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/os/OsVersionsTest.java18
2 files changed, 21 insertions, 17 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/os/OsVersions.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/os/OsVersions.java
index 89fdf9d4b2a..91219ed0ce2 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/os/OsVersions.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/os/OsVersions.java
@@ -2,6 +2,8 @@
package com.yahoo.vespa.hosted.provision.os;
import com.yahoo.component.Version;
+import com.yahoo.config.provision.Cloud;
+import com.yahoo.config.provision.CloudName;
import com.yahoo.config.provision.NodeType;
import com.yahoo.vespa.curator.Lock;
import com.yahoo.vespa.flags.BooleanFlag;
@@ -38,20 +40,20 @@ public class OsVersions {
private final NodeRepository nodeRepository;
private final CuratorDatabaseClient db;
- private final boolean dynamicProvisioning;
private final int maxDelegatedUpgrades;
private final BooleanFlag softRebuildFlag;
+ private final Cloud cloud;
public OsVersions(NodeRepository nodeRepository) {
- this(nodeRepository, nodeRepository.zone().getCloud().dynamicProvisioning(), MAX_DELEGATED_UPGRADES);
+ this(nodeRepository, nodeRepository.zone().getCloud(), MAX_DELEGATED_UPGRADES);
}
- OsVersions(NodeRepository nodeRepository, boolean dynamicProvisioning, int maxDelegatedUpgrades) {
+ OsVersions(NodeRepository nodeRepository, Cloud cloud, int maxDelegatedUpgrades) {
this.nodeRepository = Objects.requireNonNull(nodeRepository);
this.db = nodeRepository.database();
- this.dynamicProvisioning = dynamicProvisioning;
this.maxDelegatedUpgrades = maxDelegatedUpgrades;
this.softRebuildFlag = Flags.SOFT_REBUILD.bindTo(nodeRepository.flagSource());
+ this.cloud = Objects.requireNonNull(cloud);
// Read and write all versions to make sure they are stored in the latest version of the serialized format
try (var lock = db.lockOsVersionChange()) {
@@ -141,13 +143,13 @@ public class OsVersions {
/** Returns the upgrader to use when upgrading given node type to target */
private OsUpgrader chooseUpgrader(NodeType nodeType, Optional<Version> target) {
- if (dynamicProvisioning) {
- boolean softRebuild = softRebuildFlag.value();
- RetiringOsUpgrader retiringOsUpgrader = new RetiringOsUpgrader(nodeRepository, softRebuild);
- if (softRebuild) {
+ if (cloud.dynamicProvisioning()) {
+ boolean canSoftRebuild = cloud.name().equals(CloudName.AWS) && softRebuildFlag.value();
+ RetiringOsUpgrader retiringOsUpgrader = new RetiringOsUpgrader(nodeRepository, canSoftRebuild);
+ if (canSoftRebuild) {
// If soft rebuild is enabled, we can use RebuildingOsUpgrader for hosts with remote storage.
// RetiringOsUpgrader is then only used for hosts with local storage.
- return new CompositeOsUpgrader(List.of(new RebuildingOsUpgrader(nodeRepository, softRebuild),
+ return new CompositeOsUpgrader(List.of(new RebuildingOsUpgrader(nodeRepository, canSoftRebuild),
retiringOsUpgrader));
}
return retiringOsUpgrader;
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 4d75b8a5acc..adcd40866d0 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
@@ -3,6 +3,8 @@ package com.yahoo.vespa.hosted.provision.os;
import com.yahoo.component.Version;
import com.yahoo.config.provision.ApplicationId;
+import com.yahoo.config.provision.Cloud;
+import com.yahoo.config.provision.CloudName;
import com.yahoo.config.provision.ClusterSpec;
import com.yahoo.config.provision.HostSpec;
import com.yahoo.config.provision.NodeResources;
@@ -96,7 +98,7 @@ public class OsVersionsTest {
public void max_active_upgrades() {
int totalNodes = 20;
int maxActiveUpgrades = 5;
- var versions = new OsVersions(tester.nodeRepository(), false, maxActiveUpgrades);
+ var versions = new OsVersions(tester.nodeRepository(), Cloud.defaultCloud(), maxActiveUpgrades);
provisionInfraApplication(totalNodes);
Supplier<NodeList> hostNodes = () -> tester.nodeRepository().nodes().list().state(Node.State.active).hosts();
@@ -161,7 +163,7 @@ public class OsVersionsTest {
@Test
public void upgrade_by_retiring() {
- var versions = new OsVersions(tester.nodeRepository(), true, Integer.MAX_VALUE);
+ var versions = new OsVersions(tester.nodeRepository(), Cloud.builder().dynamicProvisioning(true).build(), Integer.MAX_VALUE);
var clock = (ManualClock) tester.nodeRepository().clock();
int hostCount = 10;
// Provision hosts and children
@@ -229,7 +231,7 @@ public class OsVersionsTest {
@Test
public void upgrade_by_retiring_everything_at_once() {
- var versions = new OsVersions(tester.nodeRepository(), true, Integer.MAX_VALUE);
+ var versions = new OsVersions(tester.nodeRepository(), Cloud.builder().dynamicProvisioning(true).build(), Integer.MAX_VALUE);
int hostCount = 3;
provisionInfraApplication(hostCount, infraApplication, NodeType.confighost);
Supplier<NodeList> hostNodes = () -> tester.nodeRepository().nodes().list()
@@ -254,7 +256,7 @@ public class OsVersionsTest {
@Test
public void upgrade_by_rebuilding() {
tester.flagSource().withIntFlag(PermanentFlags.MAX_REBUILDS.id(), 1);
- var versions = new OsVersions(tester.nodeRepository(), false, Integer.MAX_VALUE);
+ var versions = new OsVersions(tester.nodeRepository(), Cloud.defaultCloud(), Integer.MAX_VALUE);
int hostCount = 10;
provisionInfraApplication(hostCount + 1);
Supplier<NodeList> hostNodes = () -> tester.nodeRepository().nodes().list().nodeType(NodeType.host);
@@ -333,7 +335,7 @@ public class OsVersionsTest {
tester.flagSource().withIntFlag(PermanentFlags.MAX_REBUILDS.id(), maxRebuilds);
tester.flagSource().withBooleanFlag(Flags.SOFT_REBUILD.id(), softRebuild);
- var versions = new OsVersions(tester.nodeRepository(), true, Integer.MAX_VALUE);
+ var versions = new OsVersions(tester.nodeRepository(), Cloud.builder().dynamicProvisioning(true).name(CloudName.AWS).build(), Integer.MAX_VALUE);
provisionInfraApplication(hostCount, infraApplication, NodeType.host, NodeResources.StorageType.remote);
Supplier<NodeList> hostNodes = () -> tester.nodeRepository().nodes().list().nodeType(NodeType.host);
@@ -378,7 +380,7 @@ public class OsVersionsTest {
@Test
public void upgrade_by_rebuilding_multiple_host_types() {
tester.flagSource().withIntFlag(PermanentFlags.MAX_REBUILDS.id(), 1);
- var versions = new OsVersions(tester.nodeRepository(), false, Integer.MAX_VALUE);
+ var versions = new OsVersions(tester.nodeRepository(), Cloud.defaultCloud(), Integer.MAX_VALUE);
int hostCount = 3;
provisionInfraApplication(hostCount, infraApplication, NodeType.host);
provisionInfraApplication(hostCount, ApplicationId.from("hosted-vespa", "confighost", "default"), NodeType.confighost);
@@ -411,7 +413,7 @@ public class OsVersionsTest {
@Test
public void upgrade_by_rebuilding_is_limited_by_stateful_clusters() {
tester.flagSource().withIntFlag(PermanentFlags.MAX_REBUILDS.id(), 3);
- var versions = new OsVersions(tester.nodeRepository(), false, Integer.MAX_VALUE);
+ var versions = new OsVersions(tester.nodeRepository(), Cloud.defaultCloud(), Integer.MAX_VALUE);
int hostCount = 5;
ApplicationId app1 = ApplicationId.from("t1", "a1", "i1");
ApplicationId app2 = ApplicationId.from("t2", "a2", "i2");
@@ -489,7 +491,7 @@ public class OsVersionsTest {
public void upgrade_by_rebuilding_limits_infrastructure_host() {
int hostCount = 3;
tester.flagSource().withIntFlag(PermanentFlags.MAX_REBUILDS.id(), hostCount);
- var versions = new OsVersions(tester.nodeRepository(), false, Integer.MAX_VALUE);
+ var versions = new OsVersions(tester.nodeRepository(), Cloud.defaultCloud(), Integer.MAX_VALUE);
provisionInfraApplication(hostCount, infraApplication, NodeType.proxyhost);
Supplier<NodeList> hosts = () -> tester.nodeRepository().nodes().list().nodeType(NodeType.proxyhost);