summaryrefslogtreecommitdiffstats
path: root/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/DynamicProvisioningMaintainer.java
diff options
context:
space:
mode:
Diffstat (limited to 'node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/DynamicProvisioningMaintainer.java')
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/DynamicProvisioningMaintainer.java15
1 files changed, 15 insertions, 0 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/DynamicProvisioningMaintainer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/DynamicProvisioningMaintainer.java
index 5ffadd806d5..5f43d80b87a 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/DynamicProvisioningMaintainer.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/DynamicProvisioningMaintainer.java
@@ -79,6 +79,7 @@ public class DynamicProvisioningMaintainer extends NodeRepositoryMaintainer {
NodeList nodes = nodeRepository().nodes().list();
resumeProvisioning(nodes);
convergeToCapacity(nodes);
+ replaceRootDisk(nodes);
return 1.0;
}
@@ -151,6 +152,20 @@ public class DynamicProvisioningMaintainer extends NodeRepositoryMaintainer {
});
}
+ /** Replace the root disk of hosts that have requested soft-rebuild */
+ private void replaceRootDisk(NodeList nodes) {
+ NodeList softRebuildingHosts = nodes.rebuilding(true);
+ for (var host : softRebuildingHosts) {
+ Optional<NodeMutex> optionalMutex = nodeRepository().nodes().lockAndGet(host, Optional.of(Duration.ofSeconds(10)));
+ try (NodeMutex mutex = optionalMutex.get()) {
+ Node updatedNode = hostProvisioner.replaceRootDisk(host);
+ if (!updatedNode.status().wantToRebuild()) {
+ nodeRepository().nodes().write(updatedNode, mutex);
+ }
+ }
+ }
+ }
+
/**
* Provision hosts to ensure there is room to allocate spare nodes.
*