aboutsummaryrefslogtreecommitdiffstats
path: root/node-repository/src/test/java/com
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2022-11-14 14:50:16 +0100
committerMartin Polden <mpolden@mpolden.no>2022-11-15 14:03:57 +0100
commit1b538760a2e23a2ca81bda94b6bda26eab40a191 (patch)
tree792a128ac29159faf6f31478cfb4e550733054fd /node-repository/src/test/java/com
parent4e3929bf1afe86916ada5bd05117e47dcfd8be24 (diff)
Stop using OS upgrade budget
Diffstat (limited to 'node-repository/src/test/java/com')
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/NodeRebooterTest.java2
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/OsUpgradeActivatorTest.java4
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/os/OsVersionsTest.java85
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/persistence/OsVersionChangeSerializerTest.java9
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/NodesV2ApiTest.java37
5 files changed, 50 insertions, 87 deletions
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/NodeRebooterTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/NodeRebooterTest.java
index 84270a54218..5613f1961f8 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/NodeRebooterTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/NodeRebooterTest.java
@@ -126,7 +126,7 @@ public class NodeRebooterTest {
/** Schedule OS upgrade for all host nodes */
private void scheduleOsUpgrade(NodeRepository nodeRepository) {
- nodeRepository.osVersions().setTarget(NodeType.host, Version.fromString("7.1"), Duration.ZERO, false);
+ nodeRepository.osVersions().setTarget(NodeType.host, Version.fromString("7.1"), false);
}
/** Simulate completion of an OS upgrade */
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/OsUpgradeActivatorTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/OsUpgradeActivatorTest.java
index ff2ab44ad4a..a0c9e2fc530 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/OsUpgradeActivatorTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/OsUpgradeActivatorTest.java
@@ -57,8 +57,8 @@ public class OsUpgradeActivatorTest {
// New OS target version is set
var osVersion0 = Version.fromString("8.0");
- osVersions.setTarget(NodeType.host, osVersion0, Duration.ZERO, false);
- osVersions.setTarget(NodeType.confighost, osVersion0, Duration.ZERO, false);
+ osVersions.setTarget(NodeType.host, osVersion0, false);
+ osVersions.setTarget(NodeType.confighost, osVersion0, false);
// New OS version is activated as there is no ongoing Vespa upgrade
osUpgradeActivator.maintain();
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 ebd37c3fd20..83b4e70c6f0 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
@@ -10,7 +10,6 @@ import com.yahoo.config.provision.ClusterSpec;
import com.yahoo.config.provision.HostSpec;
import com.yahoo.config.provision.NodeResources;
import com.yahoo.config.provision.NodeType;
-import com.yahoo.test.ManualClock;
import com.yahoo.vespa.flags.Flags;
import com.yahoo.vespa.flags.PermanentFlags;
import com.yahoo.vespa.hosted.provision.Node;
@@ -23,7 +22,6 @@ import com.yahoo.vespa.hosted.provision.provisioning.ProvisioningTester;
import org.junit.Test;
import java.time.Duration;
-import java.time.temporal.ChronoUnit;
import java.util.Comparator;
import java.util.List;
import java.util.Optional;
@@ -53,7 +51,7 @@ public class OsVersionsTest {
// Upgrade OS
assertTrue("No versions set", versions.readChange().targets().isEmpty());
var version1 = Version.fromString("7.1");
- versions.setTarget(NodeType.host, version1, Duration.ZERO, false);
+ versions.setTarget(NodeType.host, version1, false);
assertEquals(version1, versions.targetFor(NodeType.host).get());
assertTrue("Per-node wanted OS version remains unset", hostNodes.get().stream().allMatch(node -> node.status().osVersion().wanted().isEmpty()));
@@ -63,7 +61,7 @@ public class OsVersionsTest {
// Upgrade OS again
var version2 = Version.fromString("7.2");
- versions.setTarget(NodeType.host, version2, Duration.ZERO, false);
+ versions.setTarget(NodeType.host, version2, false);
assertEquals(version2, versions.targetFor(NodeType.host).get());
// Resume upgrade
@@ -81,12 +79,12 @@ public class OsVersionsTest {
// Downgrading fails
try {
- versions.setTarget(NodeType.host, version1, Duration.ZERO, false);
+ versions.setTarget(NodeType.host, version1, false);
fail("Expected exception");
} catch (IllegalArgumentException ignored) {}
// Forcing downgrade succeeds
- versions.setTarget(NodeType.host, version1, Duration.ZERO, true);
+ versions.setTarget(NodeType.host, version1, true);
assertEquals(version1, versions.targetFor(NodeType.host).get());
// Target can be removed
@@ -118,7 +116,7 @@ public class OsVersionsTest {
// Set target
var version1 = Version.fromString("7.1");
- versions.setTarget(NodeType.host, version1, Duration.ZERO, false);
+ versions.setTarget(NodeType.host, version1, false);
assertEquals(version1, versions.targetFor(NodeType.host).get());
// Activate target
@@ -155,7 +153,7 @@ public class OsVersionsTest {
// Trigger upgrade to next version
var version2 = Version.fromString("7.2");
- versions.setTarget(NodeType.host, version2, Duration.ZERO, false);
+ versions.setTarget(NodeType.host, version2, false);
versions.resumeUpgradeOf(NodeType.host, true);
// Wanted version is changed to newest target for all nodes
@@ -164,8 +162,8 @@ public class OsVersionsTest {
@Test
public void upgrade_by_retiring() {
- var versions = new OsVersions(tester.nodeRepository(), Cloud.builder().dynamicProvisioning(true).build(), Integer.MAX_VALUE);
- var clock = (ManualClock) tester.nodeRepository().clock();
+ int maxActiveUpgrades = 2;
+ var versions = new OsVersions(tester.nodeRepository(), Cloud.builder().dynamicProvisioning(true).build(), maxActiveUpgrades);
int hostCount = 10;
// Provision hosts and children
List<Node> hosts = provisionInfraApplication(hostCount);
@@ -176,40 +174,28 @@ public class OsVersionsTest {
Supplier<NodeList> hostNodes = () -> tester.nodeRepository().nodes().list()
.hosts()
.not().state(Node.State.deprovisioned);
- tester.clock().advance(Duration.ofDays(31)); // Let grace period pass
+ tester.clock().advance(Duration.ofDays(2)); // Let grace period pass
// Target is set and upgrade started
var version1 = Version.fromString("7.1");
- Duration initialBudget = Duration.ofHours(24);
- versions.setTarget(NodeType.host, version1, initialBudget, false);
- Duration totalBudget = Duration.ofHours(12);
- Duration nodeBudget = totalBudget.dividedBy(hostCount);
- versions.setTarget(NodeType.host, version1, totalBudget,false);
+ versions.setTarget(NodeType.host, version1, false);
versions.resumeUpgradeOf(NodeType.host, true);
// One host is deprovisioning
- assertEquals(1, hostNodes.get().deprovisioning().size());
+ assertEquals(maxActiveUpgrades, hostNodes.get().deprovisioning().size());
- // Nothing happens on next resume as first host has not spent its budget
+ // Nothing happens on next resume as first batch has not completed upgrade
versions.resumeUpgradeOf(NodeType.host, true);
NodeList nodesDeprovisioning = hostNodes.get().deprovisioning();
- assertEquals(1, nodesDeprovisioning.size());
+ assertEquals(maxActiveUpgrades, nodesDeprovisioning.size());
assertEquals(2, deprovisioningChildrenOf(nodesDeprovisioning.asList().get(0)).size());
+ completeReprovisionOf(nodesDeprovisioning.asList());
- // Budget has been spent and another host is retired
- clock.advance(nodeBudget);
- versions.resumeUpgradeOf(NodeType.host, true);
- assertEquals(2, hostNodes.get().deprovisioning().size());
-
- // Two nodes complete their upgrade by being reprovisioned
- completeReprovisionOf(hostNodes.get().deprovisioning().asList());
- assertEquals(2, hostNodes.get().onOsVersion(version1).size());
- // The remaining hosts complete their upgrade
- for (int i = 0; i < hostCount - 2; i++) {
- clock.advance(nodeBudget);
+ // Remaining hosts complete upgrades one by one
+ for (int i = 0; i < hostCount - 2; i += maxActiveUpgrades) {
versions.resumeUpgradeOf(NodeType.host, true);
nodesDeprovisioning = hostNodes.get().deprovisioning();
- assertEquals(1, nodesDeprovisioning.size());
+ assertEquals(maxActiveUpgrades, nodesDeprovisioning.size());
assertEquals(2, deprovisioningChildrenOf(nodesDeprovisioning.asList().get(0)).size());
completeReprovisionOf(nodesDeprovisioning.asList());
}
@@ -217,17 +203,10 @@ public class OsVersionsTest {
// All hosts upgraded and none are deprovisioning
assertEquals(hostCount, hostNodes.get().onOsVersion(version1).not().deprovisioning().size());
assertEquals(hostCount, tester.nodeRepository().nodes().list(Node.State.deprovisioned).size());
- var lastRetiredAt = clock.instant().truncatedTo(ChronoUnit.MILLIS);
// Resuming after everything has upgraded does nothing
versions.resumeUpgradeOf(NodeType.host, true);
assertEquals(0, hostNodes.get().deprovisioning().size());
-
- // Another upgrade is triggered. Last retirement time is preserved
- clock.advance(Duration.ofDays(1));
- var version2 = Version.fromString("7.2");
- versions.setTarget(NodeType.host, version2, totalBudget, false);
- assertEquals(lastRetiredAt, versions.readChange().targets().get(NodeType.host).lastRetiredAt().get());
}
@Test
@@ -238,11 +217,11 @@ public class OsVersionsTest {
Supplier<NodeList> hostNodes = () -> tester.nodeRepository().nodes().list()
.nodeType(NodeType.confighost)
.not().state(Node.State.deprovisioned);
- tester.clock().advance(Duration.ofDays(31)); // Let grace period pass
+ tester.clock().advance(Duration.ofDays(2)); // Let grace period pass
- // Target is set with zero budget and upgrade started
+ // Target is set and upgrade started
var version1 = Version.fromString("7.1");
- versions.setTarget(NodeType.confighost, version1, Duration.ZERO,false);
+ versions.setTarget(NodeType.confighost, version1, false);
for (int i = 0; i < hostCount; i++) {
versions.resumeUpgradeOf(NodeType.confighost, true);
}
@@ -264,7 +243,7 @@ public class OsVersionsTest {
// All hosts upgrade to first version. Upgrades are delegated
var version0 = Version.fromString("7.0");
- versions.setTarget(NodeType.host, version0, Duration.ZERO, false);
+ versions.setTarget(NodeType.host, version0, false);
setCurrentVersion(hostNodes.get().asList(), version0);
// One host is failed out
@@ -273,7 +252,7 @@ public class OsVersionsTest {
// Target is set for new major version. Upgrade mechanism switches to rebuilding
var version1 = Version.fromString("8.0");
- versions.setTarget(NodeType.host, version1, Duration.ZERO, false);
+ versions.setTarget(NodeType.host, version1, false);
versions.resumeUpgradeOf(NodeType.host, true);
// One host starts rebuilding
@@ -309,7 +288,7 @@ public class OsVersionsTest {
// Next version is within same major. Upgrade mechanism switches to delegated
var version2 = Version.fromString("8.1");
- versions.setTarget(NodeType.host, version2, Duration.ZERO, false);
+ versions.setTarget(NodeType.host, version2, false);
versions.resumeUpgradeOf(NodeType.host, true);
NodeList nonFailingHosts = hostNodes.get().except(failedHost);
assertTrue("Wanted version is set", nonFailingHosts.stream()
@@ -348,7 +327,7 @@ public class OsVersionsTest {
// New target is set
int hostsRebuilt = 0;
var version1 = Version.fromString("8.0");
- versions.setTarget(NodeType.host, version1, Duration.ZERO, false);
+ versions.setTarget(NodeType.host, version1, false);
versions.resumeUpgradeOf(NodeType.host, true);
// First batch of hosts start rebuilding
@@ -394,14 +373,14 @@ public class OsVersionsTest {
// All hosts upgrade to first version. Upgrades are delegated
var version0 = Version.fromString("7.0");
- versions.setTarget(NodeType.host, version0, Duration.ZERO, false);
- versions.setTarget(NodeType.confighost, version0, Duration.ZERO, false);
+ versions.setTarget(NodeType.host, version0, false);
+ versions.setTarget(NodeType.confighost, version0, false);
setCurrentVersion(hosts.get().asList(), version0);
// Target is set for new major version
var version1 = Version.fromString("8.0");
- versions.setTarget(NodeType.host, version1, Duration.ZERO, false);
- versions.setTarget(NodeType.confighost, version1, Duration.ZERO, false);
+ versions.setTarget(NodeType.host, version1, false);
+ versions.setTarget(NodeType.confighost, version1, false);
// One host of each type is upgraded
for (int i = 0; i < hostCount; i++) {
@@ -429,12 +408,12 @@ public class OsVersionsTest {
// All hosts are on initial version
var version0 = Version.fromString("7.0");
- versions.setTarget(NodeType.host, version0, Duration.ZERO, false);
+ versions.setTarget(NodeType.host, version0, false);
setCurrentVersion(hosts.get().asList(), version0);
// Target is set for new major version
var version1 = Version.fromString("8.0");
- versions.setTarget(NodeType.host, version1, Duration.ZERO, false);
+ versions.setTarget(NodeType.host, version1, false);
// Upgrades 1 host per stateful cluster and 1 empty host
versions.resumeUpgradeOf(NodeType.host, true);
@@ -502,12 +481,12 @@ public class OsVersionsTest {
// All hosts are on initial version
var version0 = Version.fromString("7.0");
- versions.setTarget(NodeType.proxyhost, version0, Duration.ZERO, false);
+ versions.setTarget(NodeType.proxyhost, version0, false);
setCurrentVersion(hosts.get().asList(), version0);
// Target is set for new major version
var version1 = Version.fromString("8.0");
- versions.setTarget(NodeType.proxyhost, version1, Duration.ZERO, false);
+ versions.setTarget(NodeType.proxyhost, version1, false);
// Upgrades 1 infrastructure host at a time
for (int i = 0; i < hostCount; i++) {
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/persistence/OsVersionChangeSerializerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/persistence/OsVersionChangeSerializerTest.java
index 3bcecdbfeb3..b68df92cf3e 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/persistence/OsVersionChangeSerializerTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/persistence/OsVersionChangeSerializerTest.java
@@ -7,10 +7,7 @@ import com.yahoo.vespa.hosted.provision.os.OsVersionChange;
import com.yahoo.vespa.hosted.provision.os.OsVersionTarget;
import org.junit.Test;
-import java.time.Duration;
-import java.time.Instant;
import java.util.Map;
-import java.util.Optional;
import static org.junit.Assert.assertEquals;
@@ -22,9 +19,9 @@ public class OsVersionChangeSerializerTest {
@Test
public void serialization() {
var change = new OsVersionChange(Map.of(
- NodeType.host, new OsVersionTarget(NodeType.host, Version.fromString("1.2.3"), Duration.ofHours(1), Optional.of(Instant.ofEpochMilli(123))),
- NodeType.proxyhost, new OsVersionTarget(NodeType.proxyhost, Version.fromString("4.5.6"), Duration.ofHours(2), Optional.empty()),
- NodeType.confighost, new OsVersionTarget(NodeType.confighost, Version.fromString("7.8.9"), Duration.ZERO, Optional.of(Instant.ofEpochMilli(456)))
+ NodeType.host, new OsVersionTarget(NodeType.host, Version.fromString("1.2.3")),
+ NodeType.proxyhost, new OsVersionTarget(NodeType.proxyhost, Version.fromString("4.5.6")),
+ NodeType.confighost, new OsVersionTarget(NodeType.confighost, Version.fromString("7.8.9"))
));
var serialized = OsVersionChangeSerializer.fromJson(OsVersionChangeSerializer.toJson(change));
assertEquals(serialized, change);
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/NodesV2ApiTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/NodesV2ApiTest.java
index a9179427210..58a810bbff8 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/NodesV2ApiTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/NodesV2ApiTest.java
@@ -704,13 +704,13 @@ public class NodesV2ApiTest {
// Upgrade OS for confighost and host
assertResponse(new Request("http://localhost:8080/nodes/v2/upgrade/confighost",
- Utf8.toBytes("{\"osVersion\": \"7.5.2\", \"upgradeBudget\": \"PT0S\"}"),
+ Utf8.toBytes("{\"osVersion\": \"7.5.2\"}"),
Request.Method.PATCH),
- "{\"message\":\"Set osVersion to 7.5.2, upgradeBudget to PT0S for nodes of type confighost\"}");
+ "{\"message\":\"Set osVersion to 7.5.2 for nodes of type confighost\"}");
assertResponse(new Request("http://localhost:8080/nodes/v2/upgrade/host",
- Utf8.toBytes("{\"osVersion\": \"7.5.2\", \"upgradeBudget\": \"PT0S\"}"),
+ Utf8.toBytes("{\"osVersion\": \"7.5.2\"}"),
Request.Method.PATCH),
- "{\"message\":\"Set osVersion to 7.5.2, upgradeBudget to PT0S for nodes of type host\"}");
+ "{\"message\":\"Set osVersion to 7.5.2 for nodes of type host\"}");
// OS versions are set
assertResponse(new Request("http://localhost:8080/nodes/v2/upgrade/"),
@@ -718,29 +718,29 @@ public class NodesV2ApiTest {
// Upgrade OS and Vespa together
assertResponse(new Request("http://localhost:8080/nodes/v2/upgrade/confighost",
- Utf8.toBytes("{\"version\": \"6.124.42\", \"osVersion\": \"7.5.2\", \"upgradeBudget\": \"PT0S\"}"),
+ Utf8.toBytes("{\"version\": \"6.124.42\", \"osVersion\": \"7.5.2\"}"),
Request.Method.PATCH),
- "{\"message\":\"Set version to 6.124.42, osVersion to 7.5.2, upgradeBudget to PT0S for nodes of type confighost\"}");
+ "{\"message\":\"Set version to 6.124.42, osVersion to 7.5.2 for nodes of type confighost\"}");
// Attempt to upgrade unsupported node type
tester.assertResponse(new Request("http://localhost:8080/nodes/v2/upgrade/config",
- Utf8.toBytes("{\"osVersion\": \"7.5.2\", \"upgradeBudget\": \"PT0S\"}"),
+ Utf8.toBytes("{\"osVersion\": \"7.5.2\"}"),
Request.Method.PATCH),
400,
"{\"error-code\":\"BAD_REQUEST\",\"message\":\"Node type 'config' does not support OS upgrades\"}");
// Attempt to downgrade OS
tester.assertResponse(new Request("http://localhost:8080/nodes/v2/upgrade/confighost",
- Utf8.toBytes("{\"osVersion\": \"7.4.2\", \"upgradeBudget\": \"PT0S\"}"),
+ Utf8.toBytes("{\"osVersion\": \"7.4.2\"}"),
Request.Method.PATCH),
400,
"{\"error-code\":\"BAD_REQUEST\",\"message\":\"Cannot set target OS version to 7.4.2 without setting 'force', as it's lower than the current version: 7.5.2\"}");
// Downgrading OS with force succeeds
assertResponse(new Request("http://localhost:8080/nodes/v2/upgrade/confighost",
- Utf8.toBytes("{\"osVersion\": \"7.4.2\", \"force\": true, \"upgradeBudget\": \"PT0S\"}"),
+ Utf8.toBytes("{\"osVersion\": \"7.4.2\", \"force\": true}"),
Request.Method.PATCH),
- "{\"message\":\"Set osVersion to 7.4.2, upgradeBudget to PT0S for nodes of type confighost\"}");
+ "{\"message\":\"Set osVersion to 7.4.2 for nodes of type confighost\"}");
// Current target is considered bad, remove it
tester.assertResponse(new Request("http://localhost:8080/nodes/v2/upgrade/confighost",
@@ -754,9 +754,9 @@ public class NodesV2ApiTest {
public void test_os_version() throws Exception {
// Schedule OS upgrade
assertResponse(new Request("http://localhost:8080/nodes/v2/upgrade/host",
- Utf8.toBytes("{\"osVersion\": \"7.5.2\", \"upgradeBudget\": \"PT0S\"}"),
+ Utf8.toBytes("{\"osVersion\": \"7.5.2\"}"),
Request.Method.PATCH),
- "{\"message\":\"Set osVersion to 7.5.2, upgradeBudget to PT0S for nodes of type host\"}");
+ "{\"message\":\"Set osVersion to 7.5.2 for nodes of type host\"}");
var nodeRepository = (NodeRepository) tester.container().components().getComponent(MockNodeRepository.class.getName());
@@ -797,19 +797,6 @@ public class NodesV2ApiTest {
"{\"url\":\"http://localhost:8080/nodes/v2/node/dockerhost2.yahoo.com\"}," +
"{\"url\":\"http://localhost:8080/nodes/v2/node/dockerhost1.yahoo.com\"}" +
"]}");
-
- // Schedule OS upgrade with budget
- assertResponse(new Request("http://localhost:8080/nodes/v2/upgrade/host",
- Utf8.toBytes("{\"osVersion\": \"7.42.1\", \"upgradeBudget\": \"PT24H\"}"),
- Request.Method.PATCH),
- "{\"message\":\"Set osVersion to 7.42.1, upgradeBudget to PT24H for nodes of type host\"}");
-
- // Invalid budget
- tester.assertResponse(new Request("http://localhost:8080/nodes/v2/upgrade/host",
- Utf8.toBytes("{\"osVersion\": \"7.42.1\", \"upgradeBudget\": \"foo\"}"),
- Request.Method.PATCH),
- 400,
- "{\"error-code\":\"BAD_REQUEST\",\"message\":\"Invalid duration 'foo': Text cannot be parsed to a Duration\"}");
}
@Test