summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOla Aunrønning <olaa@verizonmedia.com>2020-11-06 11:50:03 +0100
committerOla Aunrønning <olaa@verizonmedia.com>2020-11-06 12:04:09 +0100
commit8a8a23524f62bee5c0740f9487ebf6c420aa6e98 (patch)
tree0404a1c00318bd531b750f5beded31a9ad398fee
parentf199888b02ff294455e5a6272972e60ab02665af (diff)
Maintain all nodes in breakfixed state
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/repair/HostRepairClient.java2
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/repair/MockRepairClient.java4
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/HostRepairMaintainer.java23
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/HostRepairMaintainerTest.java29
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