diff options
author | Martin Polden <mpolden@mpolden.no> | 2021-07-15 09:52:33 +0200 |
---|---|---|
committer | Martin Polden <mpolden@mpolden.no> | 2021-07-16 09:02:31 +0200 |
commit | 6a558ebb82bb58b42990ff7dad8af35c70812424 (patch) | |
tree | 95d0bf6ea0b319333b388b5d8ce32072f6cf3ab6 /controller-server/src/main | |
parent | 073c5be0df2970bd4e6d926a56d14657965992d3 (diff) |
Stop using NodeRepositoryNode in patch operations
Diffstat (limited to 'controller-server/src/main')
3 files changed, 24 insertions, 34 deletions
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/CloudEventReporter.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/CloudEventReporter.java index 3c5495a6bfe..a8089555ffc 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/CloudEventReporter.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/CloudEventReporter.java @@ -59,7 +59,7 @@ public class CloudEventReporter extends ControllerMaintainer { if (!affects(node, event)) continue; log.info("Retiring and deprovisioning " + node.hostname().value() + " in " + zone.getId() + ": Affected by maintenance event " + event.instanceEventId); - nodeRepository.retireAndDeprovision(zone.getId(), node.hostname().value()); + nodeRepository.retire(zone.getId(), node.hostname().value(), true, true); } } } diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/HostInfoUpdater.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/HostInfoUpdater.java index 10e6f9eb039..5622fcdac4e 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/HostInfoUpdater.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/HostInfoUpdater.java @@ -7,7 +7,6 @@ import com.yahoo.vespa.hosted.controller.api.integration.configserver.Node; import com.yahoo.vespa.hosted.controller.api.integration.configserver.NodeRepository; import com.yahoo.vespa.hosted.controller.api.integration.entity.EntityService; import com.yahoo.vespa.hosted.controller.api.integration.entity.NodeEntity; -import com.yahoo.vespa.hosted.controller.api.integration.noderepository.NodeRepositoryNode; import java.time.Duration; import java.util.EnumSet; @@ -48,13 +47,24 @@ public class HostInfoUpdater extends ControllerMaintainer { for (var node : nodeRepository.list(zone, false)) { if (!node.type().isHost()) continue; NodeEntity nodeEntity = nodeEntities.get(registeredHostnameOf(node)); - if (!shouldUpdateSwitch(node, nodeEntity) && !shouldUpdateModel(node, nodeEntity)) continue; + if (nodeEntity == null) continue; - NodeRepositoryNode updatedNode = new NodeRepositoryNode(); - nodeEntity.switchHostname().ifPresent(updatedNode::setSwitchHostname); - buildModelName(nodeEntity).ifPresent(updatedNode::setModelName); - nodeRepository.patchNode(zone, node.hostname().value(), updatedNode); - hostsUpdated++; + boolean updatedHost = false; + Optional<String> modelName = modelNameOf(nodeEntity); + if (modelName.isPresent() && !modelName.equals(node.modelName())) { + nodeRepository.updateModel(zone, node.hostname().value(), modelName.get()); + updatedHost = true; + } + + Optional<String> switchHostname = nodeEntity.switchHostname(); + if (switchHostname.isPresent() && !switchHostname.equals(node.switchHostname())) { + nodeRepository.updateSwitchHostname(zone, node.hostname().value(), switchHostname.get()); + updatedHost = true; + } + + if (updatedHost) { + hostsUpdated++; + } } } } finally { @@ -65,9 +75,8 @@ public class HostInfoUpdater extends ControllerMaintainer { return 1.0; } - private static Optional<String> buildModelName(NodeEntity nodeEntity) { - if(nodeEntity.manufacturer().isEmpty() || nodeEntity.model().isEmpty()) - return Optional.empty(); + private static Optional<String> modelNameOf(NodeEntity nodeEntity) { + if (nodeEntity.manufacturer().isEmpty() || nodeEntity.model().isEmpty()) return Optional.empty(); return Optional.of(nodeEntity.manufacturer().get() + " " + nodeEntity.model().get()); } @@ -80,17 +89,4 @@ public class HostInfoUpdater extends ControllerMaintainer { return matcher.replaceFirst("$1$2"); } - private static boolean shouldUpdateSwitch(Node node, NodeEntity nodeEntity) { - if (nodeEntity == null) return false; - if (nodeEntity.switchHostname().isEmpty()) return false; - return !node.switchHostname().equals(nodeEntity.switchHostname()); - } - - private static boolean shouldUpdateModel(Node node, NodeEntity nodeEntity) { - if (nodeEntity == null) return false; - if (nodeEntity.model().isEmpty()) return false; - if (nodeEntity.manufacturer().isEmpty()) return false; - return !node.modelName().equals(buildModelName(nodeEntity)); - } - } diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/VCMRMaintainer.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/VCMRMaintainer.java index 19617a1f293..96ba87575e4 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/VCMRMaintainer.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/VCMRMaintainer.java @@ -1,7 +1,6 @@ // Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.controller.maintenance; -import com.fasterxml.jackson.databind.JsonNode; import com.yahoo.config.provision.Environment; import com.yahoo.config.provision.NodeType; import com.yahoo.config.provision.SystemName; @@ -10,8 +9,6 @@ import com.yahoo.text.Text; import com.yahoo.vespa.hosted.controller.Controller; import com.yahoo.vespa.hosted.controller.api.integration.configserver.Node; import com.yahoo.vespa.hosted.controller.api.integration.configserver.NodeRepository; -import com.yahoo.vespa.hosted.controller.api.integration.noderepository.NodeRepositoryNode; -import com.yahoo.vespa.hosted.controller.api.integration.noderepository.NodeState; import com.yahoo.vespa.hosted.controller.api.integration.vcmr.ChangeRequest; import com.yahoo.vespa.hosted.controller.api.integration.vcmr.ChangeRequest.Impact; import com.yahoo.vespa.hosted.controller.api.integration.vcmr.ChangeRequestClient; @@ -201,7 +198,7 @@ public class VCMRMaintainer extends ControllerMaintainer { if (hostAction.getState() == State.RETIRED && node.state() == Node.State.parked) { logger.info("Setting " + node.hostname() + " to dirty"); - nodeRepository.setState(zoneId, NodeState.dirty, node.hostname().value()); + nodeRepository.setState(zoneId, Node.State.dirty, node.hostname().value()); } if (hostAction.getState() == State.RETIRING && node.wantToRetire()) { try { @@ -275,9 +272,7 @@ public class VCMRMaintainer extends ControllerMaintainer { } private void setWantToRetire(ZoneId zoneId, Node node, boolean wantToRetire) { - var newNode = new NodeRepositoryNode(); - newNode.setWantToRetire(wantToRetire); - nodeRepository.patchNode(zoneId, node.hostname().value(), newNode); + nodeRepository.retire(zoneId, node.hostname().value(), wantToRetire, false); } private void approveChangeRequest(VespaChangeRequest changeRequest) { @@ -311,8 +306,7 @@ public class VCMRMaintainer extends ControllerMaintainer { private void updateReport(ZoneId zoneId, Node node, VCMRReport report) { logger.info(Text.format("Updating report for %s: %s", node.hostname(), report)); - var newNode = new NodeRepositoryNode(); - newNode.setReports(report.toNodeReports()); - nodeRepository.patchNode(zoneId, node.hostname().value(), newNode); + nodeRepository.updateReports(zoneId, node.hostname().value(), report.toNodeReports()); } + } |