From 8d5fc524c26fe61c4cb9f3303c3c464338b69d3e Mon Sep 17 00:00:00 2001 From: Martin Polden Date: Tue, 13 Sep 2022 13:40:47 +0200 Subject: Convert to record --- .../hosted/controller/dns/NameServiceQueue.java | 41 ++++++++++------------ .../maintenance/NameServiceDispatcher.java | 2 +- .../persistence/NameServiceQueueSerializer.java | 14 +++----- 3 files changed, 24 insertions(+), 33 deletions(-) (limited to 'controller-server') diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/dns/NameServiceQueue.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/dns/NameServiceQueue.java index 89fa560e035..516a1aa265f 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/dns/NameServiceQueue.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/dns/NameServiceQueue.java @@ -4,7 +4,7 @@ package com.yahoo.vespa.hosted.controller.dns; import com.yahoo.vespa.hosted.controller.api.integration.dns.NameService; import com.yahoo.yolean.Exceptions; -import java.util.Collections; +import java.util.ArrayList; import java.util.LinkedList; import java.util.List; import java.util.Objects; @@ -20,22 +20,15 @@ import java.util.logging.Logger; * * @author mpolden */ -public class NameServiceQueue { +public record NameServiceQueue(List requests) { public static final NameServiceQueue EMPTY = new NameServiceQueue(List.of()); private static final Logger log = Logger.getLogger(NameServiceQueue.class.getName()); - private final LinkedList requests; - /** DO NOT USE. Public for serialization purposes */ public NameServiceQueue(List requests) { - this.requests = new LinkedList<>(Objects.requireNonNull(requests, "requests must be non-null")); - } - - /** Returns a view of requests in this queue */ - public List requests() { - return Collections.unmodifiableList(requests); + this.requests = List.copyOf(Objects.requireNonNull(requests, "requests must be non-null")); } /** Returns a copy of this containing the last n requests */ @@ -50,13 +43,18 @@ public class NameServiceQueue { /** Returns a copy of this with given request queued according to priority */ public NameServiceQueue with(NameServiceRequest request, Priority priority) { - var queue = new NameServiceQueue(this.requests); - if (priority == Priority.high) { - queue.requests.addFirst(request); - } else { - queue.requests.add(request); + List copy = new ArrayList<>(this.requests.size() + 1); + switch (priority) { + case normal -> { + copy.addAll(this.requests); + copy.add(request); + } + case high -> { + copy.add(request); + copy.addAll(this.requests); + } } - return queue; + return new NameServiceQueue(copy); } /** Returns a copy of this with given request added */ @@ -73,19 +71,18 @@ public class NameServiceQueue { requireNonNegative(n); if (requests.isEmpty()) return this; - var queue = new NameServiceQueue(requests); - for (int i = 0; i < n && !queue.requests.isEmpty(); i++) { - var request = queue.requests.peek(); + LinkedList copy = new LinkedList<>(requests); + for (int i = 0; i < n && !copy.isEmpty(); i++) { + var request = copy.peek(); try { request.dispatchTo(nameService); - queue.requests.poll(); + copy.poll(); } catch (Exception e) { log.log(Level.WARNING, "Failed to execute " + request + ": " + Exceptions.toMessageString(e) + ", request will be retried"); } } - - return queue; + return new NameServiceQueue(copy); } @Override diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/NameServiceDispatcher.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/NameServiceDispatcher.java index 19616f862ab..964d4228f9a 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/NameServiceDispatcher.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/NameServiceDispatcher.java @@ -38,7 +38,7 @@ public class NameServiceDispatcher extends ControllerMaintainer { var queue = db.readNameServiceQueue(); var instant = clock.instant(); var remaining = queue.dispatchTo(nameService, requestCount); - if (queue == remaining) return 1.0; // Queue unchanged + if (queue.equals(remaining)) return 1.0; // Queue unchanged var dispatched = queue.first(requestCount); if (!dispatched.requests().isEmpty()) { diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/NameServiceQueueSerializer.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/NameServiceQueueSerializer.java index e37f5e895c0..3fd2a262e2e 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/NameServiceQueueSerializer.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/NameServiceQueueSerializer.java @@ -63,16 +63,10 @@ public class NameServiceQueueSerializer { root.field(requestsField).traverse((ArrayTraverser) (i, object) -> { var request = Request.valueOf(object.field(requestType).asString()); switch (request) { - case createRecords: - items.add(createRecordsFromSlime(object)); - break; - case createRecord: - items.add(createRecordFromSlime(object)); - break; - case removeRecords: - items.add(removeRecordsFromSlime(object)); - break; - default: throw new IllegalArgumentException("No serialization defined for request " + request); + case createRecords -> items.add(createRecordsFromSlime(object)); + case createRecord -> items.add(createRecordFromSlime(object)); + case removeRecords -> items.add(removeRecordsFromSlime(object)); + default -> throw new IllegalArgumentException("No serialization defined for request " + request); } }); return new NameServiceQueue(items); -- cgit v1.2.3 From 08c8c5412eb045dc615d117c7ec41da8b9413bbc Mon Sep 17 00:00:00 2001 From: Martin Polden Date: Thu, 22 Sep 2022 16:25:46 +0200 Subject: Use switch expression --- .../restapi/routing/RoutingApiHandler.java | 47 ++++++++++------------ 1 file changed, 22 insertions(+), 25 deletions(-) (limited to 'controller-server') diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/routing/RoutingApiHandler.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/routing/RoutingApiHandler.java index 2ecd63546e6..05dd8257ad0 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/routing/RoutingApiHandler.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/routing/RoutingApiHandler.java @@ -60,12 +60,12 @@ public class RoutingApiHandler extends AuditLoggingRequestHandler { public HttpResponse auditAndHandle(HttpRequest request) { try { var path = new Path(request.getUri()); - switch (request.getMethod()) { - case GET: return get(path, request); - case POST: return post(path, request); - case DELETE: return delete(path, request); - default: return ErrorResponse.methodNotAllowed("Method '" + request.getMethod() + "' is not supported"); - } + return switch (request.getMethod()) { + case GET -> get(path, request); + case POST -> post(path, request); + case DELETE -> delete(path, request); + default -> ErrorResponse.methodNotAllowed("Method '" + request.getMethod() + "' is not supported"); + }; } catch (IllegalArgumentException e) { return ErrorResponse.badRequest(Exceptions.toMessageString(e)); } catch (RuntimeException e) { @@ -106,7 +106,7 @@ public class RoutingApiHandler extends AuditLoggingRequestHandler { List deployments = endpoints.stream() .flatMap(e -> e.deployments().stream()) .distinct() - .collect(Collectors.toList()); + .toList(); Map deploymentsStatus = deployments.stream() .collect(Collectors.toMap( @@ -256,8 +256,7 @@ public class RoutingApiHandler extends AuditLoggingRequestHandler { EndpointList declaredEndpoints = controller.routing().declaredEndpointsOf(application); for (var instance : instances) { var zones = zoneId == null - ? instance.deployments().keySet().stream().sorted(Comparator.comparing(ZoneId::value)) - .collect(Collectors.toList()) + ? instance.deployments().keySet().stream().sorted(Comparator.comparing(ZoneId::value)).toList() : List.of(zoneId); for (var zone : zones) { DeploymentId deploymentId = requireDeployment(new DeploymentId(instance.id(), zone), instance); @@ -350,28 +349,26 @@ public class RoutingApiHandler extends AuditLoggingRequestHandler { } private static String asString(RoutingStatus.Value value) { - switch (value) { - case in: return "in"; - case out: return "out"; - default: return "unknown"; - } + return switch (value) { + case in -> "in"; + case out -> "out"; + }; } private static String asString(RoutingStatus.Agent agent) { - switch (agent) { - case operator: return "operator"; - case system: return "system"; - case tenant: return "tenant"; - default: return "unknown"; - } + return switch (agent) { + case operator -> "operator"; + case system -> "system"; + case tenant -> "tenant"; + case unknown -> "unknown"; + }; } private static String asString(RoutingMethod method) { - switch (method) { - case exclusive: return "exclusive"; - case sharedLayer4: return "sharedLayer4"; - default: return "unknown"; - } + return switch (method) { + case exclusive -> "exclusive"; + case sharedLayer4 -> "sharedLayer4"; + }; } } -- cgit v1.2.3 From 5430891caa1c59bb6d0d14a5f7ccadd1855405c3 Mon Sep 17 00:00:00 2001 From: Martin Polden Date: Fri, 23 Sep 2022 10:50:20 +0200 Subject: Lower OsUpgradeScheduler interval --- .../vespa/hosted/controller/maintenance/ControllerMaintenance.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'controller-server') diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/ControllerMaintenance.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/ControllerMaintenance.java index ab2e0312b15..9c6ab32a338 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/ControllerMaintenance.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/ControllerMaintenance.java @@ -150,7 +150,7 @@ public class ControllerMaintenance extends AbstractComponent { this.jobRunner = duration(system.isCd() ? 45 : 90, SECONDS); this.osVersionStatusUpdater = duration(2, MINUTES); this.osUpgrader = duration(1, MINUTES); - this.osUpgradeScheduler = duration(3, HOURS); + this.osUpgradeScheduler = duration(15, MINUTES); this.contactInformationMaintainer = duration(12, HOURS); this.nameServiceDispatcher = duration(10, SECONDS); this.costReportMaintainer = duration(2, HOURS); -- cgit v1.2.3