diff options
author | Martin Polden <mpolden@mpolden.no> | 2022-09-23 13:38:52 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-09-23 13:38:52 +0200 |
commit | ba9328856ecd42d0f4df2dcced793afc51f458b8 (patch) | |
tree | 875dc7c4e3fa6fd69d8b8fc599a68ecab1adb357 /controller-server | |
parent | 922ce1f4e259c22417300ed3008d29d06c9f35de (diff) | |
parent | 5430891caa1c59bb6d0d14a5f7ccadd1855405c3 (diff) |
Merge pull request #24196 from vespa-engine/mpolden/lower-interval
Lower OsUpgradeScheduler interval
Diffstat (limited to 'controller-server')
5 files changed, 47 insertions, 59 deletions
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<NameServiceRequest> requests) { public static final NameServiceQueue EMPTY = new NameServiceQueue(List.of()); private static final Logger log = Logger.getLogger(NameServiceQueue.class.getName()); - private final LinkedList<NameServiceRequest> requests; - /** DO NOT USE. Public for serialization purposes */ public NameServiceQueue(List<NameServiceRequest> requests) { - this.requests = new LinkedList<>(Objects.requireNonNull(requests, "requests must be non-null")); - } - - /** Returns a view of requests in this queue */ - public List<NameServiceRequest> 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<NameServiceRequest> 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<NameServiceRequest> 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/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); 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); 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<DeploymentId> deployments = endpoints.stream() .flatMap(e -> e.deployments().stream()) .distinct() - .collect(Collectors.toList()); + .toList(); Map<DeploymentId, RoutingStatus> 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"; + }; } } |