diff options
author | Ola Aunrønning <olaa@verizonmedia.com> | 2020-11-06 11:50:03 +0100 |
---|---|---|
committer | Ola Aunrønning <olaa@verizonmedia.com> | 2020-11-06 12:04:09 +0100 |
commit | 8a8a23524f62bee5c0740f9487ebf6c420aa6e98 (patch) | |
tree | 0404a1c00318bd531b750f5beded31a9ad398fee | |
parent | f199888b02ff294455e5a6272972e60ab02665af (diff) |
Maintain all nodes in breakfixed state
4 files changed, 18 insertions, 40 deletions
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/repair/HostRepairClient.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/repair/HostRepairClient.java index a4a5a773cb9..c3fa0890cbb 100644 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/repair/HostRepairClient.java +++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/repair/HostRepairClient.java @@ -15,7 +15,7 @@ import java.util.Map; public interface HostRepairClient { /* Checks current ticket status and takes appropriate action */ - void updateRepairStatus(ZoneApi zone, Map<Node, RepairTicketReport> nodes); + void updateRepairStatus(ZoneApi zone, List<Node> nodes); /* Creates reparation ticket for given host. Returns ticket number */ String createTicket(HostName hostname, String colo, ZoneId zoneId, String description, String category); diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/repair/MockRepairClient.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/repair/MockRepairClient.java index 6ceceda5712..7a4398d69bb 100644 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/repair/MockRepairClient.java +++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/repair/MockRepairClient.java @@ -18,8 +18,8 @@ public class MockRepairClient implements HostRepairClient { List<Node> updatedNodes = new ArrayList<>(); @Override - public void updateRepairStatus(ZoneApi zone, Map<Node, RepairTicketReport> nodes) { - updatedNodes.addAll(nodes.keySet()); + public void updateRepairStatus(ZoneApi zone, List<Node> nodes) { + updatedNodes.addAll(nodes); } @Override diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/HostRepairMaintainer.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/HostRepairMaintainer.java index e3c6862384f..57727e64e30 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/HostRepairMaintainer.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/HostRepairMaintainer.java @@ -47,15 +47,12 @@ public class HostRepairMaintainer extends ControllerMaintainer { controller().zoneRegistry().zones() .reachable().zones().stream() .forEach(zoneApi -> { - var nodeTicketMap = nodeRepository.list((zoneApi).getId()) + var breakfixedNodes = nodeRepository.list((zoneApi).getId()) .stream() - .filter(this::hasOpenTicket) - .collect(Collectors.toMap( - node -> node, - this::getTicketReport) - ); + .filter(node -> node.state() == Node.State.breakfixed) + .collect(Collectors.toList()); try { - repairClient.updateRepairStatus(zoneApi, nodeTicketMap); + repairClient.updateRepairStatus(zoneApi, breakfixedNodes); } catch (Exception e) { log.warning("Failed to update repair status; " + Exceptions.toMessageString(e)); exceptions.incrementAndGet(); @@ -66,16 +63,4 @@ public class HostRepairMaintainer extends ControllerMaintainer { return exceptions.get() == 0; } - - private boolean hasOpenTicket(Node node) { - var reports = node.reports(); - if (!reports.containsKey(RepairTicketReport.getReportId())) { - return false; - } - return "OPEN".equals(getTicketReport(node).getStatus()); - } - - private RepairTicketReport getTicketReport(Node node) { - return uncheck(() -> RepairTicketReport.fromJsonNode(node.reports().get(RepairTicketReport.getReportId()))); - } } diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/HostRepairMaintainerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/HostRepairMaintainerTest.java index 556755581fe..ab6e13bb5a2 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/HostRepairMaintainerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/HostRepairMaintainerTest.java @@ -3,10 +3,7 @@ package com.yahoo.vespa.hosted.controller.maintenance; import com.yahoo.config.provision.HostName; import com.yahoo.config.provision.zone.ZoneId; import com.yahoo.vespa.hosted.controller.ControllerTester; -import com.yahoo.vespa.hosted.controller.api.integration.noderepository.NodeRepositoryNode; -import com.yahoo.vespa.hosted.controller.api.integration.repair.HostRepairClient; -import com.yahoo.vespa.hosted.controller.api.integration.repair.MockRepairClient; -import com.yahoo.vespa.hosted.controller.api.integration.repair.RepairTicketReport; +import com.yahoo.vespa.hosted.controller.api.integration.configserver.Node; import org.junit.Test; import java.time.Duration; @@ -29,23 +26,19 @@ public class HostRepairMaintainerTest { var hostname1 = HostName.from("node-1-tenant-host-dev.us-east-1"); var hostname2 = HostName.from("node-2-tenant-host-dev.us-east-1"); var timestamp = Instant.now().toEpochMilli(); - var openTicket = new RepairTicketReport("OPEN", "ticket-1", timestamp, timestamp); - var closedTicket = new RepairTicketReport("CLOSED", "ticket-2", timestamp, timestamp); - - tester.configServer().nodeRepository().addReport( - zoneId, - hostname1, - RepairTicketReport.getReportId(), - openTicket.toJsonNode()); - tester.configServer().nodeRepository().addReport( - zoneId, - hostname2, - RepairTicketReport.getReportId(), - closedTicket.toJsonNode()); + var node1 = new Node.Builder() + .state(Node.State.active) + .hostname(hostname1) + .build(); + var node2 = new Node.Builder() + .state(Node.State.breakfixed) + .hostname(hostname2) + .build(); + tester.configServer().nodeRepository().putNodes(zoneId, List.of(node1, node2)); maintainer.maintain(); var updatedNodes = tester.serviceRegistry().hostRepairClient().getUpdatedNodes(); assertEquals(1, updatedNodes.size()); - assertEquals(hostname1, updatedNodes.get(0).hostname()); + assertEquals(hostname2, updatedNodes.get(0).hostname()); } }
\ No newline at end of file |